diff --git a/.editorconfig b/.editorconfig index 3f08c1a48..dffb18adf 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,15 +2,12 @@ root = true [*] +charset = utf-8 indent_style = space -indent_size = 4 +indent_size = 2 end_of_line = lf -charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[*.{json,yml}] -indent_size = 2 - [*.md] trim_trailing_whitespace = false diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..509703bbe --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,72 @@ +module.exports = { + root: true, + parser: 'babel-eslint', + parserOptions: { + sourceType: 'module', + ecmaVersion: 2019, + jsx: true, + }, + env: { + browser: true, + node: true, + es6: true, + }, + plugins: ['prettier', 'import'], + extends: [ + 'eslint:recommended', + 'plugin:import/recommended', + 'plugin:react/recommended', + ], + settings: { + react: { + version: '16.4.1', // React version. "detect" automatically picks the version you have installed. + }, + 'import/ignore': ['node_modules', '.json$'], + }, + rules: { + 'prettier/prettier': ['error'], + camelcase: ['error'], + curly: ['error', 'all'], + 'dot-notation': ['error'], + eqeqeq: ['error'], + 'handle-callback-err': ['error'], + 'new-cap': ['error'], + 'no-alert': ['error'], + 'no-caller': ['error'], + 'no-eval': ['error'], + 'no-labels': ['error'], + 'no-lonely-if': ['error'], + 'no-new': ['error'], + 'no-proto': ['error'], + 'no-return-assign': ['error'], + 'no-self-compare': ['error'], + 'no-shadow': ['error'], + 'no-shadow-restricted-names': ['error'], + 'no-useless-call': ['error'], + 'no-var': ['error'], + 'no-void': ['error'], + 'no-warning-comments': ['error'], + 'no-with': ['error'], + radix: ['error'], + 'spaced-comment': ['error', 'always'], + strict: ['error', 'global'], + yoda: ['error', 'never'], + + // Import rules + // Search way how integrate with `lerna` + 'import/no-unresolved': 'off', + 'import/imports-first': ['error'], + 'import/newline-after-import': ['error'], + 'import/no-duplicates': ['error'], + 'import/no-mutable-exports': ['error'], + 'import/no-named-as-default': ['error'], + 'import/no-named-as-default-member': ['error'], + 'import/order': ['error'], + 'import/prefer-default-export': ['error'], + + // React + // Need enable in future + 'react/prop-types': ['off'], + 'react/display-name': ['off'], + }, +}; diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 000000000..1934550a6 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + singleQuote: true, + trailingComma: 'es5', + arrowParens: 'always', +}; diff --git a/.remarkrc.js b/.remarkrc.js index 348e638d9..b81482ac2 100644 --- a/.remarkrc.js +++ b/.remarkrc.js @@ -1,28 +1,28 @@ const bookmarks = { - /* Packages */ - 'autoprefixer': 'https://github.com/postcss/autoprefixer', - 'browserslist': 'https://github.com/ai/browserslist', - 'css-size': 'https://npmjs.org/package/css-size', - /* Documentation/Online */ - 'node.js': 'https://nodejs.org', - 'npm': 'https://npmjs.com', - 'postcss': 'http://postcss.org', - /* Guides */ - 'guidePresets': '/guides/presets', - 'guideGettingStarted': '/guides/getting-started', - 'guideAdvancedTransforms': '/guides/advanced-transforms', - 'guideContributing': '/guides/contributing', + /* Packages */ + autoprefixer: 'https://github.com/postcss/autoprefixer', + browserslist: 'https://github.com/ai/browserslist', + 'css-size': 'https://npmjs.org/package/css-size', + /* Documentation/Online */ + 'node.js': 'https://nodejs.org', + npm: 'https://npmjs.com', + postcss: 'http://postcss.org', + /* Guides */ + guidePresets: '/guides/presets', + guideGettingStarted: '/guides/getting-started', + guideAdvancedTransforms: '/guides/advanced-transforms', + guideContributing: '/guides/contributing', }; exports.settings = { - bullet: '-', - fences: true, - listItemIndent: '1', - paddedTable: false, + bullet: '-', + fences: true, + listItemIndent: '1', + paddedTable: false, }; exports.plugins = [ - [require('remark-heading-gap'), {}], - [require('remark-bookmarks'), {bookmarks}], - [require('remark-frontmatter')] + [require('remark-heading-gap'), {}], + [require('remark-bookmarks'), { bookmarks }], + [require('remark-frontmatter')], ]; diff --git a/README.md b/README.md index 8b190e2b0..6b4bee546 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![NPM version](https://img.shields.io/npm/v/cssnano.svg)](https://www.npmjs.org/package/cssnano) [![Build Status](https://travis-ci.org/cssnano/cssnano.svg?branch=master)](https://travis-ci.org/cssnano/cssnano) -[![Build status](https://ci.appveyor.com/api/projects/status/t1chyvhobtju7jy8/branch/master?svg=true)](https://ci.appveyor.com/project/cssnano/cssnano/branch/master) +[![Build status](https://ci.appveyor.com/api/projects/status/t1chyvhobtju7jy8/branch/master?svg=true)](https://ci.appveyor.com/project/cssnano/cssnano/branch/master) [![Coverage Status](https://coveralls.io/repos/github/cssnano/cssnano/badge.svg?branch=master)](https://coveralls.io/github/cssnano/cssnano?branch=master) [![Gitter](https://img.shields.io/badge/Gitter-Join_the_PostCSS_chat-brightgreen.svg)](https://gitter.im/postcss/postcss) @@ -32,17 +32,15 @@ to provide different output depending on the browsers that you support. For further details check out the [website](http://cssnano.co/): -* [Installation guide for your build process](http://cssnano.co/guides/getting-started). -* [Full list of optimisations](http://cssnano.co/optimisations/). +- [Installation guide for your build process](http://cssnano.co/guides/getting-started). +- [Full list of optimisations](http://cssnano.co/optimisations/). You can now [try cssnano online](https://cssnano.co/playground/)! - ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md). - ## License MIT © [Ben Briggs](http://beneb.info) diff --git a/lerna.json b/lerna.json index ca526d88d..cb45fc17b 100644 --- a/lerna.json +++ b/lerna.json @@ -3,13 +3,9 @@ "npmClient": "yarn", "command": { "publish": { - "ignoreChanges": [ - "package-lock.json" - ] + "ignoreChanges": ["package-lock.json"] } }, - "packages": [ - "packages/*" - ], + "packages": ["packages/*"], "version": "independent" } diff --git a/package.json b/package.json index 878bbba3c..6563ee6fd 100644 --- a/package.json +++ b/package.json @@ -3,18 +3,18 @@ "private": true, "scripts": { "all-contributors": "all-contributors add", - "lint": "eslint --ignore-path .gitignore packages/**/src util", - "fixlint": "eslint --fix --ignore-path .gitignore packages/**/src util", + "lint": "eslint . --cache --ignore-path .gitignore", + "fixlint": "yarn lint -- --fix", "postinstall": "lerna bootstrap", "build:packages": "babel-node ./util/buildPackages.js", "build:aliases": "babel-node ./util/buildAliases.js", "build:metadata": "babel-node ./util/buildMetadata.js", - "build:site": "remark site/content/**/*.md -o && npm run build:metadata && babel-node ./util/buildSiteMarkdown.js && cd site && npm run build", - "build:integration": "babel-node ./util/buildFrameworks.js", - "pretest": "npm run lint", + "build:site": "remark site/content/**/*.md -o && yarn build:metadata && babel-node ./util/buildSiteMarkdown.js && cd site && yarn build", + "build:integration": "cross-env BABEL_ENV=test babel-node ./util/buildFrameworks.js", + "pretest": "yarn lint", "test-only": "cross-env BABEL_ENV=test ava", - "test-only:coverage": "nyc --reporter=lcov --reporter=text npm run test-only", - "test": "npm run test-only", + "test-only:coverage": "nyc --reporter=lcov --reporter=text yarn test-only", + "test": "yarn test-only", "deploy": "gh-pages -t -d site/dist", "publish": "lerna publish" }, @@ -24,6 +24,7 @@ "devDependencies": { "all-contributors-cli": "^5.0.0", "ava": "^0.25.0", + "babel-eslint": "^10.0.1", "babel-cli": "^6.0.0", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-module-resolver": "^2.5.0", @@ -34,10 +35,10 @@ "coveralls": "^3.0.1", "cross-env": "^5.1.6", "dox": "^0.9.0", - "eslint": "^3.0.0", - "eslint-config-cssnano": "^3.0.0", - "eslint-plugin-babel": "^3.3.0", - "eslint-plugin-import": "^2.0.0", + "eslint": "^5.16.0", + "eslint-plugin-import": "^2.17.2", + "eslint-plugin-react": "^7.12.4", + "eslint-plugin-prettier": "^3.0.1", "fs-extra": "^6.0.1", "get-pkg-repo": "^2.0.0", "gh-pages": "^1.2.0", @@ -46,6 +47,7 @@ "mdast-util-heading-range": "^2.0.1", "nyc": "^12.0.2", "postcss": "^7.0.0", + "prettier": "^1.17.0", "remark": "^9.0.0", "remark-behead": "^2.0.1", "remark-bookmarks": "^1.0.0", @@ -198,14 +200,6 @@ ] ] }, - "eslintConfig": { - "extends": "cssnano", - "rules": { - "import/no-unresolved": [ - 0 - ] - } - }, "browserslist": { "chrome58": [ "Chrome 58" diff --git a/packages/css-size/css-size.d.ts b/packages/css-size/css-size.d.ts index 06f31f5d3..a8b37ebea 100644 --- a/packages/css-size/css-size.d.ts +++ b/packages/css-size/css-size.d.ts @@ -1,6 +1,5 @@ export = cssSize; - declare function cssSize( css: string, options: cssSize.ProcessOptions, @@ -46,4 +45,4 @@ declare namespace cssSize { gzip: SizeInfo; brotli: SizeInfo; } -} \ No newline at end of file +} diff --git a/packages/css-size/index.js b/packages/css-size/index.js index 273a77e5b..c98f4af7e 100644 --- a/packages/css-size/index.js +++ b/packages/css-size/index.js @@ -1,4 +1,5 @@ -var cssSize = require("./dist/index.js"); +const cssSize = require('./dist/index.js'); + module.exports = cssSize.default; module.exports.table = cssSize.table; module.exports.numeric = cssSize.numeric; diff --git a/packages/css-size/processors/nano.js b/packages/css-size/processors/nano.js index 4fb693b10..ed0526c84 100644 --- a/packages/css-size/processors/nano.js +++ b/packages/css-size/processors/nano.js @@ -1,5 +1,5 @@ -let nano = require("cssnano"); +let nano = require('cssnano'); -module.exports = function (css, opts) { - return nano.process(css, opts); +module.exports = function(css, opts) { + return nano.process(css, opts); }; diff --git a/packages/css-size/processors/noop.js b/packages/css-size/processors/noop.js index 5580e1883..3b9a356cc 100644 --- a/packages/css-size/processors/noop.js +++ b/packages/css-size/processors/noop.js @@ -1,3 +1,3 @@ -module.exports = function (css) { - return Promise.resolve({css: css}); +module.exports = function(css) { + return Promise.resolve({ css: css }); }; diff --git a/packages/css-size/src/__tests__/index.js b/packages/css-size/src/__tests__/index.js index 3c42fa0fc..96d6733d1 100644 --- a/packages/css-size/src/__tests__/index.js +++ b/packages/css-size/src/__tests__/index.js @@ -1,80 +1,86 @@ -import {readFileSync as read} from 'fs'; -import {spawn} from 'child_process'; +import { readFileSync as read } from 'fs'; +import { spawn } from 'child_process'; import path from 'path'; import colors from 'colors/safe'; import test from 'ava'; -import size, {table, numeric} from '../'; +import size, { table, numeric } from '../'; let noopProcessorPath = path.resolve(__dirname, '../../processors/noop.js'); -function setup (args) { - return new Promise((resolve, reject) => { - process.chdir(__dirname); +function setup(args) { + return new Promise((resolve, reject) => { + process.chdir(__dirname); - let ps = spawn(process.execPath, [ - path.resolve(__dirname, '../../dist/cli.js'), - ].concat(args)); + let ps = spawn( + process.execPath, + [path.resolve(__dirname, '../../dist/cli.js')].concat(args) + ); - let out = ''; - let err = ''; + let out = ''; + let err = ''; - ps.stdout.on('data', buffer => (out += buffer)); - ps.stderr.on('data', buffer => (err += buffer)); + ps.stdout.on('data', (buffer) => (out += buffer)); + ps.stderr.on('data', (buffer) => (err += buffer)); - ps.on('exit', code => { - if (code !== 0) { - return reject(err); - } - resolve([out, code]); - }); + ps.on('exit', (code) => { + if (code !== 0) { + return reject(err); + } + resolve([out, code]); }); + }); } -test('cli', t => { - return setup(['test.css']).then(results => { - let out = results[0]; - t.truthy(~out.indexOf('43 B')); - t.truthy(~out.indexOf('34 B')); - t.truthy(~out.indexOf('9 B')); - t.truthy(~out.indexOf('79.07%')); - }); +test('cli', (t) => { + return setup(['test.css']).then((results) => { + let out = results[0]; + t.truthy(~out.indexOf('43 B')); + t.truthy(~out.indexOf('34 B')); + t.truthy(~out.indexOf('9 B')); + t.truthy(~out.indexOf('79.07%')); + }); }); -test('cli with processor argument', t => { - return setup(['-p', noopProcessorPath, 'test.css']).then(results => { - let out = results[0]; - t.truthy(~out.indexOf('100%')); - }); +test('cli with processor argument', (t) => { + return setup(['-p', noopProcessorPath, 'test.css']).then((results) => { + let out = results[0]; + t.truthy(~out.indexOf('100%')); + }); }); -test('api', t => { - return size(read(path.join(__dirname, 'test.css'), 'utf-8')).then(result => { - t.deepEqual(result, { - uncompressed: { - original: '23 B', - processed: '14 B', - difference: '9 B', - percent: '60.87%', - }, - gzip: { - original: '43 B', - processed: '34 B', - difference: '9 B', - percent: '79.07%', - }, - brotli: { - original: '27 B', - processed: '16 B', - difference: '11 B', - percent: '59.26%', - }, - }); - }); +test('api', (t) => { + return size(read(path.join(__dirname, 'test.css'), 'utf-8')).then( + (result) => { + t.deepEqual(result, { + uncompressed: { + original: '23 B', + processed: '14 B', + difference: '9 B', + percent: '60.87%', + }, + gzip: { + original: '43 B', + processed: '34 B', + difference: '9 B', + percent: '79.07%', + }, + brotli: { + original: '27 B', + processed: '16 B', + difference: '11 B', + percent: '59.26%', + }, + }); + } + ); }); -test('table', t => { - return table(read(path.join(__dirname, 'test.css'), 'utf-8')).then(result => { - t.deepEqual(colors.stripColors(result), ` +test('table', (t) => { + return table(read(path.join(__dirname, 'test.css'), 'utf-8')).then( + (result) => { + t.deepEqual( + colors.stripColors(result), + ` ┌────────────┬──────────────┬────────┬────────┐ │ │ Uncompressed │ Gzip │ Brotli │ ├────────────┼──────────────┼────────┼────────┤ @@ -85,41 +91,43 @@ test('table', t => { │ Difference │ 9 B │ 9 B │ 11 B │ ├────────────┼──────────────┼────────┼────────┤ │ Percent │ 60.87% │ 79.07% │ 59.26% │ -└────────────┴──────────────┴────────┴────────┘`.trim()); - }); +└────────────┴──────────────┴────────┴────────┘`.trim() + ); + } + ); }); -test('numeric', t => { - return numeric(read(path.join(__dirname, 'test.css'), 'utf-8')).then(result => { - t.deepEqual(result, { - uncompressed: { - original: 23, - processed: 14, - difference: 9, - percent: 0.6087, - }, - gzip: { - original: 43, - processed: 34, - difference: 9, - percent: 0.7907, - }, - brotli: { - original: 27, - processed: 16, - difference: 11, - percent: 0.5926, - }, - }); - }); +test('numeric', (t) => { + return numeric(read(path.join(__dirname, 'test.css'), 'utf-8')).then( + (result) => { + t.deepEqual(result, { + uncompressed: { + original: 23, + processed: 14, + difference: 9, + percent: 0.6087, + }, + gzip: { + original: 43, + processed: 34, + difference: 9, + percent: 0.7907, + }, + brotli: { + original: 27, + processed: 16, + difference: 11, + percent: 0.5926, + }, + }); + } + ); }); -test('api options', t => { - return size( - '@namespace islands url("http://bar.yandex.ru/ui/islands");', { - discardUnused: false, - } - ).then(result => { - t.deepEqual(result.gzip.processed, "67 B"); - }); +test('api options', (t) => { + return size('@namespace islands url("http://bar.yandex.ru/ui/islands");', { + discardUnused: false, + }).then((result) => { + t.deepEqual(result.gzip.processed, '67 B'); + }); }); diff --git a/packages/css-size/src/cli.js b/packages/css-size/src/cli.js index 4898d092c..544accec7 100644 --- a/packages/css-size/src/cli.js +++ b/packages/css-size/src/cli.js @@ -5,36 +5,39 @@ import process from 'process'; import path from 'path'; import read from 'read-file-stdin'; import minimist from 'minimist'; -import {table} from './'; +import { table } from './'; const opts = minimist(process.argv.slice(2), { - alias: { - h: 'help', - v: 'version', - p: 'processor', - }, + alias: { + h: 'help', + v: 'version', + p: 'processor', + }, }); - if (opts.version) { - console.log(require('../package.json').version); + // eslint-disable-next-line no-console + console.log(require('../package.json').version); } else { - let file = opts._[0]; + let file = opts._[0]; - if (file === 'help' || opts.help) { - fs.createReadStream(__dirname + '/../usage.txt') - .pipe(process.stdout) - .on('close', () => process.exit(1)); - } else { - read(file, (err, buf) => { - if (err) { - throw err; - } - let processor = null; - if (opts.processor) { - processor = require(path.resolve(process.cwd(), opts.processor)); - } - table(buf, opts.options, processor).then((results) => console.log(results)); - }); - } + if (file === 'help' || opts.help) { + fs.createReadStream(__dirname + '/../usage.txt') + .pipe(process.stdout) + .on('close', () => process.exit(1)); + } else { + read(file, (err, buf) => { + if (err) { + throw err; + } + let processor = null; + if (opts.processor) { + processor = require(path.resolve(process.cwd(), opts.processor)); + } + table(buf, opts.options, processor).then((results) => + // eslint-disable-next-line no-console + console.log(results) + ); + }); + } } diff --git a/packages/css-size/src/index.js b/packages/css-size/src/index.js index c2df263c6..87b4444b4 100644 --- a/packages/css-size/src/index.js +++ b/packages/css-size/src/index.js @@ -1,102 +1,114 @@ import prettyBytes from 'pretty-bytes'; -import {sync as gzip} from 'gzip-size'; -import {sync as brotli} from 'brotli-size'; +import { sync as gzip } from 'gzip-size'; +import { sync as brotli } from 'brotli-size'; import Table from 'cli-table'; import round from 'round-precision'; import nano from 'cssnano'; const getBinarySize = (string) => { - return Buffer.byteLength(string, 'utf8'); + return Buffer.byteLength(string, 'utf8'); }; const percentDifference = (original, minified) => { - return round((minified / original) * 100, 2) + '%'; + return round((minified / original) * 100, 2) + '%'; }; const cssSize = (css, opts, processor) => { - processor = processor || nano.process.bind(nano); - css = css.toString(); - return processor(css, opts).then(result => { - let sizes = computeSizes(css, result.css); - deltasAsStrings(sizes.uncompressed); - deltasAsStrings(sizes.gzip); - deltasAsStrings(sizes.brotli); - return sizes; - }); + processor = processor || nano.process.bind(nano); + css = css.toString(); + return processor(css, opts).then((result) => { + let sizes = computeSizes(css, result.css); + deltasAsStrings(sizes.uncompressed); + deltasAsStrings(sizes.gzip); + deltasAsStrings(sizes.brotli); + return sizes; + }); }; const deltasAsStrings = (sizes) => { - sizes.difference = prettyBytes(sizes.original - sizes.processed); - sizes.percent = percentDifference(sizes.original, sizes.processed); - sizes.original = prettyBytes(sizes.original); - sizes.processed = prettyBytes(sizes.processed); + sizes.difference = prettyBytes(sizes.original - sizes.processed); + sizes.percent = percentDifference(sizes.original, sizes.processed); + sizes.original = prettyBytes(sizes.original); + sizes.processed = prettyBytes(sizes.processed); }; const computeSizes = (original, minified) => { - return { - uncompressed: { - original: getBinarySize(original), - processed: getBinarySize(minified), - }, - gzip: { - original: gzip(original), - processed: gzip(minified), - }, - brotli: { - original: brotli(original), - processed: brotli(minified), - }, - }; + return { + uncompressed: { + original: getBinarySize(original), + processed: getBinarySize(minified), + }, + gzip: { + original: gzip(original), + processed: gzip(minified), + }, + brotli: { + original: brotli(original), + processed: brotli(minified), + }, + }; }; const tableize = (data) => { - return { - head: ["", "Uncompressed", "Gzip", "Brotli"], - rows: [ - {Original: [ - data.uncompressed.original, - data.gzip.original, - data.brotli.original ]}, - {Processed: [ - data.uncompressed.processed, - data.gzip.processed, - data.brotli.processed ]}, - {Difference: [ - data.uncompressed.difference, - data.gzip.difference, - data.brotli.difference ]}, - {Percent: [ - data.uncompressed.percent, - data.gzip.percent, - data.brotli.percent ]}, + return { + head: ['', 'Uncompressed', 'Gzip', 'Brotli'], + rows: [ + { + Original: [ + data.uncompressed.original, + data.gzip.original, + data.brotli.original, ], - }; + }, + { + Processed: [ + data.uncompressed.processed, + data.gzip.processed, + data.brotli.processed, + ], + }, + { + Difference: [ + data.uncompressed.difference, + data.gzip.difference, + data.brotli.difference, + ], + }, + { + Percent: [ + data.uncompressed.percent, + data.gzip.percent, + data.brotli.percent, + ], + }, + ], + }; }; -export function table (css, opts, processor) { - return cssSize(css, opts, processor).then(data => { - let result = tableize(data); - let output = new Table({head: result.head}); - output.push.apply(output, result.rows); - return output.toString(); - }); +export function table(css, opts, processor) { + return cssSize(css, opts, processor).then((data) => { + let result = tableize(data); + let output = new Table({ head: result.head }); + output.push.apply(output, result.rows); + return output.toString(); + }); } -export function numeric (css, opts, processor) { - processor = processor || nano.process.bind(nano); - css = css.toString(); - return processor(css, opts).then(result => { - let sizes = computeSizes(css, result.css); - deltasAsNumbers(sizes.uncompressed); - deltasAsNumbers(sizes.gzip); - deltasAsNumbers(sizes.brotli); - return sizes; - }); +export function numeric(css, opts, processor) { + processor = processor || nano.process.bind(nano); + css = css.toString(); + return processor(css, opts).then((result) => { + let sizes = computeSizes(css, result.css); + deltasAsNumbers(sizes.uncompressed); + deltasAsNumbers(sizes.gzip); + deltasAsNumbers(sizes.brotli); + return sizes; + }); } const deltasAsNumbers = (sizes) => { - sizes.difference = sizes.original - sizes.processed; - sizes.percent = round(sizes.processed / sizes.original, 4); + sizes.difference = sizes.original - sizes.processed; + sizes.percent = round(sizes.processed / sizes.original, 4); }; export default cssSize; diff --git a/packages/cssnano-preset-advanced/src/__tests__/autoprefixer.js b/packages/cssnano-preset-advanced/src/__tests__/autoprefixer.js index 18d612d5a..89087a8ce 100644 --- a/packages/cssnano-preset-advanced/src/__tests__/autoprefixer.js +++ b/packages/cssnano-preset-advanced/src/__tests__/autoprefixer.js @@ -1,32 +1,36 @@ import test from 'ava'; import preset from '..'; -import {processCSSWithPresetFactory} from '../../../../util/testHelpers'; +import { processCSSWithPresetFactory } from '../../../../util/testHelpers'; -const {processCSS} = processCSSWithPresetFactory(preset); +const { processCSS } = processCSSWithPresetFactory(preset); test( - 'should remove outdated vendor prefixes', - processCSS, - 'h1{-webkit-box-sizing:content-box;box-sizing:content-box}', - 'h1{box-sizing:content-box}' + 'should remove outdated vendor prefixes', + processCSS, + 'h1{-webkit-box-sizing:content-box;box-sizing:content-box}', + 'h1{box-sizing:content-box}' ); -const {passthroughCSS} = processCSSWithPresetFactory(preset({ - autoprefixer: {env: 'safari5'}, -})); +const { passthroughCSS } = processCSSWithPresetFactory( + preset({ + autoprefixer: { env: 'safari5' }, + }) +); test( - 'should not remove outdated vendor prefixes when minifying for older browsers', - passthroughCSS, - 'h1{-webkit-border-radius:5px;border-radius:5px}' + 'should not remove outdated vendor prefixes when minifying for older browsers', + passthroughCSS, + 'h1{-webkit-border-radius:5px;border-radius:5px}' ); -const {passthroughCSS: exclude} = processCSSWithPresetFactory(preset({ - autoprefixer: {exclude: true}, -})); +const { passthroughCSS: exclude } = processCSSWithPresetFactory( + preset({ + autoprefixer: { exclude: true }, + }) +); test( - 'should not remove outdated vendor prefixes if excluded', - exclude, - 'h1{-webkit-box-sizing:content-box;box-sizing:content-box}' + 'should not remove outdated vendor prefixes if excluded', + exclude, + 'h1{-webkit-box-sizing:content-box;box-sizing:content-box}' ); diff --git a/packages/cssnano-preset-advanced/src/__tests__/integrations.js b/packages/cssnano-preset-advanced/src/__tests__/integrations.js index 34f8d9a10..653da340b 100644 --- a/packages/cssnano-preset-advanced/src/__tests__/integrations.js +++ b/packages/cssnano-preset-advanced/src/__tests__/integrations.js @@ -1,27 +1,23 @@ import test from 'ava'; -import {integrationTests, loadPreset} from '../../../../util/testHelpers.js'; +import { integrationTests, loadPreset } from '../../../../util/testHelpers.js'; import preset from '..'; test( - 'should correctly handle the framework tests', - integrationTests, - preset, - `${__dirname}/integrations` + 'should correctly handle the framework tests', + integrationTests, + preset, + `${__dirname}/integrations` ); -function excludeProcessor (t, options) { - const input = `h1{z-index:10}`; - return loadPreset(preset(options)).process(input).then(({css}) => { - t.is(css, input); +function excludeProcessor(t, options) { + const input = `h1{z-index:10}`; + return loadPreset(preset(options)) + .process(input) + .then(({ css }) => { + t.is(css, input); }); } -test( - excludeProcessor, - {zindex: false} -); +test(excludeProcessor, { zindex: false }); -test( - excludeProcessor, - {zindex: {exclude: true}} -); +test(excludeProcessor, { zindex: { exclude: true } }); diff --git a/packages/cssnano-preset-advanced/src/__tests__/integrations/picnic-v6.4.0.css b/packages/cssnano-preset-advanced/src/__tests__/integrations/picnic-v6.4.0.css index 64922a4d3..910d76113 100644 --- a/packages/cssnano-preset-advanced/src/__tests__/integrations/picnic-v6.4.0.css +++ b/packages/cssnano-preset-advanced/src/__tests__/integrations/picnic-v6.4.0.css @@ -1 +1 @@ -@charset "UTF-8";html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset,legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:inherit}body,html{font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;height:100%}body{color:#111;font-size:1.1em;line-height:1.5;background:#fff}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;padding:.6em 0}li{margin:0 0 .3em}a{color:#0074d9;text-decoration:none;box-shadow:none;transition:all .3s}code{font-size:.8em}code,pre{padding:.3em .6em;background:#f5f5f5}pre{text-align:left;border-radius:.2em}pre code{padding:0}blockquote{padding:0 0 0 1em;margin:0 0 0 .1em;box-shadow:inset 5px 0 rgba(17,17,17,.3)}label{cursor:pointer}[class*=" icon-"]:before,[class^=icon-]:before{margin:0 .6em 0 0}i[class*=" icon-"]:before,i[class^=icon-]:before{margin:0}.button,.dropimage,.label,[data-tooltip]:after,[type=submit],button{display:inline-block;text-align:center;margin:0;padding:.3em .9em;vertical-align:middle;background:#0074d9;color:#fff;border:0;border-radius:.2em;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.success.button,.success.dropimage,.success.label,.success[data-tooltip]:after,.success[type=submit],button.success{background:#2ecc40}.warning.button,.warning.dropimage,.warning.label,.warning[data-tooltip]:after,.warning[type=submit],button.warning{background:#ff851b}.error.button,.error.dropimage,.error.label,.error[data-tooltip]:after,.error[type=submit],button.error{background:#ff4136}.pseudo.button,.pseudo.dropimage,.pseudo.label,.pseudo[data-tooltip]:after,.pseudo[type=submit],button.pseudo{background:transparent;color:#111}.label,[data-tooltip]:after{font-size:.6em;padding:.4em .6em;margin-left:1em;line-height:1}.button,.dropimage,[type=submit],button{margin:.3em 0;cursor:pointer;transition:all .3s;border-radius:.2em;height:auto;box-shadow:inset 0 0 transparent}.button:focus,.button:hover,.dropimage:focus,.dropimage:hover,[type=submit]:focus,[type=submit]:hover,button:focus,button:hover{box-shadow:inset 0 0 0 99em hsla(0,0%,100%,.2);border:0}.pseudo.button:focus,.pseudo.button:hover,.pseudo.dropimage:focus,.pseudo.dropimage:hover,.pseudo[type=submit]:focus,.pseudo[type=submit]:hover,button.pseudo:focus,button.pseudo:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.1)}.active.button,.active.dropimage,.active[type=submit],.button:active,.dropimage:active,.pseudo.button:active,.pseudo.dropimage:active,.pseudo[type=submit]:active,[type=submit]:active,button.active,button.pseudo:active,button:active{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[disabled].button,[disabled].dropimage,[disabled][type=submit],button[disabled]{cursor:default;box-shadow:none;background:#bbb}:checked+.toggle,:checked+.toggle:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[type]+.toggle{padding:.3em .9em;margin-right:0}[type]+.toggle:after,[type]+.toggle:before{display:none}.select select,input,textarea{line-height:1.5;margin:0;height:2.1em;padding:.3em .6em;border:1px solid #ccc;background-color:#fff;border-radius:.2em;transition:all .3s;width:100%}.select select:focus,input:focus,textarea:focus{border:1px solid #0074d9;outline:0}textarea{height:auto}[type=color],[type=file]{cursor:pointer}[type=file]{height:auto}select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiPjxwYXRoIGQ9Ik0wIDFsMSAyIDEtMnoiLz48L3N2Zz4=) no-repeat scroll 95%/10px 15px;background-position:calc(100% - 15px) 50%;border:1px solid #ccc;border-radius:.2em;cursor:pointer;width:100%;height:2.1em;box-sizing:border-box;padding:.3em .45em;transition:all .3s;-moz-appearance:none;-webkit-appearance:none;appearance:none}select::-ms-expand{display:none}select:active,select:focus{border:1px solid #0074d9;transition:outline 0s}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #111}select option{font-size:inherit;padding:.3em .45em}[type=checkbox],[type=radio]{opacity:0;width:0;position:absolute;display:inline-block}[type=checkbox]+.checkable:hover:before,[type=checkbox]:focus+.checkable:before,[type=radio]+.checkable:hover:before,[type=radio]:focus+.checkable:before{border:1px solid #0074d9}[type=checkbox]+.checkable,[type=radio]+.checkable{position:relative;cursor:pointer;padding-left:1.5em;margin-right:.6em}[type=checkbox]+.checkable:after,[type=checkbox]+.checkable:before,[type=radio]+.checkable:after,[type=radio]+.checkable:before{content:"";position:absolute;display:inline-block;left:0;top:50%;transform:translateY(-50%);font-size:1em;line-height:1em;color:transparent;font-family:sans;text-align:center;box-sizing:border-box;width:1em;height:1em;border-radius:50%;transition:all .3s}[type=checkbox]+.checkable:before,[type=radio]+.checkable:before{border:1px solid #aaa}[type=checkbox]:checked+.checkable:after,[type=radio]:checked+.checkable:after{background:#555;transform:scale(.5) translateY(-100%)}[type=checkbox]+.checkable:before{border-radius:.2em}[type=checkbox]+.checkable:after{content:"✔";background:none;transform:scale(2) translateY(-25%);visibility:hidden;opacity:0}[type=checkbox]:checked+.checkable:after{color:#111;background:none;transform:translateY(-50%);transition:all .3s;visibility:visible;opacity:1}table{text-align:left}td,th{padding:.3em 2.4em .3em .6em}th{text-align:left;font-weight:900;color:#fff;background-color:#0074d9}.success th{background-color:#2ecc40}.warning th{background-color:#ff851b}.error th{background-color:#ff4136}.dull th{background-color:#aaa}tr:nth-child(2n){background:rgba(0,0,0,.05)}.flex{display:flex;margin-left:-.6em;width:calc(100% + .6em);flex-wrap:wrap;transition:all .3s ease}.flex>*{box-sizing:border-box;flex:1 1 auto;padding-left:.6em;padding-bottom:.6em}.flex[class*=eight]>*,.flex[class*=eleven]>*,.flex[class*=five]>*,.flex[class*=four]>*,.flex[class*=nine]>*,.flex[class*=one]>*,.flex[class*=seven]>*,.flex[class*=six]>*,.flex[class*=ten]>*,.flex[class*=three]>*,.flex[class*=twelve]>*,.flex[class*=two]>*{flex-grow:0}.flex.grow>*{flex-grow:1}.center{justify-content:center}.one>*{width:100%}.two>*{width:50%}.three>*{width:33.33333%}.four>*{width:25%}.five>*{width:20%}.six>*{width:16.66666%}.seven>*{width:14.28571%}.eight>*{width:12.5%}.nine>*{width:11.11111%}.ten>*{width:10%}.eleven>*{width:9.09091%}.twelve>*{width:8.33333%}@media (min-width:500px){.one-500>*{width:100%}.two-500>*{width:50%}.three-500>*{width:33.33333%}.four-500>*{width:25%}.five-500>*{width:20%}.six-500>*{width:16.66666%}.seven-500>*{width:14.28571%}.eight-500>*{width:12.5%}.nine-500>*{width:11.11111%}.ten-500>*{width:10%}.eleven-500>*{width:9.09091%}.twelve-500>*{width:8.33333%}}@media (min-width:600px){.one-600>*{width:100%}.two-600>*{width:50%}.three-600>*{width:33.33333%}.four-600>*{width:25%}.five-600>*{width:20%}.six-600>*{width:16.66666%}.seven-600>*{width:14.28571%}.eight-600>*{width:12.5%}.nine-600>*{width:11.11111%}.ten-600>*{width:10%}.eleven-600>*{width:9.09091%}.twelve-600>*{width:8.33333%}}@media (min-width:700px){.one-700>*{width:100%}.two-700>*{width:50%}.three-700>*{width:33.33333%}.four-700>*{width:25%}.five-700>*{width:20%}.six-700>*{width:16.66666%}.seven-700>*{width:14.28571%}.eight-700>*{width:12.5%}.nine-700>*{width:11.11111%}.ten-700>*{width:10%}.eleven-700>*{width:9.09091%}.twelve-700>*{width:8.33333%}}@media (min-width:800px){.one-800>*{width:100%}.two-800>*{width:50%}.three-800>*{width:33.33333%}.four-800>*{width:25%}.five-800>*{width:20%}.six-800>*{width:16.66666%}.seven-800>*{width:14.28571%}.eight-800>*{width:12.5%}.nine-800>*{width:11.11111%}.ten-800>*{width:10%}.eleven-800>*{width:9.09091%}.twelve-800>*{width:8.33333%}}@media (min-width:900px){.one-900>*{width:100%}.two-900>*{width:50%}.three-900>*{width:33.33333%}.four-900>*{width:25%}.five-900>*{width:20%}.six-900>*{width:16.66666%}.seven-900>*{width:14.28571%}.eight-900>*{width:12.5%}.nine-900>*{width:11.11111%}.ten-900>*{width:10%}.eleven-900>*{width:9.09091%}.twelve-900>*{width:8.33333%}}@media (min-width:1000px){.one-1000>*{width:100%}.two-1000>*{width:50%}.three-1000>*{width:33.33333%}.four-1000>*{width:25%}.five-1000>*{width:20%}.six-1000>*{width:16.66666%}.seven-1000>*{width:14.28571%}.eight-1000>*{width:12.5%}.nine-1000>*{width:11.11111%}.ten-1000>*{width:10%}.eleven-1000>*{width:9.09091%}.twelve-1000>*{width:8.33333%}}@media (min-width:1100px){.one-1100>*{width:100%}.two-1100>*{width:50%}.three-1100>*{width:33.33333%}.four-1100>*{width:25%}.five-1100>*{width:20%}.six-1100>*{width:16.66666%}.seven-1100>*{width:14.28571%}.eight-1100>*{width:12.5%}.nine-1100>*{width:11.11111%}.ten-1100>*{width:10%}.eleven-1100>*{width:9.09091%}.twelve-1100>*{width:8.33333%}}@media (min-width:1200px){.one-1200>*{width:100%}.two-1200>*{width:50%}.three-1200>*{width:33.33333%}.four-1200>*{width:25%}.five-1200>*{width:20%}.six-1200>*{width:16.66666%}.seven-1200>*{width:14.28571%}.eight-1200>*{width:12.5%}.nine-1200>*{width:11.11111%}.ten-1200>*{width:10%}.eleven-1200>*{width:9.09091%}.twelve-1200>*{width:8.33333%}}@media (min-width:1300px){.one-1300>*{width:100%}.two-1300>*{width:50%}.three-1300>*{width:33.33333%}.four-1300>*{width:25%}.five-1300>*{width:20%}.six-1300>*{width:16.66666%}.seven-1300>*{width:14.28571%}.eight-1300>*{width:12.5%}.nine-1300>*{width:11.11111%}.ten-1300>*{width:10%}.eleven-1300>*{width:9.09091%}.twelve-1300>*{width:8.33333%}}@media (min-width:1400px){.one-1400>*{width:100%}.two-1400>*{width:50%}.three-1400>*{width:33.33333%}.four-1400>*{width:25%}.five-1400>*{width:20%}.six-1400>*{width:16.66666%}.seven-1400>*{width:14.28571%}.eight-1400>*{width:12.5%}.nine-1400>*{width:11.11111%}.ten-1400>*{width:10%}.eleven-1400>*{width:9.09091%}.twelve-1400>*{width:8.33333%}}@media (min-width:1500px){.one-1500>*{width:100%}.two-1500>*{width:50%}.three-1500>*{width:33.33333%}.four-1500>*{width:25%}.five-1500>*{width:20%}.six-1500>*{width:16.66666%}.seven-1500>*{width:14.28571%}.eight-1500>*{width:12.5%}.nine-1500>*{width:11.11111%}.ten-1500>*{width:10%}.eleven-1500>*{width:9.09091%}.twelve-1500>*{width:8.33333%}}@media (min-width:1600px){.one-1600>*{width:100%}.two-1600>*{width:50%}.three-1600>*{width:33.33333%}.four-1600>*{width:25%}.five-1600>*{width:20%}.six-1600>*{width:16.66666%}.seven-1600>*{width:14.28571%}.eight-1600>*{width:12.5%}.nine-1600>*{width:11.11111%}.ten-1600>*{width:10%}.eleven-1600>*{width:9.09091%}.twelve-1600>*{width:8.33333%}}@media (min-width:1700px){.one-1700>*{width:100%}.two-1700>*{width:50%}.three-1700>*{width:33.33333%}.four-1700>*{width:25%}.five-1700>*{width:20%}.six-1700>*{width:16.66666%}.seven-1700>*{width:14.28571%}.eight-1700>*{width:12.5%}.nine-1700>*{width:11.11111%}.ten-1700>*{width:10%}.eleven-1700>*{width:9.09091%}.twelve-1700>*{width:8.33333%}}@media (min-width:1800px){.one-1800>*{width:100%}.two-1800>*{width:50%}.three-1800>*{width:33.33333%}.four-1800>*{width:25%}.five-1800>*{width:20%}.six-1800>*{width:16.66666%}.seven-1800>*{width:14.28571%}.eight-1800>*{width:12.5%}.nine-1800>*{width:11.11111%}.ten-1800>*{width:10%}.eleven-1800>*{width:9.09091%}.twelve-1800>*{width:8.33333%}}@media (min-width:1900px){.one-1900>*{width:100%}.two-1900>*{width:50%}.three-1900>*{width:33.33333%}.four-1900>*{width:25%}.five-1900>*{width:20%}.six-1900>*{width:16.66666%}.seven-1900>*{width:14.28571%}.eight-1900>*{width:12.5%}.nine-1900>*{width:11.11111%}.ten-1900>*{width:10%}.eleven-1900>*{width:9.09091%}.twelve-1900>*{width:8.33333%}}@media (min-width:2000px){.one-2000>*{width:100%}.two-2000>*{width:50%}.three-2000>*{width:33.33333%}.four-2000>*{width:25%}.five-2000>*{width:20%}.six-2000>*{width:16.66666%}.seven-2000>*{width:14.28571%}.eight-2000>*{width:12.5%}.nine-2000>*{width:11.11111%}.ten-2000>*{width:10%}.eleven-2000>*{width:9.09091%}.twelve-2000>*{width:8.33333%}}.full{width:100%}.half{width:50%}.third{width:33.33333%}.two-third{width:66.66666%}.fourth{width:25%}.three-fourth{width:75%}.fifth{width:20%}.two-fifth{width:40%}.three-fifth{width:60%}.four-fifth{width:80%}.sixth{width:16.66666%}.none{display:none}@media (min-width:500px){.full-500{width:100%;display:block}.half-500{width:50%;display:block}.third-500{width:33.33333%;display:block}.two-third-500{width:66.66666%;display:block}.fourth-500{width:25%;display:block}.three-fourth-500{width:75%;display:block}.fifth-500{width:20%;display:block}.two-fifth-500{width:40%;display:block}.three-fifth-500{width:60%;display:block}.four-fifth-500{width:80%;display:block}.sixth-500{width:16.66666%;display:block}}@media (min-width:600px){.full-600{width:100%;display:block}.half-600{width:50%;display:block}.third-600{width:33.33333%;display:block}.two-third-600{width:66.66666%;display:block}.fourth-600{width:25%;display:block}.three-fourth-600{width:75%;display:block}.fifth-600{width:20%;display:block}.two-fifth-600{width:40%;display:block}.three-fifth-600{width:60%;display:block}.four-fifth-600{width:80%;display:block}.sixth-600{width:16.66666%;display:block}}@media (min-width:700px){.full-700{width:100%;display:block}.half-700{width:50%;display:block}.third-700{width:33.33333%;display:block}.two-third-700{width:66.66666%;display:block}.fourth-700{width:25%;display:block}.three-fourth-700{width:75%;display:block}.fifth-700{width:20%;display:block}.two-fifth-700{width:40%;display:block}.three-fifth-700{width:60%;display:block}.four-fifth-700{width:80%;display:block}.sixth-700{width:16.66666%;display:block}}@media (min-width:800px){.full-800{width:100%;display:block}.half-800{width:50%;display:block}.third-800{width:33.33333%;display:block}.two-third-800{width:66.66666%;display:block}.fourth-800{width:25%;display:block}.three-fourth-800{width:75%;display:block}.fifth-800{width:20%;display:block}.two-fifth-800{width:40%;display:block}.three-fifth-800{width:60%;display:block}.four-fifth-800{width:80%;display:block}.sixth-800{width:16.66666%;display:block}}@media (min-width:900px){.full-900{width:100%;display:block}.half-900{width:50%;display:block}.third-900{width:33.33333%;display:block}.two-third-900{width:66.66666%;display:block}.fourth-900{width:25%;display:block}.three-fourth-900{width:75%;display:block}.fifth-900{width:20%;display:block}.two-fifth-900{width:40%;display:block}.three-fifth-900{width:60%;display:block}.four-fifth-900{width:80%;display:block}.sixth-900{width:16.66666%;display:block}}@media (min-width:1000px){.full-1000{width:100%;display:block}.half-1000{width:50%;display:block}.third-1000{width:33.33333%;display:block}.two-third-1000{width:66.66666%;display:block}.fourth-1000{width:25%;display:block}.three-fourth-1000{width:75%;display:block}.fifth-1000{width:20%;display:block}.two-fifth-1000{width:40%;display:block}.three-fifth-1000{width:60%;display:block}.four-fifth-1000{width:80%;display:block}.sixth-1000{width:16.66666%;display:block}}@media (min-width:1100px){.full-1100{width:100%;display:block}.half-1100{width:50%;display:block}.third-1100{width:33.33333%;display:block}.two-third-1100{width:66.66666%;display:block}.fourth-1100{width:25%;display:block}.three-fourth-1100{width:75%;display:block}.fifth-1100{width:20%;display:block}.two-fifth-1100{width:40%;display:block}.three-fifth-1100{width:60%;display:block}.four-fifth-1100{width:80%;display:block}.sixth-1100{width:16.66666%;display:block}}@media (min-width:1200px){.full-1200{width:100%;display:block}.half-1200{width:50%;display:block}.third-1200{width:33.33333%;display:block}.two-third-1200{width:66.66666%;display:block}.fourth-1200{width:25%;display:block}.three-fourth-1200{width:75%;display:block}.fifth-1200{width:20%;display:block}.two-fifth-1200{width:40%;display:block}.three-fifth-1200{width:60%;display:block}.four-fifth-1200{width:80%;display:block}.sixth-1200{width:16.66666%;display:block}}@media (min-width:1300px){.full-1300{width:100%;display:block}.half-1300{width:50%;display:block}.third-1300{width:33.33333%;display:block}.two-third-1300{width:66.66666%;display:block}.fourth-1300{width:25%;display:block}.three-fourth-1300{width:75%;display:block}.fifth-1300{width:20%;display:block}.two-fifth-1300{width:40%;display:block}.three-fifth-1300{width:60%;display:block}.four-fifth-1300{width:80%;display:block}.sixth-1300{width:16.66666%;display:block}}@media (min-width:1400px){.full-1400{width:100%;display:block}.half-1400{width:50%;display:block}.third-1400{width:33.33333%;display:block}.two-third-1400{width:66.66666%;display:block}.fourth-1400{width:25%;display:block}.three-fourth-1400{width:75%;display:block}.fifth-1400{width:20%;display:block}.two-fifth-1400{width:40%;display:block}.three-fifth-1400{width:60%;display:block}.four-fifth-1400{width:80%;display:block}.sixth-1400{width:16.66666%;display:block}}@media (min-width:1500px){.full-1500{width:100%;display:block}.half-1500{width:50%;display:block}.third-1500{width:33.33333%;display:block}.two-third-1500{width:66.66666%;display:block}.fourth-1500{width:25%;display:block}.three-fourth-1500{width:75%;display:block}.fifth-1500{width:20%;display:block}.two-fifth-1500{width:40%;display:block}.three-fifth-1500{width:60%;display:block}.four-fifth-1500{width:80%;display:block}.sixth-1500{width:16.66666%;display:block}}@media (min-width:1600px){.full-1600{width:100%;display:block}.half-1600{width:50%;display:block}.third-1600{width:33.33333%;display:block}.two-third-1600{width:66.66666%;display:block}.fourth-1600{width:25%;display:block}.three-fourth-1600{width:75%;display:block}.fifth-1600{width:20%;display:block}.two-fifth-1600{width:40%;display:block}.three-fifth-1600{width:60%;display:block}.four-fifth-1600{width:80%;display:block}.sixth-1600{width:16.66666%;display:block}}@media (min-width:1700px){.full-1700{width:100%;display:block}.half-1700{width:50%;display:block}.third-1700{width:33.33333%;display:block}.two-third-1700{width:66.66666%;display:block}.fourth-1700{width:25%;display:block}.three-fourth-1700{width:75%;display:block}.fifth-1700{width:20%;display:block}.two-fifth-1700{width:40%;display:block}.three-fifth-1700{width:60%;display:block}.four-fifth-1700{width:80%;display:block}.sixth-1700{width:16.66666%;display:block}}@media (min-width:1800px){.full-1800{width:100%;display:block}.half-1800{width:50%;display:block}.third-1800{width:33.33333%;display:block}.two-third-1800{width:66.66666%;display:block}.fourth-1800{width:25%;display:block}.three-fourth-1800{width:75%;display:block}.fifth-1800{width:20%;display:block}.two-fifth-1800{width:40%;display:block}.three-fifth-1800{width:60%;display:block}.four-fifth-1800{width:80%;display:block}.sixth-1800{width:16.66666%;display:block}}@media (min-width:1900px){.full-1900{width:100%;display:block}.half-1900{width:50%;display:block}.third-1900{width:33.33333%;display:block}.two-third-1900{width:66.66666%;display:block}.fourth-1900{width:25%;display:block}.three-fourth-1900{width:75%;display:block}.fifth-1900{width:20%;display:block}.two-fifth-1900{width:40%;display:block}.three-fifth-1900{width:60%;display:block}.four-fifth-1900{width:80%;display:block}.sixth-1900{width:16.66666%;display:block}}@media (min-width:2000px){.full-2000{width:100%;display:block}.half-2000{width:50%;display:block}.third-2000{width:33.33333%;display:block}.two-third-2000{width:66.66666%;display:block}.fourth-2000{width:25%;display:block}.three-fourth-2000{width:75%;display:block}.fifth-2000{width:20%;display:block}.two-fifth-2000{width:40%;display:block}.three-fifth-2000{width:60%;display:block}.four-fifth-2000{width:80%;display:block}.sixth-2000{width:16.66666%;display:block}}@media (min-width:500px){.none-500{display:none}}@media (min-width:600px){.none-600{display:none}}@media (min-width:700px){.none-700{display:none}}@media (min-width:800px){.none-800{display:none}}@media (min-width:900px){.none-900{display:none}}@media (min-width:1000px){.none-1000{display:none}}@media (min-width:1100px){.none-1100{display:none}}@media (min-width:1200px){.none-1200{display:none}}@media (min-width:1300px){.none-1300{display:none}}@media (min-width:1400px){.none-1400{display:none}}@media (min-width:1500px){.none-1500{display:none}}@media (min-width:1600px){.none-1600{display:none}}@media (min-width:1700px){.none-1700{display:none}}@media (min-width:1800px){.none-1800{display:none}}@media (min-width:1900px){.none-1900{display:none}}@media (min-width:2000px){.none-2000{display:none}}.off-none{margin-left:0}.off-half{margin-left:50%}.off-third{margin-left:33.33333%}.off-two-third{margin-left:66.66666%}.off-fourth{margin-left:25%}.off-three-fourth{margin-left:75%}.off-fifth{margin-left:20%}.off-two-fifth{margin-left:40%}.off-three-fifth{margin-left:60%}.off-four-fifth{margin-left:80%}.off-sixth{margin-left:16.66666%}@media (min-width:500px){.off-none-500{margin-left:0}.off-half-500{margin-left:50%}.off-third-500{margin-left:33.33333%}.off-two-third-500{margin-left:66.66666%}.off-fourth-500{margin-left:25%}.off-three-fourth-500{margin-left:75%}.off-fifth-500{margin-left:20%}.off-two-fifth-500{margin-left:40%}.off-three-fifth-500{margin-left:60%}.off-four-fifth-500{margin-left:80%}.off-sixth-500{margin-left:16.66666%}}@media (min-width:600px){.off-none-600{margin-left:0}.off-half-600{margin-left:50%}.off-third-600{margin-left:33.33333%}.off-two-third-600{margin-left:66.66666%}.off-fourth-600{margin-left:25%}.off-three-fourth-600{margin-left:75%}.off-fifth-600{margin-left:20%}.off-two-fifth-600{margin-left:40%}.off-three-fifth-600{margin-left:60%}.off-four-fifth-600{margin-left:80%}.off-sixth-600{margin-left:16.66666%}}@media (min-width:700px){.off-none-700{margin-left:0}.off-half-700{margin-left:50%}.off-third-700{margin-left:33.33333%}.off-two-third-700{margin-left:66.66666%}.off-fourth-700{margin-left:25%}.off-three-fourth-700{margin-left:75%}.off-fifth-700{margin-left:20%}.off-two-fifth-700{margin-left:40%}.off-three-fifth-700{margin-left:60%}.off-four-fifth-700{margin-left:80%}.off-sixth-700{margin-left:16.66666%}}@media (min-width:800px){.off-none-800{margin-left:0}.off-half-800{margin-left:50%}.off-third-800{margin-left:33.33333%}.off-two-third-800{margin-left:66.66666%}.off-fourth-800{margin-left:25%}.off-three-fourth-800{margin-left:75%}.off-fifth-800{margin-left:20%}.off-two-fifth-800{margin-left:40%}.off-three-fifth-800{margin-left:60%}.off-four-fifth-800{margin-left:80%}.off-sixth-800{margin-left:16.66666%}}@media (min-width:900px){.off-none-900{margin-left:0}.off-half-900{margin-left:50%}.off-third-900{margin-left:33.33333%}.off-two-third-900{margin-left:66.66666%}.off-fourth-900{margin-left:25%}.off-three-fourth-900{margin-left:75%}.off-fifth-900{margin-left:20%}.off-two-fifth-900{margin-left:40%}.off-three-fifth-900{margin-left:60%}.off-four-fifth-900{margin-left:80%}.off-sixth-900{margin-left:16.66666%}}@media (min-width:1000px){.off-none-1000{margin-left:0}.off-half-1000{margin-left:50%}.off-third-1000{margin-left:33.33333%}.off-two-third-1000{margin-left:66.66666%}.off-fourth-1000{margin-left:25%}.off-three-fourth-1000{margin-left:75%}.off-fifth-1000{margin-left:20%}.off-two-fifth-1000{margin-left:40%}.off-three-fifth-1000{margin-left:60%}.off-four-fifth-1000{margin-left:80%}.off-sixth-1000{margin-left:16.66666%}}@media (min-width:1100px){.off-none-1100{margin-left:0}.off-half-1100{margin-left:50%}.off-third-1100{margin-left:33.33333%}.off-two-third-1100{margin-left:66.66666%}.off-fourth-1100{margin-left:25%}.off-three-fourth-1100{margin-left:75%}.off-fifth-1100{margin-left:20%}.off-two-fifth-1100{margin-left:40%}.off-three-fifth-1100{margin-left:60%}.off-four-fifth-1100{margin-left:80%}.off-sixth-1100{margin-left:16.66666%}}@media (min-width:1200px){.off-none-1200{margin-left:0}.off-half-1200{margin-left:50%}.off-third-1200{margin-left:33.33333%}.off-two-third-1200{margin-left:66.66666%}.off-fourth-1200{margin-left:25%}.off-three-fourth-1200{margin-left:75%}.off-fifth-1200{margin-left:20%}.off-two-fifth-1200{margin-left:40%}.off-three-fifth-1200{margin-left:60%}.off-four-fifth-1200{margin-left:80%}.off-sixth-1200{margin-left:16.66666%}}@media (min-width:1300px){.off-none-1300{margin-left:0}.off-half-1300{margin-left:50%}.off-third-1300{margin-left:33.33333%}.off-two-third-1300{margin-left:66.66666%}.off-fourth-1300{margin-left:25%}.off-three-fourth-1300{margin-left:75%}.off-fifth-1300{margin-left:20%}.off-two-fifth-1300{margin-left:40%}.off-three-fifth-1300{margin-left:60%}.off-four-fifth-1300{margin-left:80%}.off-sixth-1300{margin-left:16.66666%}}@media (min-width:1400px){.off-none-1400{margin-left:0}.off-half-1400{margin-left:50%}.off-third-1400{margin-left:33.33333%}.off-two-third-1400{margin-left:66.66666%}.off-fourth-1400{margin-left:25%}.off-three-fourth-1400{margin-left:75%}.off-fifth-1400{margin-left:20%}.off-two-fifth-1400{margin-left:40%}.off-three-fifth-1400{margin-left:60%}.off-four-fifth-1400{margin-left:80%}.off-sixth-1400{margin-left:16.66666%}}@media (min-width:1500px){.off-none-1500{margin-left:0}.off-half-1500{margin-left:50%}.off-third-1500{margin-left:33.33333%}.off-two-third-1500{margin-left:66.66666%}.off-fourth-1500{margin-left:25%}.off-three-fourth-1500{margin-left:75%}.off-fifth-1500{margin-left:20%}.off-two-fifth-1500{margin-left:40%}.off-three-fifth-1500{margin-left:60%}.off-four-fifth-1500{margin-left:80%}.off-sixth-1500{margin-left:16.66666%}}@media (min-width:1600px){.off-none-1600{margin-left:0}.off-half-1600{margin-left:50%}.off-third-1600{margin-left:33.33333%}.off-two-third-1600{margin-left:66.66666%}.off-fourth-1600{margin-left:25%}.off-three-fourth-1600{margin-left:75%}.off-fifth-1600{margin-left:20%}.off-two-fifth-1600{margin-left:40%}.off-three-fifth-1600{margin-left:60%}.off-four-fifth-1600{margin-left:80%}.off-sixth-1600{margin-left:16.66666%}}@media (min-width:1700px){.off-none-1700{margin-left:0}.off-half-1700{margin-left:50%}.off-third-1700{margin-left:33.33333%}.off-two-third-1700{margin-left:66.66666%}.off-fourth-1700{margin-left:25%}.off-three-fourth-1700{margin-left:75%}.off-fifth-1700{margin-left:20%}.off-two-fifth-1700{margin-left:40%}.off-three-fifth-1700{margin-left:60%}.off-four-fifth-1700{margin-left:80%}.off-sixth-1700{margin-left:16.66666%}}@media (min-width:1800px){.off-none-1800{margin-left:0}.off-half-1800{margin-left:50%}.off-third-1800{margin-left:33.33333%}.off-two-third-1800{margin-left:66.66666%}.off-fourth-1800{margin-left:25%}.off-three-fourth-1800{margin-left:75%}.off-fifth-1800{margin-left:20%}.off-two-fifth-1800{margin-left:40%}.off-three-fifth-1800{margin-left:60%}.off-four-fifth-1800{margin-left:80%}.off-sixth-1800{margin-left:16.66666%}}@media (min-width:1900px){.off-none-1900{margin-left:0}.off-half-1900{margin-left:50%}.off-third-1900{margin-left:33.33333%}.off-two-third-1900{margin-left:66.66666%}.off-fourth-1900{margin-left:25%}.off-three-fourth-1900{margin-left:75%}.off-fifth-1900{margin-left:20%}.off-two-fifth-1900{margin-left:40%}.off-three-fifth-1900{margin-left:60%}.off-four-fifth-1900{margin-left:80%}.off-sixth-1900{margin-left:16.66666%}}@media (min-width:2000px){.off-none-2000{margin-left:0}.off-half-2000{margin-left:50%}.off-third-2000{margin-left:33.33333%}.off-two-third-2000{margin-left:66.66666%}.off-fourth-2000{margin-left:25%}.off-three-fourth-2000{margin-left:75%}.off-fifth-2000{margin-left:20%}.off-two-fifth-2000{margin-left:40%}.off-three-fifth-2000{margin-left:60%}.off-four-fifth-2000{margin-left:80%}.off-sixth-2000{margin-left:16.66666%}}nav{position:fixed;top:0;left:0;right:0;height:3em;padding:0 .6em;background:#fff;box-shadow:0 0 .2em rgba(17,17,17,.2);z-index:3;transition:all .3s;transform-style:preserve-3d}nav .brand,nav .burger,nav .menu{float:right;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}nav .brand{font-weight:700;float:left;padding:0 .6em;max-width:50%;white-space:nowrap;color:#111}nav .brand *{vertical-align:middle}nav .logo{height:2em;margin-right:.3em}nav .select:after{height:calc(100% - 1px);padding:0;line-height:2.4em}nav .menu>*{margin-right:.6em}nav .burger{display:none}@media (max-width:60em){nav .burger{display:inline-block;cursor:pointer;bottom:-1000em;margin:0}nav .burger~.menu,nav .show:checked~.burger{position:fixed;min-height:100%;width:0;overflow:hidden;top:0;right:0;bottom:-1000em;margin:0;background:#fff;transition:all .3s ease;transform:none}nav .burger~.menu{z-index:2}nav .show:checked~.burger{color:transparent;width:100%;border-radius:0;background:rgba(0,0,0,.2);transition:all .3s ease}nav .show:checked~.menu{width:70%;overflow:auto;transition:all .3s ease;height:100vh}nav .burger~.menu>*{display:block;margin:.3em;text-align:left;max-width:calc(100% - .6em)}nav .burger~.menu>a{padding:.3em .9em}}.stack,.stack .toggle{margin-top:0;margin-bottom:0;display:block;width:100%;text-align:left;border-radius:0}.stack:first-child,.stack:first-child .toggle{border-top-left-radius:.2em;border-top-right-radius:.2em}.stack:last-child,.stack:last-child .toggle{border-bottom-left-radius:.2em;border-bottom-right-radius:.2em}input.stack,select.stack,textarea.stack{transition:border-bottom 0 ease 0;border-bottom-width:0}input.stack:last-child,select.stack:last-child,textarea.stack:last-child{border-bottom-width:1px}input.stack:focus+input,input.stack:focus+select,input.stack:focus+textarea,select.stack:focus+input,select.stack:focus+select,select.stack:focus+textarea,textarea.stack:focus+input,textarea.stack:focus+select,textarea.stack:focus+textarea{border-top-color:#0074d9}.card,.modal .overlay~*{position:relative;box-shadow:0;border-radius:.2em;border:1px solid #ccc;overflow:hidden;text-align:left;background:#fff;margin-bottom:.6em;padding:0;transition:all .3s ease}.hidden.card,.modal .overlay:checked+*,.modal .overlay~.hidden,.modal .overlay~:checked+*,:checked+.card{font-size:0;padding:0;margin:0;border:0}.card>*,.modal .overlay~*>*{max-width:100%;display:block}.card>:last-child,.modal .overlay~*>:last-child{margin-bottom:0}.card>p,.card header,.card section,.modal .overlay~*>p,.modal .overlay~* header,.modal .overlay~* section{padding:.6em .8em}.card section,.modal .overlay~* section{padding:.6em .8em 0}.card hr,.modal .overlay~* hr{border:none;height:1px;background-color:#eee}.card header,.modal .overlay~* header{font-weight:700;position:relative;border-bottom:1px solid #eee}.card header h1,.card header h2,.card header h3,.card header h4,.card header h5,.card header h6,.modal .overlay~* header h1,.modal .overlay~* header h2,.modal .overlay~* header h3,.modal .overlay~* header h4,.modal .overlay~* header h5,.modal .overlay~* header h6{padding:0;margin:0 2em 0 0;line-height:1;display:inline-block;vertical-align:text-bottom}.card header:last-child,.modal .overlay~* header:last-child{border-bottom:0}.card footer,.modal .overlay~* footer{padding:.8em}.card p,.modal .overlay~* p{margin:.3em 0}.card p:first-child,.modal .overlay~* p:first-child{margin-top:0}.card p:last-child,.modal .overlay~* p:last-child{margin-bottom:0}.card>p,.modal .overlay~*>p{margin:0;padding-right:2.5em}.card .close,.modal .overlay~* .close{position:absolute;top:.4em;right:.3em;font-size:1.2em;padding:0 .5em;cursor:pointer;width:auto}.card .close:hover,.modal .overlay~* .close:hover{color:#ff4136}.card h1+.close,.modal .overlay~* h1+.close{margin:.2em}.card h2+.close,.modal .overlay~* h2+.close{margin:.1em}.card .dangerous,.modal .overlay~* .dangerous{background:#ff4136;float:right}.modal{text-align:center}.modal>input{display:none}.modal>input~*{opacity:0;max-height:0;overflow:hidden}.modal .overlay{top:0;left:0;bottom:0;right:0;position:fixed;margin:0;border-radius:0;background:rgba(17,17,17,.6);transition:all .3s;z-index:4}.modal .overlay:after,.modal .overlay:before{display:none}.modal .overlay~*{border:0;position:fixed;top:50%;left:50%;transform:translateX(-50%) translateY(-50%) scale(.2);z-index:5;transition:all .3s}.modal>input:checked~*{display:block;opacity:1;max-height:10000px;transition:all .3s}.modal>input:checked~.overlay~*{max-height:90%;overflow:auto;-webkit-transform:translateX(-50%) translateY(-50%) scale(1);transform:translateX(-50%) translateY(-50%) scale(1)}@media (max-width:60em){.modal .overlay~*{min-width:90%}}.dropimage{position:relative;display:block;padding:0 0 56.25%;overflow:hidden;cursor:pointer;border:0;margin:.3em 0;border-radius:.2em;background-color:#ddd;background-size:cover;background-position:50%;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NDAiIGhlaWdodD0iNjQwIj48ZyBmaWxsPSIjMzMzIj48cGF0aCBkPSJNMTg3IDIzMGMtMTIgMC0yMiAxMC0yMiAyMnYxNTZjMCAxMiAxMCAyMiAyMiAyMmgyNzZjMTIgMCAyMi0xMCAyMi0yMlYyNTJjMC0xMi0xMC0yMi0yMi0yMkgxODd6bTE3MyAyNmE3MCA3MiAwIDAgMSA3MCA3MiA3MCA3MiAwIDAgMS03MCA3MiA3MCA3MiAwIDAgMS03MC03MiA3MCA3MiAwIDAgMSA3MC03MnoiLz48Y2lyY2xlIGN4PSIzNjAiIGN5PSIzMzAiIHI9IjQxIi8+PHBhdGggZD0iTTIwNSAyMjVsNS0xMGgyMGw1IDEwaC0zME0yODUgMjAwbC0xNSAyNWgxMDZsLTE1LTI1aC03NnptMjUgNWgyN3YxM2gtMjd2LTEzek00MDUgMjI1bDUtMTBoMjBsNSAxMGgtMzAiLz48L2c+PC9zdmc+)}.dropimage input{left:0;width:100%;height:100%;border:0;margin:0;padding:0;opacity:0;cursor:pointer;position:absolute}.tabs{position:relative;overflow:hidden}.tabs>label img{float:left;margin-left:.6em}.tabs>.row{width:calc(100% + 1.2em);display:table;table-layout:fixed;position:relative;padding-left:0;transition:all .3s;border-spacing:0;margin:0}.tabs>.row:after,.tabs>.row:before{display:none}.tabs>.row>*,.tabs>.row img{display:table-cell;vertical-align:top;margin:0;width:100%}.tabs>input{display:none}.tabs>input+*{width:100%}.tabs>input+label{width:auto}.two.tabs>.row{width:200%;left:-100%}.two.tabs>input:first-of-type:checked~.row{margin-left:100%}.two.tabs>label img{width:48%;margin:4% 0 4% 4%}.three.tabs>.row{width:300%;left:-200%}.three.tabs>input:first-of-type:checked~.row{margin-left:200%}.three.tabs>input:nth-of-type(2):checked~.row{margin-left:100%}.three.tabs>label img{width:30%;margin:5% 0 5% 5%}.four.tabs>.row{width:400%;left:-300%}.four.tabs>input:first-of-type:checked~.row{margin-left:300%}.four.tabs>input:nth-of-type(2):checked~.row{margin-left:200%}.four.tabs>input:nth-of-type(3):checked~.row{margin-left:100%}.four.tabs>label img{width:22%;margin:4% 0 4% 4%}.tabs>label:first-of-type img{margin-left:0}[data-tooltip]{position:relative}[data-tooltip]:after,[data-tooltip]:before{position:absolute;z-index:1;opacity:0;border-width:0;height:0;padding:0;overflow:hidden;transition:opacity .6s ease,height 0s ease .6s;top:calc(100% - 6px);left:0;margin-top:12px}[data-tooltip]:after{margin-left:0;font-size:.8em;background:#111;content:attr(data-tooltip);white-space:nowrap}[data-tooltip]:before{content:"";width:0;height:0;border:0 solid transparent;border-bottom-color:#111;margin-top:0;left:10px}[data-tooltip]:focus:after,[data-tooltip]:focus:before,[data-tooltip]:hover:after,[data-tooltip]:hover:before{opacity:1;border-width:6px;height:auto}[data-tooltip]:focus:after,[data-tooltip]:hover:after{padding:.45em .9em}.tooltip-top:after,.tooltip-top:before{top:auto;bottom:calc(100% - 6px);left:0;margin-bottom:12px}.tooltip-top:before{border-color:#111 transparent transparent;margin-bottom:0;left:10px}.tooltip-right:after,.tooltip-right:before{left:100%;margin-left:6px;margin-top:0;top:0}.tooltip-right:before{border-color:transparent #111 transparent transparent;margin-left:-6px;left:100%;top:7px}.tooltip-left:after,.tooltip-left:before{right:100%;margin-right:6px;left:auto;margin-top:0;top:0}.tooltip-left:before{border-color:transparent transparent transparent #111;margin-right:-6px;right:100%;top:7px} \ No newline at end of file +@charset "UTF-8";html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset,legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:inherit}body,html{font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;height:100%}body{color:#111;font-size:1.1em;line-height:1.5;background:#fff}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;padding:.6em 0}li{margin:0 0 .3em}a{color:#0074d9;text-decoration:none;box-shadow:none;transition:all .3s}code{font-size:.8em}code,pre{padding:.3em .6em;background:#f5f5f5}pre{text-align:left;border-radius:.2em}pre code{padding:0}blockquote{padding:0 0 0 1em;margin:0 0 0 .1em;box-shadow:inset 5px 0 rgba(17,17,17,.3)}label{cursor:pointer}[class*=" icon-"]:before,[class^=icon-]:before{margin:0 .6em 0 0}i[class*=" icon-"]:before,i[class^=icon-]:before{margin:0}.button,.dropimage,.label,[data-tooltip]:after,[type=submit],button{display:inline-block;text-align:center;margin:0;padding:.3em .9em;vertical-align:middle;background:#0074d9;color:#fff;border:0;border-radius:.2em;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.success.button,.success.dropimage,.success.label,.success[data-tooltip]:after,.success[type=submit],button.success{background:#2ecc40}.warning.button,.warning.dropimage,.warning.label,.warning[data-tooltip]:after,.warning[type=submit],button.warning{background:#ff851b}.error.button,.error.dropimage,.error.label,.error[data-tooltip]:after,.error[type=submit],button.error{background:#ff4136}.pseudo.button,.pseudo.dropimage,.pseudo.label,.pseudo[data-tooltip]:after,.pseudo[type=submit],button.pseudo{background:transparent;color:#111}.label,[data-tooltip]:after{font-size:.6em;padding:.4em .6em;margin-left:1em;line-height:1}.button,.dropimage,[type=submit],button{margin:.3em 0;cursor:pointer;transition:all .3s;border-radius:.2em;height:auto;box-shadow:inset 0 0 transparent}.button:focus,.button:hover,.dropimage:focus,.dropimage:hover,[type=submit]:focus,[type=submit]:hover,button:focus,button:hover{box-shadow:inset 0 0 0 99em hsla(0,0%,100%,.2);border:0}.pseudo.button:focus,.pseudo.button:hover,.pseudo.dropimage:focus,.pseudo.dropimage:hover,.pseudo[type=submit]:focus,.pseudo[type=submit]:hover,button.pseudo:focus,button.pseudo:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.1)}.active.button,.active.dropimage,.active[type=submit],.button:active,.dropimage:active,.pseudo.button:active,.pseudo.dropimage:active,.pseudo[type=submit]:active,[type=submit]:active,button.active,button.pseudo:active,button:active{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[disabled].button,[disabled].dropimage,[disabled][type=submit],button[disabled]{cursor:default;box-shadow:none;background:#bbb}:checked+.toggle,:checked+.toggle:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[type]+.toggle{padding:.3em .9em;margin-right:0}[type]+.toggle:after,[type]+.toggle:before{display:none}.select select,input,textarea{line-height:1.5;margin:0;height:2.1em;padding:.3em .6em;border:1px solid #ccc;background-color:#fff;border-radius:.2em;transition:all .3s;width:100%}.select select:focus,input:focus,textarea:focus{border:1px solid #0074d9;outline:0}textarea{height:auto}[type=color],[type=file]{cursor:pointer}[type=file]{height:auto}select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiPjxwYXRoIGQ9Ik0wIDFsMSAyIDEtMnoiLz48L3N2Zz4=) no-repeat scroll 95%/10px 15px;background-position:calc(100% - 15px);border:1px solid #ccc;border-radius:.2em;cursor:pointer;width:100%;height:2.1em;box-sizing:border-box;padding:.3em .45em;transition:all .3s;-moz-appearance:none;-webkit-appearance:none;appearance:none}select::-ms-expand{display:none}select:active,select:focus{border:1px solid #0074d9;transition:outline 0s}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #111}select option{font-size:inherit;padding:.3em .45em}[type=checkbox],[type=radio]{opacity:0;width:0;position:absolute;display:inline-block}[type=checkbox]+.checkable:hover:before,[type=checkbox]:focus+.checkable:before,[type=radio]+.checkable:hover:before,[type=radio]:focus+.checkable:before{border:1px solid #0074d9}[type=checkbox]+.checkable,[type=radio]+.checkable{position:relative;cursor:pointer;padding-left:1.5em;margin-right:.6em}[type=checkbox]+.checkable:after,[type=checkbox]+.checkable:before,[type=radio]+.checkable:after,[type=radio]+.checkable:before{content:"";position:absolute;display:inline-block;left:0;top:50%;transform:translateY(-50%);font-size:1em;line-height:1em;color:transparent;font-family:sans;text-align:center;box-sizing:border-box;width:1em;height:1em;border-radius:50%;transition:all .3s}[type=checkbox]+.checkable:before,[type=radio]+.checkable:before{border:1px solid #aaa}[type=checkbox]:checked+.checkable:after,[type=radio]:checked+.checkable:after{background:#555;transform:scale(.5) translateY(-100%)}[type=checkbox]+.checkable:before{border-radius:.2em}[type=checkbox]+.checkable:after{content:"✔";background:none;transform:scale(2) translateY(-25%);visibility:hidden;opacity:0}[type=checkbox]:checked+.checkable:after{color:#111;background:none;transform:translateY(-50%);transition:all .3s;visibility:visible;opacity:1}table{text-align:left}td,th{padding:.3em 2.4em .3em .6em}th{text-align:left;font-weight:900;color:#fff;background-color:#0074d9}.success th{background-color:#2ecc40}.warning th{background-color:#ff851b}.error th{background-color:#ff4136}.dull th{background-color:#aaa}tr:nth-child(2n){background:rgba(0,0,0,.05)}.flex{display:flex;margin-left:-.6em;width:calc(100% + .6em);flex-wrap:wrap;transition:all .3s ease}.flex>*{box-sizing:border-box;flex:1 1 auto;padding-left:.6em;padding-bottom:.6em}.flex[class*=eight]>*,.flex[class*=eleven]>*,.flex[class*=five]>*,.flex[class*=four]>*,.flex[class*=nine]>*,.flex[class*=one]>*,.flex[class*=seven]>*,.flex[class*=six]>*,.flex[class*=ten]>*,.flex[class*=three]>*,.flex[class*=twelve]>*,.flex[class*=two]>*{flex-grow:0}.flex.grow>*{flex-grow:1}.center{justify-content:center}.one>*{width:100%}.two>*{width:50%}.three>*{width:33.33333%}.four>*{width:25%}.five>*{width:20%}.six>*{width:16.66666%}.seven>*{width:14.28571%}.eight>*{width:12.5%}.nine>*{width:11.11111%}.ten>*{width:10%}.eleven>*{width:9.09091%}.twelve>*{width:8.33333%}@media (min-width:500px){.one-500>*{width:100%}.two-500>*{width:50%}.three-500>*{width:33.33333%}.four-500>*{width:25%}.five-500>*{width:20%}.six-500>*{width:16.66666%}.seven-500>*{width:14.28571%}.eight-500>*{width:12.5%}.nine-500>*{width:11.11111%}.ten-500>*{width:10%}.eleven-500>*{width:9.09091%}.twelve-500>*{width:8.33333%}}@media (min-width:600px){.one-600>*{width:100%}.two-600>*{width:50%}.three-600>*{width:33.33333%}.four-600>*{width:25%}.five-600>*{width:20%}.six-600>*{width:16.66666%}.seven-600>*{width:14.28571%}.eight-600>*{width:12.5%}.nine-600>*{width:11.11111%}.ten-600>*{width:10%}.eleven-600>*{width:9.09091%}.twelve-600>*{width:8.33333%}}@media (min-width:700px){.one-700>*{width:100%}.two-700>*{width:50%}.three-700>*{width:33.33333%}.four-700>*{width:25%}.five-700>*{width:20%}.six-700>*{width:16.66666%}.seven-700>*{width:14.28571%}.eight-700>*{width:12.5%}.nine-700>*{width:11.11111%}.ten-700>*{width:10%}.eleven-700>*{width:9.09091%}.twelve-700>*{width:8.33333%}}@media (min-width:800px){.one-800>*{width:100%}.two-800>*{width:50%}.three-800>*{width:33.33333%}.four-800>*{width:25%}.five-800>*{width:20%}.six-800>*{width:16.66666%}.seven-800>*{width:14.28571%}.eight-800>*{width:12.5%}.nine-800>*{width:11.11111%}.ten-800>*{width:10%}.eleven-800>*{width:9.09091%}.twelve-800>*{width:8.33333%}}@media (min-width:900px){.one-900>*{width:100%}.two-900>*{width:50%}.three-900>*{width:33.33333%}.four-900>*{width:25%}.five-900>*{width:20%}.six-900>*{width:16.66666%}.seven-900>*{width:14.28571%}.eight-900>*{width:12.5%}.nine-900>*{width:11.11111%}.ten-900>*{width:10%}.eleven-900>*{width:9.09091%}.twelve-900>*{width:8.33333%}}@media (min-width:1000px){.one-1000>*{width:100%}.two-1000>*{width:50%}.three-1000>*{width:33.33333%}.four-1000>*{width:25%}.five-1000>*{width:20%}.six-1000>*{width:16.66666%}.seven-1000>*{width:14.28571%}.eight-1000>*{width:12.5%}.nine-1000>*{width:11.11111%}.ten-1000>*{width:10%}.eleven-1000>*{width:9.09091%}.twelve-1000>*{width:8.33333%}}@media (min-width:1100px){.one-1100>*{width:100%}.two-1100>*{width:50%}.three-1100>*{width:33.33333%}.four-1100>*{width:25%}.five-1100>*{width:20%}.six-1100>*{width:16.66666%}.seven-1100>*{width:14.28571%}.eight-1100>*{width:12.5%}.nine-1100>*{width:11.11111%}.ten-1100>*{width:10%}.eleven-1100>*{width:9.09091%}.twelve-1100>*{width:8.33333%}}@media (min-width:1200px){.one-1200>*{width:100%}.two-1200>*{width:50%}.three-1200>*{width:33.33333%}.four-1200>*{width:25%}.five-1200>*{width:20%}.six-1200>*{width:16.66666%}.seven-1200>*{width:14.28571%}.eight-1200>*{width:12.5%}.nine-1200>*{width:11.11111%}.ten-1200>*{width:10%}.eleven-1200>*{width:9.09091%}.twelve-1200>*{width:8.33333%}}@media (min-width:1300px){.one-1300>*{width:100%}.two-1300>*{width:50%}.three-1300>*{width:33.33333%}.four-1300>*{width:25%}.five-1300>*{width:20%}.six-1300>*{width:16.66666%}.seven-1300>*{width:14.28571%}.eight-1300>*{width:12.5%}.nine-1300>*{width:11.11111%}.ten-1300>*{width:10%}.eleven-1300>*{width:9.09091%}.twelve-1300>*{width:8.33333%}}@media (min-width:1400px){.one-1400>*{width:100%}.two-1400>*{width:50%}.three-1400>*{width:33.33333%}.four-1400>*{width:25%}.five-1400>*{width:20%}.six-1400>*{width:16.66666%}.seven-1400>*{width:14.28571%}.eight-1400>*{width:12.5%}.nine-1400>*{width:11.11111%}.ten-1400>*{width:10%}.eleven-1400>*{width:9.09091%}.twelve-1400>*{width:8.33333%}}@media (min-width:1500px){.one-1500>*{width:100%}.two-1500>*{width:50%}.three-1500>*{width:33.33333%}.four-1500>*{width:25%}.five-1500>*{width:20%}.six-1500>*{width:16.66666%}.seven-1500>*{width:14.28571%}.eight-1500>*{width:12.5%}.nine-1500>*{width:11.11111%}.ten-1500>*{width:10%}.eleven-1500>*{width:9.09091%}.twelve-1500>*{width:8.33333%}}@media (min-width:1600px){.one-1600>*{width:100%}.two-1600>*{width:50%}.three-1600>*{width:33.33333%}.four-1600>*{width:25%}.five-1600>*{width:20%}.six-1600>*{width:16.66666%}.seven-1600>*{width:14.28571%}.eight-1600>*{width:12.5%}.nine-1600>*{width:11.11111%}.ten-1600>*{width:10%}.eleven-1600>*{width:9.09091%}.twelve-1600>*{width:8.33333%}}@media (min-width:1700px){.one-1700>*{width:100%}.two-1700>*{width:50%}.three-1700>*{width:33.33333%}.four-1700>*{width:25%}.five-1700>*{width:20%}.six-1700>*{width:16.66666%}.seven-1700>*{width:14.28571%}.eight-1700>*{width:12.5%}.nine-1700>*{width:11.11111%}.ten-1700>*{width:10%}.eleven-1700>*{width:9.09091%}.twelve-1700>*{width:8.33333%}}@media (min-width:1800px){.one-1800>*{width:100%}.two-1800>*{width:50%}.three-1800>*{width:33.33333%}.four-1800>*{width:25%}.five-1800>*{width:20%}.six-1800>*{width:16.66666%}.seven-1800>*{width:14.28571%}.eight-1800>*{width:12.5%}.nine-1800>*{width:11.11111%}.ten-1800>*{width:10%}.eleven-1800>*{width:9.09091%}.twelve-1800>*{width:8.33333%}}@media (min-width:1900px){.one-1900>*{width:100%}.two-1900>*{width:50%}.three-1900>*{width:33.33333%}.four-1900>*{width:25%}.five-1900>*{width:20%}.six-1900>*{width:16.66666%}.seven-1900>*{width:14.28571%}.eight-1900>*{width:12.5%}.nine-1900>*{width:11.11111%}.ten-1900>*{width:10%}.eleven-1900>*{width:9.09091%}.twelve-1900>*{width:8.33333%}}@media (min-width:2000px){.one-2000>*{width:100%}.two-2000>*{width:50%}.three-2000>*{width:33.33333%}.four-2000>*{width:25%}.five-2000>*{width:20%}.six-2000>*{width:16.66666%}.seven-2000>*{width:14.28571%}.eight-2000>*{width:12.5%}.nine-2000>*{width:11.11111%}.ten-2000>*{width:10%}.eleven-2000>*{width:9.09091%}.twelve-2000>*{width:8.33333%}}.full{width:100%}.half{width:50%}.third{width:33.33333%}.two-third{width:66.66666%}.fourth{width:25%}.three-fourth{width:75%}.fifth{width:20%}.two-fifth{width:40%}.three-fifth{width:60%}.four-fifth{width:80%}.sixth{width:16.66666%}.none{display:none}@media (min-width:500px){.full-500{width:100%;display:block}.half-500{width:50%;display:block}.third-500{width:33.33333%;display:block}.two-third-500{width:66.66666%;display:block}.fourth-500{width:25%;display:block}.three-fourth-500{width:75%;display:block}.fifth-500{width:20%;display:block}.two-fifth-500{width:40%;display:block}.three-fifth-500{width:60%;display:block}.four-fifth-500{width:80%;display:block}.sixth-500{width:16.66666%;display:block}}@media (min-width:600px){.full-600{width:100%;display:block}.half-600{width:50%;display:block}.third-600{width:33.33333%;display:block}.two-third-600{width:66.66666%;display:block}.fourth-600{width:25%;display:block}.three-fourth-600{width:75%;display:block}.fifth-600{width:20%;display:block}.two-fifth-600{width:40%;display:block}.three-fifth-600{width:60%;display:block}.four-fifth-600{width:80%;display:block}.sixth-600{width:16.66666%;display:block}}@media (min-width:700px){.full-700{width:100%;display:block}.half-700{width:50%;display:block}.third-700{width:33.33333%;display:block}.two-third-700{width:66.66666%;display:block}.fourth-700{width:25%;display:block}.three-fourth-700{width:75%;display:block}.fifth-700{width:20%;display:block}.two-fifth-700{width:40%;display:block}.three-fifth-700{width:60%;display:block}.four-fifth-700{width:80%;display:block}.sixth-700{width:16.66666%;display:block}}@media (min-width:800px){.full-800{width:100%;display:block}.half-800{width:50%;display:block}.third-800{width:33.33333%;display:block}.two-third-800{width:66.66666%;display:block}.fourth-800{width:25%;display:block}.three-fourth-800{width:75%;display:block}.fifth-800{width:20%;display:block}.two-fifth-800{width:40%;display:block}.three-fifth-800{width:60%;display:block}.four-fifth-800{width:80%;display:block}.sixth-800{width:16.66666%;display:block}}@media (min-width:900px){.full-900{width:100%;display:block}.half-900{width:50%;display:block}.third-900{width:33.33333%;display:block}.two-third-900{width:66.66666%;display:block}.fourth-900{width:25%;display:block}.three-fourth-900{width:75%;display:block}.fifth-900{width:20%;display:block}.two-fifth-900{width:40%;display:block}.three-fifth-900{width:60%;display:block}.four-fifth-900{width:80%;display:block}.sixth-900{width:16.66666%;display:block}}@media (min-width:1000px){.full-1000{width:100%;display:block}.half-1000{width:50%;display:block}.third-1000{width:33.33333%;display:block}.two-third-1000{width:66.66666%;display:block}.fourth-1000{width:25%;display:block}.three-fourth-1000{width:75%;display:block}.fifth-1000{width:20%;display:block}.two-fifth-1000{width:40%;display:block}.three-fifth-1000{width:60%;display:block}.four-fifth-1000{width:80%;display:block}.sixth-1000{width:16.66666%;display:block}}@media (min-width:1100px){.full-1100{width:100%;display:block}.half-1100{width:50%;display:block}.third-1100{width:33.33333%;display:block}.two-third-1100{width:66.66666%;display:block}.fourth-1100{width:25%;display:block}.three-fourth-1100{width:75%;display:block}.fifth-1100{width:20%;display:block}.two-fifth-1100{width:40%;display:block}.three-fifth-1100{width:60%;display:block}.four-fifth-1100{width:80%;display:block}.sixth-1100{width:16.66666%;display:block}}@media (min-width:1200px){.full-1200{width:100%;display:block}.half-1200{width:50%;display:block}.third-1200{width:33.33333%;display:block}.two-third-1200{width:66.66666%;display:block}.fourth-1200{width:25%;display:block}.three-fourth-1200{width:75%;display:block}.fifth-1200{width:20%;display:block}.two-fifth-1200{width:40%;display:block}.three-fifth-1200{width:60%;display:block}.four-fifth-1200{width:80%;display:block}.sixth-1200{width:16.66666%;display:block}}@media (min-width:1300px){.full-1300{width:100%;display:block}.half-1300{width:50%;display:block}.third-1300{width:33.33333%;display:block}.two-third-1300{width:66.66666%;display:block}.fourth-1300{width:25%;display:block}.three-fourth-1300{width:75%;display:block}.fifth-1300{width:20%;display:block}.two-fifth-1300{width:40%;display:block}.three-fifth-1300{width:60%;display:block}.four-fifth-1300{width:80%;display:block}.sixth-1300{width:16.66666%;display:block}}@media (min-width:1400px){.full-1400{width:100%;display:block}.half-1400{width:50%;display:block}.third-1400{width:33.33333%;display:block}.two-third-1400{width:66.66666%;display:block}.fourth-1400{width:25%;display:block}.three-fourth-1400{width:75%;display:block}.fifth-1400{width:20%;display:block}.two-fifth-1400{width:40%;display:block}.three-fifth-1400{width:60%;display:block}.four-fifth-1400{width:80%;display:block}.sixth-1400{width:16.66666%;display:block}}@media (min-width:1500px){.full-1500{width:100%;display:block}.half-1500{width:50%;display:block}.third-1500{width:33.33333%;display:block}.two-third-1500{width:66.66666%;display:block}.fourth-1500{width:25%;display:block}.three-fourth-1500{width:75%;display:block}.fifth-1500{width:20%;display:block}.two-fifth-1500{width:40%;display:block}.three-fifth-1500{width:60%;display:block}.four-fifth-1500{width:80%;display:block}.sixth-1500{width:16.66666%;display:block}}@media (min-width:1600px){.full-1600{width:100%;display:block}.half-1600{width:50%;display:block}.third-1600{width:33.33333%;display:block}.two-third-1600{width:66.66666%;display:block}.fourth-1600{width:25%;display:block}.three-fourth-1600{width:75%;display:block}.fifth-1600{width:20%;display:block}.two-fifth-1600{width:40%;display:block}.three-fifth-1600{width:60%;display:block}.four-fifth-1600{width:80%;display:block}.sixth-1600{width:16.66666%;display:block}}@media (min-width:1700px){.full-1700{width:100%;display:block}.half-1700{width:50%;display:block}.third-1700{width:33.33333%;display:block}.two-third-1700{width:66.66666%;display:block}.fourth-1700{width:25%;display:block}.three-fourth-1700{width:75%;display:block}.fifth-1700{width:20%;display:block}.two-fifth-1700{width:40%;display:block}.three-fifth-1700{width:60%;display:block}.four-fifth-1700{width:80%;display:block}.sixth-1700{width:16.66666%;display:block}}@media (min-width:1800px){.full-1800{width:100%;display:block}.half-1800{width:50%;display:block}.third-1800{width:33.33333%;display:block}.two-third-1800{width:66.66666%;display:block}.fourth-1800{width:25%;display:block}.three-fourth-1800{width:75%;display:block}.fifth-1800{width:20%;display:block}.two-fifth-1800{width:40%;display:block}.three-fifth-1800{width:60%;display:block}.four-fifth-1800{width:80%;display:block}.sixth-1800{width:16.66666%;display:block}}@media (min-width:1900px){.full-1900{width:100%;display:block}.half-1900{width:50%;display:block}.third-1900{width:33.33333%;display:block}.two-third-1900{width:66.66666%;display:block}.fourth-1900{width:25%;display:block}.three-fourth-1900{width:75%;display:block}.fifth-1900{width:20%;display:block}.two-fifth-1900{width:40%;display:block}.three-fifth-1900{width:60%;display:block}.four-fifth-1900{width:80%;display:block}.sixth-1900{width:16.66666%;display:block}}@media (min-width:2000px){.full-2000{width:100%;display:block}.half-2000{width:50%;display:block}.third-2000{width:33.33333%;display:block}.two-third-2000{width:66.66666%;display:block}.fourth-2000{width:25%;display:block}.three-fourth-2000{width:75%;display:block}.fifth-2000{width:20%;display:block}.two-fifth-2000{width:40%;display:block}.three-fifth-2000{width:60%;display:block}.four-fifth-2000{width:80%;display:block}.sixth-2000{width:16.66666%;display:block}}@media (min-width:500px){.none-500{display:none}}@media (min-width:600px){.none-600{display:none}}@media (min-width:700px){.none-700{display:none}}@media (min-width:800px){.none-800{display:none}}@media (min-width:900px){.none-900{display:none}}@media (min-width:1000px){.none-1000{display:none}}@media (min-width:1100px){.none-1100{display:none}}@media (min-width:1200px){.none-1200{display:none}}@media (min-width:1300px){.none-1300{display:none}}@media (min-width:1400px){.none-1400{display:none}}@media (min-width:1500px){.none-1500{display:none}}@media (min-width:1600px){.none-1600{display:none}}@media (min-width:1700px){.none-1700{display:none}}@media (min-width:1800px){.none-1800{display:none}}@media (min-width:1900px){.none-1900{display:none}}@media (min-width:2000px){.none-2000{display:none}}.off-none{margin-left:0}.off-half{margin-left:50%}.off-third{margin-left:33.33333%}.off-two-third{margin-left:66.66666%}.off-fourth{margin-left:25%}.off-three-fourth{margin-left:75%}.off-fifth{margin-left:20%}.off-two-fifth{margin-left:40%}.off-three-fifth{margin-left:60%}.off-four-fifth{margin-left:80%}.off-sixth{margin-left:16.66666%}@media (min-width:500px){.off-none-500{margin-left:0}.off-half-500{margin-left:50%}.off-third-500{margin-left:33.33333%}.off-two-third-500{margin-left:66.66666%}.off-fourth-500{margin-left:25%}.off-three-fourth-500{margin-left:75%}.off-fifth-500{margin-left:20%}.off-two-fifth-500{margin-left:40%}.off-three-fifth-500{margin-left:60%}.off-four-fifth-500{margin-left:80%}.off-sixth-500{margin-left:16.66666%}}@media (min-width:600px){.off-none-600{margin-left:0}.off-half-600{margin-left:50%}.off-third-600{margin-left:33.33333%}.off-two-third-600{margin-left:66.66666%}.off-fourth-600{margin-left:25%}.off-three-fourth-600{margin-left:75%}.off-fifth-600{margin-left:20%}.off-two-fifth-600{margin-left:40%}.off-three-fifth-600{margin-left:60%}.off-four-fifth-600{margin-left:80%}.off-sixth-600{margin-left:16.66666%}}@media (min-width:700px){.off-none-700{margin-left:0}.off-half-700{margin-left:50%}.off-third-700{margin-left:33.33333%}.off-two-third-700{margin-left:66.66666%}.off-fourth-700{margin-left:25%}.off-three-fourth-700{margin-left:75%}.off-fifth-700{margin-left:20%}.off-two-fifth-700{margin-left:40%}.off-three-fifth-700{margin-left:60%}.off-four-fifth-700{margin-left:80%}.off-sixth-700{margin-left:16.66666%}}@media (min-width:800px){.off-none-800{margin-left:0}.off-half-800{margin-left:50%}.off-third-800{margin-left:33.33333%}.off-two-third-800{margin-left:66.66666%}.off-fourth-800{margin-left:25%}.off-three-fourth-800{margin-left:75%}.off-fifth-800{margin-left:20%}.off-two-fifth-800{margin-left:40%}.off-three-fifth-800{margin-left:60%}.off-four-fifth-800{margin-left:80%}.off-sixth-800{margin-left:16.66666%}}@media (min-width:900px){.off-none-900{margin-left:0}.off-half-900{margin-left:50%}.off-third-900{margin-left:33.33333%}.off-two-third-900{margin-left:66.66666%}.off-fourth-900{margin-left:25%}.off-three-fourth-900{margin-left:75%}.off-fifth-900{margin-left:20%}.off-two-fifth-900{margin-left:40%}.off-three-fifth-900{margin-left:60%}.off-four-fifth-900{margin-left:80%}.off-sixth-900{margin-left:16.66666%}}@media (min-width:1000px){.off-none-1000{margin-left:0}.off-half-1000{margin-left:50%}.off-third-1000{margin-left:33.33333%}.off-two-third-1000{margin-left:66.66666%}.off-fourth-1000{margin-left:25%}.off-three-fourth-1000{margin-left:75%}.off-fifth-1000{margin-left:20%}.off-two-fifth-1000{margin-left:40%}.off-three-fifth-1000{margin-left:60%}.off-four-fifth-1000{margin-left:80%}.off-sixth-1000{margin-left:16.66666%}}@media (min-width:1100px){.off-none-1100{margin-left:0}.off-half-1100{margin-left:50%}.off-third-1100{margin-left:33.33333%}.off-two-third-1100{margin-left:66.66666%}.off-fourth-1100{margin-left:25%}.off-three-fourth-1100{margin-left:75%}.off-fifth-1100{margin-left:20%}.off-two-fifth-1100{margin-left:40%}.off-three-fifth-1100{margin-left:60%}.off-four-fifth-1100{margin-left:80%}.off-sixth-1100{margin-left:16.66666%}}@media (min-width:1200px){.off-none-1200{margin-left:0}.off-half-1200{margin-left:50%}.off-third-1200{margin-left:33.33333%}.off-two-third-1200{margin-left:66.66666%}.off-fourth-1200{margin-left:25%}.off-three-fourth-1200{margin-left:75%}.off-fifth-1200{margin-left:20%}.off-two-fifth-1200{margin-left:40%}.off-three-fifth-1200{margin-left:60%}.off-four-fifth-1200{margin-left:80%}.off-sixth-1200{margin-left:16.66666%}}@media (min-width:1300px){.off-none-1300{margin-left:0}.off-half-1300{margin-left:50%}.off-third-1300{margin-left:33.33333%}.off-two-third-1300{margin-left:66.66666%}.off-fourth-1300{margin-left:25%}.off-three-fourth-1300{margin-left:75%}.off-fifth-1300{margin-left:20%}.off-two-fifth-1300{margin-left:40%}.off-three-fifth-1300{margin-left:60%}.off-four-fifth-1300{margin-left:80%}.off-sixth-1300{margin-left:16.66666%}}@media (min-width:1400px){.off-none-1400{margin-left:0}.off-half-1400{margin-left:50%}.off-third-1400{margin-left:33.33333%}.off-two-third-1400{margin-left:66.66666%}.off-fourth-1400{margin-left:25%}.off-three-fourth-1400{margin-left:75%}.off-fifth-1400{margin-left:20%}.off-two-fifth-1400{margin-left:40%}.off-three-fifth-1400{margin-left:60%}.off-four-fifth-1400{margin-left:80%}.off-sixth-1400{margin-left:16.66666%}}@media (min-width:1500px){.off-none-1500{margin-left:0}.off-half-1500{margin-left:50%}.off-third-1500{margin-left:33.33333%}.off-two-third-1500{margin-left:66.66666%}.off-fourth-1500{margin-left:25%}.off-three-fourth-1500{margin-left:75%}.off-fifth-1500{margin-left:20%}.off-two-fifth-1500{margin-left:40%}.off-three-fifth-1500{margin-left:60%}.off-four-fifth-1500{margin-left:80%}.off-sixth-1500{margin-left:16.66666%}}@media (min-width:1600px){.off-none-1600{margin-left:0}.off-half-1600{margin-left:50%}.off-third-1600{margin-left:33.33333%}.off-two-third-1600{margin-left:66.66666%}.off-fourth-1600{margin-left:25%}.off-three-fourth-1600{margin-left:75%}.off-fifth-1600{margin-left:20%}.off-two-fifth-1600{margin-left:40%}.off-three-fifth-1600{margin-left:60%}.off-four-fifth-1600{margin-left:80%}.off-sixth-1600{margin-left:16.66666%}}@media (min-width:1700px){.off-none-1700{margin-left:0}.off-half-1700{margin-left:50%}.off-third-1700{margin-left:33.33333%}.off-two-third-1700{margin-left:66.66666%}.off-fourth-1700{margin-left:25%}.off-three-fourth-1700{margin-left:75%}.off-fifth-1700{margin-left:20%}.off-two-fifth-1700{margin-left:40%}.off-three-fifth-1700{margin-left:60%}.off-four-fifth-1700{margin-left:80%}.off-sixth-1700{margin-left:16.66666%}}@media (min-width:1800px){.off-none-1800{margin-left:0}.off-half-1800{margin-left:50%}.off-third-1800{margin-left:33.33333%}.off-two-third-1800{margin-left:66.66666%}.off-fourth-1800{margin-left:25%}.off-three-fourth-1800{margin-left:75%}.off-fifth-1800{margin-left:20%}.off-two-fifth-1800{margin-left:40%}.off-three-fifth-1800{margin-left:60%}.off-four-fifth-1800{margin-left:80%}.off-sixth-1800{margin-left:16.66666%}}@media (min-width:1900px){.off-none-1900{margin-left:0}.off-half-1900{margin-left:50%}.off-third-1900{margin-left:33.33333%}.off-two-third-1900{margin-left:66.66666%}.off-fourth-1900{margin-left:25%}.off-three-fourth-1900{margin-left:75%}.off-fifth-1900{margin-left:20%}.off-two-fifth-1900{margin-left:40%}.off-three-fifth-1900{margin-left:60%}.off-four-fifth-1900{margin-left:80%}.off-sixth-1900{margin-left:16.66666%}}@media (min-width:2000px){.off-none-2000{margin-left:0}.off-half-2000{margin-left:50%}.off-third-2000{margin-left:33.33333%}.off-two-third-2000{margin-left:66.66666%}.off-fourth-2000{margin-left:25%}.off-three-fourth-2000{margin-left:75%}.off-fifth-2000{margin-left:20%}.off-two-fifth-2000{margin-left:40%}.off-three-fifth-2000{margin-left:60%}.off-four-fifth-2000{margin-left:80%}.off-sixth-2000{margin-left:16.66666%}}nav{position:fixed;top:0;left:0;right:0;height:3em;padding:0 .6em;background:#fff;box-shadow:0 0 .2em rgba(17,17,17,.2);z-index:3;transition:all .3s;transform-style:preserve-3d}nav .brand,nav .burger,nav .menu{float:right;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}nav .brand{font-weight:700;float:left;padding:0 .6em;max-width:50%;white-space:nowrap;color:#111}nav .brand *{vertical-align:middle}nav .logo{height:2em;margin-right:.3em}nav .select:after{height:calc(100% - 1px);padding:0;line-height:2.4em}nav .menu>*{margin-right:.6em}nav .burger{display:none}@media (max-width:60em){nav .burger{display:inline-block;cursor:pointer;bottom:-1000em;margin:0}nav .burger~.menu,nav .show:checked~.burger{position:fixed;min-height:100%;width:0;overflow:hidden;top:0;right:0;bottom:-1000em;margin:0;background:#fff;transition:all .3s ease;transform:none}nav .burger~.menu{z-index:2}nav .show:checked~.burger{color:transparent;width:100%;border-radius:0;background:rgba(0,0,0,.2);transition:all .3s ease}nav .show:checked~.menu{width:70%;overflow:auto;transition:all .3s ease;height:100vh}nav .burger~.menu>*{display:block;margin:.3em;text-align:left;max-width:calc(100% - .6em)}nav .burger~.menu>a{padding:.3em .9em}}.stack,.stack .toggle{margin-top:0;margin-bottom:0;display:block;width:100%;text-align:left;border-radius:0}.stack:first-child,.stack:first-child .toggle{border-top-left-radius:.2em;border-top-right-radius:.2em}.stack:last-child,.stack:last-child .toggle{border-bottom-left-radius:.2em;border-bottom-right-radius:.2em}input.stack,select.stack,textarea.stack{transition:border-bottom 0 ease 0;border-bottom-width:0}input.stack:last-child,select.stack:last-child,textarea.stack:last-child{border-bottom-width:1px}input.stack:focus+input,input.stack:focus+select,input.stack:focus+textarea,select.stack:focus+input,select.stack:focus+select,select.stack:focus+textarea,textarea.stack:focus+input,textarea.stack:focus+select,textarea.stack:focus+textarea{border-top-color:#0074d9}.card,.modal .overlay~*{position:relative;box-shadow:0;border-radius:.2em;border:1px solid #ccc;overflow:hidden;text-align:left;background:#fff;margin-bottom:.6em;padding:0;transition:all .3s ease}.hidden.card,.modal .overlay:checked+*,.modal .overlay~.hidden,.modal .overlay~:checked+*,:checked+.card{font-size:0;padding:0;margin:0;border:0}.card>*,.modal .overlay~*>*{max-width:100%;display:block}.card>:last-child,.modal .overlay~*>:last-child{margin-bottom:0}.card>p,.card header,.card section,.modal .overlay~*>p,.modal .overlay~* header,.modal .overlay~* section{padding:.6em .8em}.card section,.modal .overlay~* section{padding:.6em .8em 0}.card hr,.modal .overlay~* hr{border:none;height:1px;background-color:#eee}.card header,.modal .overlay~* header{font-weight:700;position:relative;border-bottom:1px solid #eee}.card header h1,.card header h2,.card header h3,.card header h4,.card header h5,.card header h6,.modal .overlay~* header h1,.modal .overlay~* header h2,.modal .overlay~* header h3,.modal .overlay~* header h4,.modal .overlay~* header h5,.modal .overlay~* header h6{padding:0;margin:0 2em 0 0;line-height:1;display:inline-block;vertical-align:text-bottom}.card header:last-child,.modal .overlay~* header:last-child{border-bottom:0}.card footer,.modal .overlay~* footer{padding:.8em}.card p,.modal .overlay~* p{margin:.3em 0}.card p:first-child,.modal .overlay~* p:first-child{margin-top:0}.card p:last-child,.modal .overlay~* p:last-child{margin-bottom:0}.card>p,.modal .overlay~*>p{margin:0;padding-right:2.5em}.card .close,.modal .overlay~* .close{position:absolute;top:.4em;right:.3em;font-size:1.2em;padding:0 .5em;cursor:pointer;width:auto}.card .close:hover,.modal .overlay~* .close:hover{color:#ff4136}.card h1+.close,.modal .overlay~* h1+.close{margin:.2em}.card h2+.close,.modal .overlay~* h2+.close{margin:.1em}.card .dangerous,.modal .overlay~* .dangerous{background:#ff4136;float:right}.modal{text-align:center}.modal>input{display:none}.modal>input~*{opacity:0;max-height:0;overflow:hidden}.modal .overlay{top:0;left:0;bottom:0;right:0;position:fixed;margin:0;border-radius:0;background:rgba(17,17,17,.6);transition:all .3s;z-index:4}.modal .overlay:after,.modal .overlay:before{display:none}.modal .overlay~*{border:0;position:fixed;top:50%;left:50%;transform:translateX(-50%) translateY(-50%) scale(.2);z-index:5;transition:all .3s}.modal>input:checked~*{display:block;opacity:1;max-height:10000px;transition:all .3s}.modal>input:checked~.overlay~*{max-height:90%;overflow:auto;-webkit-transform:translateX(-50%) translateY(-50%) scale(1);transform:translateX(-50%) translateY(-50%) scale(1)}@media (max-width:60em){.modal .overlay~*{min-width:90%}}.dropimage{position:relative;display:block;padding:0 0 56.25%;overflow:hidden;cursor:pointer;border:0;margin:.3em 0;border-radius:.2em;background-color:#ddd;background-size:cover;background-position:50%;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NDAiIGhlaWdodD0iNjQwIj48ZyBmaWxsPSIjMzMzIj48cGF0aCBkPSJNMTg3IDIzMGMtMTIgMC0yMiAxMC0yMiAyMnYxNTZjMCAxMiAxMCAyMiAyMiAyMmgyNzZjMTIgMCAyMi0xMCAyMi0yMlYyNTJjMC0xMi0xMC0yMi0yMi0yMkgxODd6bTE3MyAyNmE3MCA3MiAwIDAgMSA3MCA3MiA3MCA3MiAwIDAgMS03MCA3MiA3MCA3MiAwIDAgMS03MC03MiA3MCA3MiAwIDAgMSA3MC03MnoiLz48Y2lyY2xlIGN4PSIzNjAiIGN5PSIzMzAiIHI9IjQxIi8+PHBhdGggZD0iTTIwNSAyMjVsNS0xMGgyMGw1IDEwaC0zME0yODUgMjAwbC0xNSAyNWgxMDZsLTE1LTI1aC03NnptMjUgNWgyN3YxM2gtMjd2LTEzek00MDUgMjI1bDUtMTBoMjBsNSAxMGgtMzAiLz48L2c+PC9zdmc+)}.dropimage input{left:0;width:100%;height:100%;border:0;margin:0;padding:0;opacity:0;cursor:pointer;position:absolute}.tabs{position:relative;overflow:hidden}.tabs>label img{float:left;margin-left:.6em}.tabs>.row{width:calc(100% + 1.2em);display:table;table-layout:fixed;position:relative;padding-left:0;transition:all .3s;border-spacing:0;margin:0}.tabs>.row:after,.tabs>.row:before{display:none}.tabs>.row>*,.tabs>.row img{display:table-cell;vertical-align:top;margin:0;width:100%}.tabs>input{display:none}.tabs>input+*{width:100%}.tabs>input+label{width:auto}.two.tabs>.row{width:200%;left:-100%}.two.tabs>input:first-of-type:checked~.row{margin-left:100%}.two.tabs>label img{width:48%;margin:4% 0 4% 4%}.three.tabs>.row{width:300%;left:-200%}.three.tabs>input:first-of-type:checked~.row{margin-left:200%}.three.tabs>input:nth-of-type(2):checked~.row{margin-left:100%}.three.tabs>label img{width:30%;margin:5% 0 5% 5%}.four.tabs>.row{width:400%;left:-300%}.four.tabs>input:first-of-type:checked~.row{margin-left:300%}.four.tabs>input:nth-of-type(2):checked~.row{margin-left:200%}.four.tabs>input:nth-of-type(3):checked~.row{margin-left:100%}.four.tabs>label img{width:22%;margin:4% 0 4% 4%}.tabs>label:first-of-type img{margin-left:0}[data-tooltip]{position:relative}[data-tooltip]:after,[data-tooltip]:before{position:absolute;z-index:1;opacity:0;border-width:0;height:0;padding:0;overflow:hidden;transition:opacity .6s ease,height 0s ease .6s;top:calc(100% - 6px);left:0;margin-top:12px}[data-tooltip]:after{margin-left:0;font-size:.8em;background:#111;content:attr(data-tooltip);white-space:nowrap}[data-tooltip]:before{content:"";width:0;height:0;border:0 solid transparent;border-bottom-color:#111;margin-top:0;left:10px}[data-tooltip]:focus:after,[data-tooltip]:focus:before,[data-tooltip]:hover:after,[data-tooltip]:hover:before{opacity:1;border-width:6px;height:auto}[data-tooltip]:focus:after,[data-tooltip]:hover:after{padding:.45em .9em}.tooltip-top:after,.tooltip-top:before{top:auto;bottom:calc(100% - 6px);left:0;margin-bottom:12px}.tooltip-top:before{border-color:#111 transparent transparent;margin-bottom:0;left:10px}.tooltip-right:after,.tooltip-right:before{left:100%;margin-left:6px;margin-top:0;top:0}.tooltip-right:before{border-color:transparent #111 transparent transparent;margin-left:-6px;left:100%;top:7px}.tooltip-left:after,.tooltip-left:before{right:100%;margin-right:6px;left:auto;margin-top:0;top:0}.tooltip-left:before{border-color:transparent transparent transparent #111;margin-right:-6px;right:100%;top:7px} \ No newline at end of file diff --git a/packages/cssnano-preset-advanced/src/index.js b/packages/cssnano-preset-advanced/src/index.js index a7f24f101..bc0087a65 100644 --- a/packages/cssnano-preset-advanced/src/index.js +++ b/packages/cssnano-preset-advanced/src/index.js @@ -6,22 +6,22 @@ import postcssZindex from 'lerna:postcss-zindex'; import autoprefixer from 'autoprefixer'; const defaultOpts = { - autoprefixer: { - add: false, - }, + autoprefixer: { + add: false, + }, }; -export default function advancedPreset (opts = {}) { - const options = Object.assign({}, defaultOpts, opts); +export default function advancedPreset(opts = {}) { + const options = Object.assign({}, defaultOpts, opts); - const plugins = [ - ...defaultPreset(options).plugins, - [autoprefixer, options.autoprefixer], - [postcssDiscardUnused, options.discardUnused], - [postcssMergeIdents, options.mergeIdents], - [postcssReduceIdents, options.reduceIdents], - [postcssZindex, options.zindex], - ]; + const plugins = [ + ...defaultPreset(options).plugins, + [autoprefixer, options.autoprefixer], + [postcssDiscardUnused, options.discardUnused], + [postcssMergeIdents, options.mergeIdents], + [postcssReduceIdents, options.reduceIdents], + [postcssZindex, options.zindex], + ]; - return {plugins}; + return { plugins }; } diff --git a/packages/cssnano-preset-default/src/__tests__/integrations.js b/packages/cssnano-preset-default/src/__tests__/integrations.js index 233572950..cb129146c 100644 --- a/packages/cssnano-preset-default/src/__tests__/integrations.js +++ b/packages/cssnano-preset-default/src/__tests__/integrations.js @@ -1,27 +1,23 @@ import test from 'ava'; -import {integrationTests, loadPreset} from '../../../../util/testHelpers.js'; +import { integrationTests, loadPreset } from '../../../../util/testHelpers.js'; import preset from '..'; test( - 'should correctly handle the framework tests', - integrationTests, - preset, - `${__dirname}/integrations` + 'should correctly handle the framework tests', + integrationTests, + preset, + `${__dirname}/integrations` ); -function excludeProcessor (t, options) { - const input = `h1{color:black}`; - return loadPreset(preset(options)).process(input).then(({css}) => { - t.is(css, input); +function excludeProcessor(t, options) { + const input = `h1{color:black}`; + return loadPreset(preset(options)) + .process(input) + .then(({ css }) => { + t.is(css, input); }); } -test( - excludeProcessor, - {colormin: false} -); +test(excludeProcessor, { colormin: false }); -test( - excludeProcessor, - {colormin: {exclude: true}} -); +test(excludeProcessor, { colormin: { exclude: true } }); diff --git a/packages/cssnano-preset-default/src/__tests__/integrations/bootstrap-v3.4.0.css b/packages/cssnano-preset-default/src/__tests__/integrations/bootstrap-v3.4.0.css index f9325fb30..a6473150f 100644 --- a/packages/cssnano-preset-default/src/__tests__/integrations/bootstrap-v3.4.0.css +++ b/packages/cssnano-preset-default/src/__tests__/integrations/bootstrap-v3.4.0.css @@ -4,4 +4,4 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}code,kbd{padding:2px 4px;font-size:90%}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.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}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.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,.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,.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,.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{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.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{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777}caption,th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;margin:0}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{display:block;font-size:14px;line-height:1.42857143;color:#555}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline input[type=checkbox],.checkbox input[type=checkbox],.radio-inline input[type=radio],.radio input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success.checkbox-inline label,.has-success.checkbox label,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.radio-inline label,.has-success.radio label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning.checkbox-inline label,.has-warning.checkbox label,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.radio-inline label,.has-warning.radio label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error.checkbox-inline label,.has-error.checkbox label,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.radio-inline label,.has-error.radio label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group .form-control:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group .form-control:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container-fluid .navbar-brand,.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container-fluid .jumbotron,.container .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container-fluid .jumbotron,.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table-responsive>.table caption,.panel>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel,.carousel-inner{position:relative}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:left .6s ease-in-out;-o-transition:.6s ease-in-out left;transition:left .6s ease-in-out}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media (-webkit-transform-3d),(transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translateZ(0);transform:translateZ(0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:transparent;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,.0001));background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(90deg,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001),rgba(0,0,0,.5));background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(90deg,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}} \ No newline at end of file +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}code,kbd{padding:2px 4px;font-size:90%}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.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}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.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,.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,.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,.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{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.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{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777}caption,th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;margin:0}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{display:block;font-size:14px;line-height:1.42857143;color:#555}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline input[type=checkbox],.checkbox input[type=checkbox],.radio-inline input[type=radio],.radio input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success.checkbox-inline label,.has-success.checkbox label,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.radio-inline label,.has-success.radio label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning.checkbox-inline label,.has-warning.checkbox label,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.radio-inline label,.has-warning.radio label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error.checkbox-inline label,.has-error.checkbox label,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.radio-inline label,.has-error.radio label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio],[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group .form-control:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group .form-control:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid;border-color:#ddd #ddd transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container-fluid .navbar-brand,.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container-fluid .jumbotron,.container .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container-fluid .jumbotron,.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-image:-o-linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table-responsive>.table caption,.panel>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translateY(-25%);-ms-transform:translateY(-25%);-o-transform:translateY(-25%);transform:translateY(-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0);-ms-transform:translate(0);-o-transform:translate(0);transform:translate(0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel,.carousel-inner{position:relative}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:left .6s ease-in-out;-o-transition:left .6s ease-in-out;transition:left .6s ease-in-out}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media (-webkit-transform-3d),(transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translateZ(0);transform:translateZ(0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:transparent;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,.0001));background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(90deg,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000",endColorstr="#00000000",GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001),rgba(0,0,0,.5));background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(90deg,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000",endColorstr="#80000000",GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}} \ No newline at end of file diff --git a/packages/cssnano-preset-default/src/__tests__/integrations/kube-v6.5.2.css b/packages/cssnano-preset-default/src/__tests__/integrations/kube-v6.5.2.css index 6218f5437..4811448ac 100644 --- a/packages/cssnano-preset-default/src/__tests__/integrations/kube-v6.5.2.css +++ b/packages/cssnano-preset-default/src/__tests__/integrations/kube-v6.5.2.css @@ -1 +1 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}*{margin:0;padding:0;outline:0;-webkit-overflow-scrolling:touch}audio,img,video{max-width:100%}img,video{height:auto}svg{max-height:100%}iframe{border:none}::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{vertical-align:middle;position:relative;bottom:.15rem;font-size:115%;margin-right:3px}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.inverted{color:#fff}.error{color:#f03c69}.success{color:#35beb1}.warning{color:#f7ba45}.focus{color:#1c86f2}.aluminum{color:#f8f8f8}.silver{color:#e0e1e1}.lightgray{color:#d4d4d4}.gray{color:#bdbdbd}.midgray{color:#676b72}.darkgray{color:#313439}.bg-black{background-color:#0d0d0e}.bg-inverted{background-color:#fff}.bg-error{background-color:#f03c69}.bg-success{background-color:#35beb1}.bg-warning{background-color:#f7ba45}.bg-focus{background-color:#1c86f2}.bg-aluminum{background-color:#f8f8f8}.bg-silver{background-color:#e0e1e1}.bg-lightgray{background-color:#d4d4d4}.bg-gray{background-color:#bdbdbd}.bg-midgray{background-color:#676b72}.bg-darkgray{background-color:#313439}.bg-highlight{background-color:#edf2ff}body,html{font-size:16px;line-height:24px}body{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;color:#313439;background-color:transparent}a{color:#3794de}a:hover{color:#f03c69}h1,h1.title,h2,h3,h4,h5,h6{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:#0d0d0e;text-rendering:optimizeLegibility;margin-bottom:16px}h1.title{font-size:60px;line-height:64px;margin-bottom:8px}.h1,h1{font-size:48px;line-height:52px}.h2,h2{font-size:36px;line-height:40px}.h3,h3{font-size:24px}.h3,.h4,h3,h4{line-height:32px}.h4,h4{font-size:21px}.h5,h5{font-size:18px;line-height:28px}.h6,h6{font-size:16px;line-height:24px}.h1 a,.h2 a,.h3 a,.h4 a,.h5 a,.h6 a,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}blockquote+h2,blockquote+h3,blockquote+h4,blockquote+h5,blockquote+h6,dl+h2,dl+h3,dl+h4,dl+h5,dl+h6,figure+h2,figure+h3,figure+h4,figure+h5,figure+h6,form+h2,form+h3,form+h4,form+h5,form+h6,hr+h2,hr+h3,hr+h4,hr+h5,hr+h6,ol+h2,ol+h3,ol+h4,ol+h5,ol+h6,p+h2,p+h3,p+h4,p+h5,p+h6,pre+h2,pre+h3,pre+h4,pre+h5,pre+h6,table+h2,table+h3,table+h4,table+h5,table+h6,ul+h2,ul+h3,ul+h4,ul+h5,ul+h6{margin-top:24px}ol,ol ol,ol ul,ul,ul ol,ul ul{margin:0 0 0 24px}ol ol li{list-style-type:lower-alpha}ol ol ol li{list-style-type:lower-roman}nav ol,nav ul{margin:0;list-style:none}nav ol ol,nav ol ul,nav ul ol,nav ul ul{margin-left:24px}dl dt{font-weight:700}dd{margin-left:24px}address,blockquote,dl,fieldset,figure,form,hr,ol,p,pre,table,ul{margin-bottom:16px}hr{border:none;border-bottom:1px solid rgba(0,0,0,.1);margin-top:-1px}blockquote{padding-left:1rem;border-left:4px solid rgba(0,0,0,.1);font-style:italic;color:rgba(49,52,57,.65)}blockquote p{margin-bottom:.5rem}cite,figcaption,small,time{font-size:87.5%}cite{opacity:.6}abbr[title],dfn[title]{border-bottom:1px dotted rgba(0,0,0,.5);cursor:help}var{font-size:16px;opacity:.6;font-style:normal}code,kbd,mark,samp{position:relative;top:-1px;padding:4px 4px 2px;display:inline-block;line-height:1;color:rgba(49,52,57,.85)}code{background:#e0e1e1}mark{background:#f7ba45}samp{color:#fff;background:#1c86f2}kbd{border:1px solid rgba(0,0,0,.1)}sub,sup{font-size:x-small;line-height:0;margin-left:1rem/4;position:relative}sup{top:0}sub{bottom:1px}code,kbd,pre,samp,var{font-family:Consolas,Monaco,Courier New,monospace}code,kbd,mark,pre,samp,var{font-size:87.5%}pre,pre code{background:#f8f8f8;padding:0;top:0;display:block;line-height:20px;color:rgba(49,52,57,.85);overflow:none;white-space:pre-wrap}pre{padding:1rem}figcaption{opacity:.6}figure figcaption{position:relative;top:-1rem/2}figure pre{background:none;border:1px solid rgba(0,0,0,.1);border-radius:4px}figure .video-container,figure pre{margin-bottom:8px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}ul.unstyled{margin-left:0}ul.unstyled,ul.unstyled ul{list-style:none}.monospace{font-family:Consolas,Monaco,Courier New,monospace}.upper{text-transform:uppercase}.lower{text-transform:lowercase}.italic{font-style:italic!important}.strong{font-weight:700!important}.normal{font-weight:400!important}.muted{opacity:.55}a.muted{color:#0d0d0e}a.muted:hover{opacity:1}.black{color:#0d0d0e}.smaller{font-size:12px}.small,.smaller{line-height:20px}.small{font-size:14px}.big{font-size:18px;line-height:28px}.large{font-size:20px;line-height:32px}.end{margin-bottom:0!important}.highlight{background-color:#edf2ff}.nowrap,.nowrap td{white-space:nowrap}@media (min-width:768px) and (max-width:1024px){.columns-2,.columns-3,.columns-4{column-gap:24px}.columns-2{column-count:2}.columns-3{column-count:3}.columns-4{column-count:4}}.row{display:flex;flex-direction:row;flex-wrap:wrap}@media (max-width:768px){.row{flex-direction:column;flex-wrap:nowrap}}.row.gutters,.row.gutters>.row{margin-left:-2%}@media (max-width:768px){.row.gutters,.row.gutters>.row{margin-left:0}}.row.gutters>.col,.row.gutters>.row>.col{margin-left:2%}@media (max-width:768px){.row.gutters>.col,.row.gutters>.row>.col{margin-left:0}}.row.around{justify-content:space-around}.row.between{justify-content:space-between}.row.auto .col{flex-grow:1}.col-1{width:8.33333%}.offset-1{margin-left:8.33333%}.col-2{width:16.66667%}.offset-2{margin-left:16.66667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.33333%}.offset-4{margin-left:33.33333%}.col-5{width:41.66667%}.offset-5{margin-left:41.66667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.33333%}.offset-7{margin-left:58.33333%}.col-8{width:66.66667%}.offset-8{margin-left:66.66667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.33333%}.offset-10{margin-left:83.33333%}.col-11{width:91.66667%}.offset-11{margin-left:91.66667%}.col-12{width:100%}.offset-12{margin-left:100%}.gutters>.col-1{width:6.33333%}.gutters>.offset-1{margin-left:10.33333%!important}.gutters>.col-2{width:14.66667%}.gutters>.offset-2{margin-left:18.66667%!important}.gutters>.col-3{width:23%}.gutters>.offset-3{margin-left:27%!important}.gutters>.col-4{width:31.33333%}.gutters>.offset-4{margin-left:35.33333%!important}.gutters>.col-5{width:39.66667%}.gutters>.offset-5{margin-left:43.66667%!important}.gutters>.col-6{width:48%}.gutters>.offset-6{margin-left:52%!important}.gutters>.col-7{width:56.33333%}.gutters>.offset-7{margin-left:60.33333%!important}.gutters>.col-8{width:64.66667%}.gutters>.offset-8{margin-left:68.66667%!important}.gutters>.col-9{width:73%}.gutters>.offset-9{margin-left:77%!important}.gutters>.col-10{width:81.33333%}.gutters>.offset-10{margin-left:85.33333%!important}.gutters>.col-11{width:89.66667%}.gutters>.offset-11{margin-left:93.66667%!important}.gutters>.col-12{width:98%}.gutters>.offset-12{margin-left:102%!important}@media (max-width:768px){[class*=" offset-"],[class^=offset-]{margin-left:0}}.first{order:-1}.last{order:1}@media (max-width:768px){.row .col{margin-left:0;width:100%}.row.gutters .col{margin-bottom:16px}.first-sm{order:-1}.last-sm{order:1}}table{border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;empty-cells:show;font-size:15px;line-height:24px}table caption{text-align:left;font-size:14px;font-weight:500;color:#676b72}th{text-align:left;font-weight:700;vertical-align:bottom}td{vertical-align:top}td.align-middle,tr.align-middle td{vertical-align:middle}td,th{padding:1rem;border-bottom:1px solid rgba(0,0,0,.05)}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}tfoot td,tfoot th{color:rgba(49,52,57,.5)}table.bordered td,table.bordered th{border:1px solid rgba(0,0,0,.05)}table.striped tr:nth-child(odd) td{background:#f8f8f8}table.bordered td:first-child,table.bordered th:first-child,table.striped td:first-child,table.striped th:first-child{padding-left:1rem}table.bordered td:last-child,table.bordered th:last-child,table.striped td:last-child,table.striped th:last-child{padding-right:1rem}table.unstyled td,table.unstyled th{border:none;padding:0}fieldset{font-family:inherit;border:1px solid rgba(0,0,0,.1);padding:2rem;margin-bottom:2rem;margin-top:2rem}legend{font-weight:700;font-size:12px;text-transform:uppercase;padding:0 1rem;margin-left:-1rem;top:2px;position:relative;line-height:0}input,select,textarea{display:block;width:100%;font-family:inherit;font-size:15px;height:40px;outline:none;vertical-align:middle;background-color:#fff;border:1px solid #d4d4d4;border-radius:3px;box-shadow:none;padding:0 12px}input.small,select.small,textarea.small{height:36px;font-size:13px;padding:0 12px;border-radius:3px}input.big,select.big,textarea.big{height:48px;font-size:17px;padding:0 12px;border-radius:3px}input:focus,select:focus,textarea:focus{outline:none;background-color:#fff;border-color:#1c86f2;box-shadow:inset 0 0 1px #1c86f2}input.error,select.error,textarea.error{background-color:rgba(240,60,105,.1);border:1px solid #f583a0}input.error:focus,select.error:focus,textarea.error:focus{border-color:#f03c69;box-shadow:inset 0 0 1px #f03c69}input.success,select.success,textarea.success{background-color:rgba(53,190,177,.1);border:1px solid #6ad5cb}input.success:focus,select.success:focus,textarea.success:focus{border-color:#35beb1;box-shadow:inset 0 0 1px #35beb1}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{resize:none;opacity:.6;cursor:default;font-style:italic;color:rgba(0,0,0,.5)}select{-webkit-appearance:none;background-image:url('data:image/svg+xml;utf8,');background-repeat:no-repeat;background-position:right 1rem center}select[multiple]{background-image:none;height:auto;padding:.5rem .75rem}textarea{height:auto;padding:8px 12px;line-height:24px;vertical-align:top}input[type=file]{width:auto;border:none;padding:0;height:auto;background:none;box-shadow:none;display:inline-block}input.search,input[type=search]{background-repeat:no-repeat;background-position:8px 53%;background-image:url('data:image/svg+xml;utf8,');padding-left:32px}input[type=checkbox],input[type=radio]{display:inline-block;width:auto;height:auto;padding:0}label{display:block;color:#313439;margin-bottom:4px;font-size:15px}label.checkbox,label .desc,label .error,label .success{text-transform:none;font-weight:400}label.checkbox{font-size:16px;line-height:24px;cursor:pointer;color:inherit}label.checkbox input{margin-top:0}.form-checkboxes label.checkbox{display:inline-block;margin-right:16px}.req{position:relative;top:1px;font-weight:700;color:#f03c69;font-size:110%}.desc{color:rgba(49,52,57,.5);font-size:12px;line-height:20px}span.desc{margin-left:4px}div.desc{margin-top:4px;margin-bottom:-8px}.form-buttons .button,.form-buttons button{margin-right:8px}.form-item,form{margin-bottom:2rem}.form .row:last-child .form-item,.form>.form-item:last-child{margin-bottom:0}.form span.error,.form span.success{font-size:12px;line-height:20px;margin-left:4px}.form-inline input,.form-inline select,.form-inline textarea{display:inline-block;width:auto}.append,.prepend{display:flex}.append input,.prepend input{flex:1}.append .button,.append span,.prepend .button,.prepend span{flex-shrink:0}.append span,.prepend span{display:flex;flex-direction:column;justify-content:center;font-weight:400;border:1px solid #d4d4d4;background-color:#f8f8f8;padding:0 .875rem;color:rgba(0,0,0,.5);font-size:12px;white-space:nowrap}.prepend input{border-radius:0 3px 3px 0}.prepend .button{margin-right:-1px;border-radius:3px 0 0 3px!important}.prepend span{border-right:none}.append input,.prepend span{border-radius:3px 0 0 3px}.append .button{margin-left:-1px;border-radius:0 3px 3px 0!important}.append span{border-left:none;border-radius:0 3px 3px 0}.button,button{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:15px;color:#fff;background-color:#1c86f2;border-radius:3px;min-height:40px;padding:8px 20px;font-weight:500;text-decoration:none;cursor:pointer;display:inline-block;line-height:20px;border:1px solid transparent;vertical-align:middle;-webkit-appearance:none}.button i,button i{position:relative;top:1px;margin:0 2px}input[type=submit]{width:auto}.button:hover,button:hover{outline:none;text-decoration:none;color:#fff;background-color:#4ca0f5}.button.disabled,.button:disabled{cursor:default;font-style:normal;color:hsla(0,0%,100%,.7);background-color:rgba(28,134,242,.7)}.button.small{font-size:13px;min-height:36px;padding:6px 20px;border-radius:3px}.button.big{font-size:17px;min-height:48px;padding:13px 24px;border-radius:3px}.button.large{font-size:19px;min-height:56px;padding:20px 36px;border-radius:3px}.button.outline{background:none;border-width:2px;border-color:#1c86f2;color:#1c86f2}.button.outline:hover{background:none;color:rgba(28,134,242,.6);border-color:rgba(28,134,242,.5)}.button.outline.disabled,.button.outline:disabled{background:none;color:rgba(28,134,242,.7);border-color:rgba(28,134,242,.5)}.button.inverted,.button.inverted:hover{color:#000;background-color:#fff}.button.inverted.disabled,.button.inverted:disabled{color:rgba(0,0,0,.7);background-color:hsla(0,0%,100%,.7)}.button.inverted.outline{background:none;color:#fff;border-color:#fff}.button.inverted.outline:hover{color:hsla(0,0%,100%,.6);border-color:hsla(0,0%,100%,.5)}.button.inverted.outline.disabled,.button.inverted.outline:disabled{background:none;color:hsla(0,0%,100%,.7);border-color:hsla(0,0%,100%,.5)}.button.inverted:hover{opacity:.7}.button.round{border-radius:56px}.button.raised{box-shadow:0 1px 3px rgba(0,0,0,.3)}.button.upper{text-transform:uppercase;letter-spacing:.04em;font-size:13px}.button.upper.small{font-size:11px}.button.upper.big{font-size:13px}.button.upper.large{font-size:15px}.button.secondary{color:#fff;background-color:#313439}.button.secondary:hover{color:#fff;background-color:#606670}.button.secondary.disabled,.button.secondary:disabled{color:hsla(0,0%,100%,.7);background-color:rgba(49,52,57,.7)}.button.secondary.outline{background:none;color:#313439;border-color:#313439}.button.secondary.outline:hover{color:rgba(49,52,57,.6);border-color:rgba(49,52,57,.5)}.button.secondary.outline.disabled,.button.secondary.outline:disabled{background:none;color:rgba(49,52,57,.7);border-color:rgba(49,52,57,.5)}.label{display:inline-block;font-size:13px;background:#e0e1e1;line-height:18px;padding:0 10px;font-weight:500;color:#313439;border:1px solid transparent;vertical-align:middle;text-decoration:none;border-radius:4px}.label a,.label a:hover{color:inherit;text-decoration:none}.label.big{font-size:14px;line-height:24px;padding:0 12px}.label.upper{text-transform:uppercase;font-size:11px}.label.outline{background:none;border-color:#bdbdbd}.label.badge{text-align:center;border-radius:64px;padding:0 6px}.label.badge.big{padding:0 8px}.label.tag{padding:0;background:none;border:none;text-transform:uppercase;font-size:11px}.label.tag.big{font-size:13px}.label.success{background:#35beb1;color:#fff}.label.success.outline,.label.success.tag{background:none;border-color:#35beb1;color:#35beb1}.label.error{background:#f03c69;color:#fff}.label.error.outline,.label.error.tag{background:none;border-color:#f03c69;color:#f03c69}.label.warning{background:#f7ba45;color:#0d0d0e}.label.warning.outline,.label.warning.tag{background:none;border-color:#f7ba45;color:#f7ba45}.label.focus{background:#1c86f2;color:#fff}.label.focus.outline,.label.focus.tag{background:none;border-color:#1c86f2;color:#1c86f2}.label.black{background:#0d0d0e;color:#fff}.label.black.outline,.label.black.tag{background:none;border-color:#0d0d0e;color:#0d0d0e}.label.inverted{background:#fff;color:#0d0d0e}.label.inverted.outline,.label.inverted.tag{background:none;border-color:#fff;color:#fff}.breadcrumbs{font-size:14px;margin-bottom:24px}.breadcrumbs ul{display:flex;align-items:center}.breadcrumbs.push-center ul{justify-content:center}.breadcrumbs a,.breadcrumbs span{font-style:normal;padding:0 10px;display:inline-block;white-space:nowrap}.breadcrumbs li:after{display:inline-block;content:"/";color:rgba(0,0,0,.3)}.breadcrumbs li:last-child:after{display:none}.breadcrumbs li:first-child a,.breadcrumbs li:first-child span{padding-left:0}.breadcrumbs li.active a{color:#313439;text-decoration:none;cursor:text}.pagination{margin:24px 0;font-size:14px}.pagination ul{display:flex;margin:0}.pagination.align-center ul{justify-content:center}.pagination a,.pagination span{border-radius:3px;display:inline-block;padding:8px 12px;line-height:1;white-space:nowrap;border:1px solid transparent}.pagination a{text-decoration:none;color:#313439}.pagination a:hover,.pagination li.active a,.pagination span{color:rgba(0,0,0,.5);border-color:#e0e1e1}.pagination li.active a,.pagination span{cursor:text}.pagination.upper{font-size:12px}.pager span{line-height:24px}.pager a,.pager span{padding-left:16px;padding-right:16px;border-radius:64px;border-color:rgba(0,0,0,.1)}.pager li{flex-basis:50%}.pager li.next{text-align:right}.pager.align-center li{flex-basis:auto;margin-left:4px;margin-right:4px}.pager.flat a,.pager.flat span{border:none;display:block;padding:0}.pager.flat a{font-weight:700}.pager.flat a:hover{background:none;text-decoration:underline}@media (max-width:768px){.pager.flat ul{flex-direction:column}.pager.flat li{flex-basis:100%;margin-bottom:8px;text-align:left}}@font-face{font-family:Kube;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfgAAAC8AAAAYGNtYXAXVtKOAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZsMn2SAAAAF4AAADeGhlYWQMP9EUAAAE8AAAADZoaGVhB8IDzQAABSgAAAAkaG10eCYABd4AAAVMAAAAMGxvY2EFWASuAAAFfAAAABptYXhwABcAmwAABZgAAAAgbmFtZfMJxocAAAW4AAABYnBvc3QAAwAAAAAHHAAAACAAAwPHAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBwPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qf//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAKAAAAAAQAA8AADwAUACQANABEAFYAaAB4AIgAmAAAEyIGFREUFjMhMjY1ETQmIwUhESEREzgBMSIGFRQWMzI2NTQmIzM4ATEiBhUUFjMyNjU0JiMzOAExIgYVFBYzMjY1NCYjATIWHQEUBiMiJj0BNDYzOAExITIWHQEUBiMiJj0BNDYzOAExATgBMSIGFRQWMzI2NTQmIzM4ATEiBhUUFjMyNjU0JiMzOAExIgYVFBYzMjY1NCYjwFBwcFACgFBwcFD9IQM+/MKrHioqHh4qKh70HioqHh4qKh70HisrHh0rKh7+MBQdHRQUHBwUAbgUHBwUFB0dFP4wHioqHh4qKh70HioqHh4qKh70HisrHh0rKh4DYHBQ/iBQcHBQAeBQcF/9XwKh/n8qHh4qKh4eKioeHioqHh4qKh4eKioeHioCQBwVjhUcHBWOFRwcFY4VHBwVjhUc/rAqHh4qKh4eKioeHioqHh4qKh4eKioeHioAAAABAQAAwAMAAcAACwAAAQcXBycHJzcnNxc3AwDMAjMDAzMCzDTMzAGVqAIrAgIrAqgrqKgAAQGAAEACgAJAAAsAACUnByc3JzcXNxcHFwJVqAIrAgIrAqgrqKhAzAIzAwMzAsw0zMwAAAEBgABAAoACQAALAAABFzcXBxcHJwcnNycBq6gCKwICKwKoK6ioAkDMAjMDAzMCzDTMzAABAQAAwAMAAcAACwAAJTcnNxc3FwcXBycHAQDMAjMDAzMCzDTMzOuoAisCAisCqCuoqAAAAgAP/+UD1AOqAAQACAAAEwEHATcFAScBSwOJPPx3PAOJ/Hc8A4kDqvx3PAOJPDz8dzwDiQAAAAADAIAAgAOAAwAAAwAHAAsAADc1IRUBIRUhESEVIYADAP0AAwD9AAMA/QCAgIABgIABgIAAAgBPAA8DsgNxABgALQAAJQcBDgEjIi4CNTQ+AjMyHgIVFAYHAQEiDgIVFB4CMzI+AjU0LgIjA7JY/t4lWTBBc1YxMVZzQUFzVTIcGQEi/dgxVkAlJUBWMTFWQCUlQFYxZ1gBIRkcMlVzQUFzVjExVnNBMFkm/uACuyVAVjExVkAlJUBWMTFWQCUAAAABAAAAAQAABhlWm18PPPUACwQAAAAAANSQRjkAAAAA1JBGOQAA/+UEAAPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAMBAAAAAAAAAAAAAAAAgAAAAQAAAAEAAEABAABgAQAAYAEAAEABAAADwQAAIAEAABPAAAAAAAKABQAHgDYAPIBDAEmAUABXAF2AbwAAAABAAAADACZAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABAAAAAEAAAAAAAIABwBFAAEAAAAAAAMABAAtAAEAAAAAAAQABABaAAEAAAAAAAUACwAMAAEAAAAAAAYABAA5AAEAAAAAAAoAGgBmAAMAAQQJAAEACAAEAAMAAQQJAAIADgBMAAMAAQQJAAMACAAxAAMAAQQJAAQACABeAAMAAQQJAAUAFgAXAAMAAQQJAAYACAA9AAMAAQQJAAoANACAS3ViZQBLAHUAYgBlVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwS3ViZQBLAHUAYgBlS3ViZQBLAHUAYgBlUmVndWxhcgBSAGUAZwB1AGwAYQByS3ViZQBLAHUAYgBlRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") format("truetype");font-weight:400;font-style:normal}.caret,.close,[class*=" kube-"],[class^=kube-]{font-family:Kube!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.kube-calendar:before{content:"\e900"}.caret.down:before,.kube-caret-down:before{content:"\e901"}.caret.left:before,.kube-caret-left:before{content:"\e902"}.caret.right:before,.kube-caret-right:before{content:"\e903"}.caret.up:before,.kube-caret-up:before{content:"\e904"}.close:before,.kube-close:before{content:"\e905"}.kube-menu:before{content:"\e906"}.kube-search:before{content:"\e907"}.gutters .column.push-left,.push-left{margin-right:auto}.gutters .column.push-right,.push-right{margin-left:auto}.gutters .column.push-center,.push-center{margin-left:auto;margin-right:auto}.gutters .column.push-middle,.push-middle{margin-top:auto;margin-bottom:auto}.push-bottom{margin-top:auto}@media (max-width:768px){.gutters .column.push-left-sm,.push-left-sm{margin-left:0}.gutters .column.push-center-sm,.push-center-sm{margin-left:auto;margin-right:auto}.push-top-sm{margin-top:0}}.align-middle{align-items:center}.align-right{justify-content:flex-end}.align-center{justify-content:center}@media (max-width:768px){.align-left-sm{justify-content:flex-start}}.float-right{float:right}.float-left{float:left}@media (max-width:768px){.float-left,.float-right{float:none}}.fixed{position:fixed;top:0;left:0;z-index:100;width:100%}.w5{width:5%}.w10{width:10%}.w15{width:15%}.w20{width:20%}.w25{width:25%}.w30{width:30%}.w35{width:35%}.w40{width:40%}.w45{width:45%}.w50{width:50%}.w55{width:55%}.w60{width:60%}.w65{width:65%}.w70{width:70%}.w75{width:75%}.w80{width:80%}.w85{width:85%}.w90{width:90%}.w95{width:95%}.w100{width:100%}.w-auto{width:auto}.w-small{width:480px}.w-medium{width:600px}.w-big{width:740px}.w-large{width:840px}@media (max-width:768px){.w-auto-sm{width:auto}.w100-sm,.w-big,.w-large,.w-medium,.w-small{width:100%}}.max-w5{max-width:5%}.max-w10{max-width:10%}.max-w15{max-width:15%}.max-w20{max-width:20%}.max-w25{max-width:25%}.max-w30{max-width:30%}.max-w35{max-width:35%}.max-w40{max-width:40%}.max-w45{max-width:45%}.max-w50{max-width:50%}.max-w55{max-width:55%}.max-w60{max-width:60%}.max-w65{max-width:65%}.max-w70{max-width:70%}.max-w75{max-width:75%}.max-w80{max-width:80%}.max-w85{max-width:85%}.max-w90{max-width:90%}.max-w95{max-width:95%}.max-w100{max-width:100%}.max-w-small{max-width:480px}.max-w-medium{max-width:600px}.max-w-big{max-width:740px}.max-w-large{max-width:840px}@media (max-width:768px){.max-w-auto-sm,.max-w-big,.max-w-large,.max-w-medium,.max-w-small{max-width:auto}}.min-w5{min-width:5%}.min-w10{min-width:10%}.min-w15{min-width:15%}.min-w20{min-width:20%}.min-w25{min-width:25%}.min-w30{min-width:30%}.min-w35{min-width:35%}.min-w40{min-width:40%}.min-w45{min-width:45%}.min-w50{min-width:50%}.min-w55{min-width:55%}.min-w60{min-width:60%}.min-w65{min-width:65%}.min-w70{min-width:70%}.min-w75{min-width:75%}.min-w80{min-width:80%}.min-w85{min-width:85%}.min-w90{min-width:90%}.min-w95{min-width:95%}.min-w100{min-width:100%}.h25{height:25%}.h50{height:50%}.h100{height:100%}.group:after{content:"";display:table;clear:both}.flex{display:flex}@media (max-width:768px){.flex-column-sm{flex-direction:column}.flex-w100-sm{flex:0 0 100%}}@media (max-width:768px) and (max-width:768px){.flex-w100-sm{flex:0 0 100%!important}}.invisible{visibility:hidden}.visible{visibility:visible}.display-block{display:block}.hide{display:none!important}@media (max-width:768px){.hide-sm{display:none!important}}@media (min-width:768px){.show-sm{display:none!important}}@media print{.hide-print{display:none!important}.show-print{display:block!important}}.no-scroll{overflow:hidden;position:fixed;top:0;left:0;width:100%;height:100%!important}.scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.video-container{height:0;padding-bottom:56.25%;position:relative;margin-bottom:16px}.video-container embed,.video-container iframe,.video-container object{position:absolute;top:0;left:0;width:100%!important;height:100%!important}.close{display:inline-block;min-height:16px;min-width:16px;line-height:16px;vertical-align:middle;text-align:center;font-size:12px;opacity:.6}.close:hover{opacity:1}.close.small{font-size:8px}.close.big{font-size:18px}.close.white{color:#fff}.caret{display:inline-block}.button .caret{margin-right:-8px}.overlay{position:fixed;z-index:200;top:0;left:0;right:0;bottom:0;background-color:hsla(0,0%,100%,.95)}.overlay>.close{position:fixed;top:1rem;right:1rem}@media print{*{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,h4{page-break-after:avoid}@page{margin:.5cm}}@keyframes slideUp{to{height:0;padding-top:0;padding-bottom:0}}@keyframes slideDown{0%{height:0;padding-top:0;padding-bottom:0}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes flipIn{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes flipOut{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}@keyframes slideOutRight{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}@keyframes slideOutUp{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.03,1.03,1.03)}to{transform:scaleX(1)}}@keyframes shake{15%{transform:translateX(.5rem)}30%{transform:translateX(-.4rem)}45%{transform:translateX(.3rem)}60%{transform:translateX(-.2rem)}75%{transform:translateX(.1rem)}90%{transform:translateX(0)}}.fadeIn{animation:fadeIn .25s}.fadeOut{animation:fadeOut .25s}.zoomIn{animation:zoomIn .2s}.zoomOut{animation:zoomOut .5s}.slideInRight{animation:slideInRight .5s}.slideInLeft{animation:slideInLeft .5s}.slideInDown{animation:slideInDown .5s}.slideOutLeft{animation:slideOutLeft .5s}.slideOutRight{animation:slideOutRight .5s}.slideOutUp{animation:slideOutUp .5s}.slideUp{overflow:hidden;animation:slideUp .2s ease-in-out}.slideDown{overflow:hidden;animation:slideDown 80ms ease-in-out}.flipIn{animation:flipIn .25s cubic-bezier(.5,-.5,.5,1.5)}.flipOut{animation:flipOut .5s cubic-bezier(.5,-.5,.5,1.5)}.rotate{animation:rotate .5s}.pulse{animation:pulse .25s 2}.shake{animation:shake .5s}.dropdown{position:absolute;z-index:100;top:0;right:0;width:280px;color:#000;font-size:15px;background:#fff;box-shadow:0 10px 25px rgba(0,0,0,.15);border-radius:3px;max-height:300px;margin:0;padding:0;overflow:hidden}.dropdown.dropdown-mobile{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;max-height:none;border:none}.dropdown .close{margin:20px auto}.dropdown.open{overflow:auto}.dropdown ul{list-style:none;margin:0}.dropdown ul li{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown ul li:last-child{border-bottom:none}.dropdown ul a{display:block;padding:12px;text-decoration:none;color:#000}.dropdown ul a:hover{background:rgba(0,0,0,.05)}.message{font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:20px;background:#e0e1e1;color:#313439;padding:1rem 2.5em .75rem 1rem;margin-bottom:24px;position:relative}.message a{color:inherit}.message h2,.message h3,.message h4,.message h5,.message h6{margin-bottom:0}.message .close{position:absolute;right:1rem;top:1.1rem}.message.error{background:#f03c69;color:#fff}.message.success{background:#35beb1;color:#fff}.message.warning{background:#f7ba45}.message.focus{background:#1c86f2;color:#fff}.message.black{background:#0d0d0e;color:#fff}.message.inverted{background:#fff}.modal-box{position:fixed;top:0;left:0;bottom:0;right:0;overflow-x:hidden;overflow-y:auto;z-index:200}.modal{position:relative;margin:16px auto auto;padding:0;background:#fff;box-shadow:0 10px 25px rgba(0,0,0,.15);border-radius:8px;color:#000}@media (max-width:768px){.modal input,.modal textarea{font-size:16px}}.modal .close{position:absolute;top:18px;right:16px;opacity:.3}.modal .close:hover{opacity:1}.modal-header{padding:24px 32px;font-size:18px;font-weight:700;border-bottom:1px solid rgba(0,0,0,.05)}.modal-header:empty{display:none}.modal-body{padding:36px 56px}@media (max-width:768px){.modal-body,.modal-header{padding:24px}}.offcanvas{background:#fff;position:fixed;padding:24px;height:100%;top:0;left:0;z-index:300;overflow-y:scroll}.offcanvas .close{position:absolute;top:8px;right:8px}.offcanvas-left{border-right:1px solid rgba(0,0,0,.1)}.offcanvas-right{left:auto;right:0;border-left:1px solid rgba(0,0,0,.1)}.offcanvas-push-body{position:relative}.tabs{margin-bottom:24px;font-size:14px}.tabs li.active a,.tabs li em{color:#313439;border:1px solid rgba(0,0,0,.1);cursor:default;text-decoration:none;background:none}.tabs a,.tabs em{position:relative;top:1px;font-style:normal;display:block;padding:.5rem 1rem;border:1px solid transparent;color:rgba(0,0,0,.5);text-decoration:none}.tabs a:hover{-moz-transition:all linear .2s;transition:all .2s linear;color:#313439;text-decoration:underline;background-color:#e0e1e1}@media (min-width:768px){.tabs ul{display:flex;margin-top:-1px;border-bottom:1px solid rgba(0,0,0,.1)}.tabs li.active a,.tabs li em{border-bottom:1px solid #fff}} \ No newline at end of file +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}*{margin:0;padding:0;outline:0;-webkit-overflow-scrolling:touch}audio,img,video{max-width:100%}img,video{height:auto}svg{max-height:100%}iframe{border:none}::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{vertical-align:middle;position:relative;bottom:.15rem;font-size:115%;margin-right:3px}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.inverted{color:#fff}.error{color:#f03c69}.success{color:#35beb1}.warning{color:#f7ba45}.focus{color:#1c86f2}.aluminum{color:#f8f8f8}.silver{color:#e0e1e1}.lightgray{color:#d4d4d4}.gray{color:#bdbdbd}.midgray{color:#676b72}.darkgray{color:#313439}.bg-black{background-color:#0d0d0e}.bg-inverted{background-color:#fff}.bg-error{background-color:#f03c69}.bg-success{background-color:#35beb1}.bg-warning{background-color:#f7ba45}.bg-focus{background-color:#1c86f2}.bg-aluminum{background-color:#f8f8f8}.bg-silver{background-color:#e0e1e1}.bg-lightgray{background-color:#d4d4d4}.bg-gray{background-color:#bdbdbd}.bg-midgray{background-color:#676b72}.bg-darkgray{background-color:#313439}.bg-highlight{background-color:#edf2ff}body,html{font-size:16px;line-height:24px}body{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;color:#313439;background-color:transparent}a{color:#3794de}a:hover{color:#f03c69}h1,h1.title,h2,h3,h4,h5,h6{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-weight:700;color:#0d0d0e;text-rendering:optimizeLegibility;margin-bottom:16px}h1.title{font-size:60px;line-height:64px;margin-bottom:8px}.h1,h1{font-size:48px;line-height:52px}.h2,h2{font-size:36px;line-height:40px}.h3,h3{font-size:24px}.h3,.h4,h3,h4{line-height:32px}.h4,h4{font-size:21px}.h5,h5{font-size:18px;line-height:28px}.h6,h6{font-size:16px;line-height:24px}.h1 a,.h2 a,.h3 a,.h4 a,.h5 a,.h6 a,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}blockquote+h2,blockquote+h3,blockquote+h4,blockquote+h5,blockquote+h6,dl+h2,dl+h3,dl+h4,dl+h5,dl+h6,figure+h2,figure+h3,figure+h4,figure+h5,figure+h6,form+h2,form+h3,form+h4,form+h5,form+h6,hr+h2,hr+h3,hr+h4,hr+h5,hr+h6,ol+h2,ol+h3,ol+h4,ol+h5,ol+h6,p+h2,p+h3,p+h4,p+h5,p+h6,pre+h2,pre+h3,pre+h4,pre+h5,pre+h6,table+h2,table+h3,table+h4,table+h5,table+h6,ul+h2,ul+h3,ul+h4,ul+h5,ul+h6{margin-top:24px}ol,ol ol,ol ul,ul,ul ol,ul ul{margin:0 0 0 24px}ol ol li{list-style-type:lower-alpha}ol ol ol li{list-style-type:lower-roman}nav ol,nav ul{margin:0;list-style:none}nav ol ol,nav ol ul,nav ul ol,nav ul ul{margin-left:24px}dl dt{font-weight:700}dd{margin-left:24px}address,blockquote,dl,fieldset,figure,form,hr,ol,p,pre,table,ul{margin-bottom:16px}hr{border:none;border-bottom:1px solid rgba(0,0,0,.1);margin-top:-1px}blockquote{padding-left:1rem;border-left:4px solid rgba(0,0,0,.1);font-style:italic;color:rgba(49,52,57,.65)}blockquote p{margin-bottom:.5rem}cite,figcaption,small,time{font-size:87.5%}cite{opacity:.6}abbr[title],dfn[title]{border-bottom:1px dotted rgba(0,0,0,.5);cursor:help}var{font-size:16px;opacity:.6;font-style:normal}code,kbd,mark,samp{position:relative;top:-1px;padding:4px 4px 2px;display:inline-block;line-height:1;color:rgba(49,52,57,.85)}code{background:#e0e1e1}mark{background:#f7ba45}samp{color:#fff;background:#1c86f2}kbd{border:1px solid rgba(0,0,0,.1)}sub,sup{font-size:x-small;line-height:0;margin-left:1rem/4;position:relative}sup{top:0}sub{bottom:1px}code,kbd,pre,samp,var{font-family:Consolas,Monaco,Courier New,monospace}code,kbd,mark,pre,samp,var{font-size:87.5%}pre,pre code{background:#f8f8f8;padding:0;top:0;display:block;line-height:20px;color:rgba(49,52,57,.85);overflow:none;white-space:pre-wrap}pre{padding:1rem}figcaption{opacity:.6}figure figcaption{position:relative;top:-1rem/2}figure pre{background:none;border:1px solid rgba(0,0,0,.1);border-radius:4px}figure .video-container,figure pre{margin-bottom:8px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}ul.unstyled{margin-left:0}ul.unstyled,ul.unstyled ul{list-style:none}.monospace{font-family:Consolas,Monaco,Courier New,monospace}.upper{text-transform:uppercase}.lower{text-transform:lowercase}.italic{font-style:italic!important}.strong{font-weight:700!important}.normal{font-weight:400!important}.muted{opacity:.55}a.muted{color:#0d0d0e}a.muted:hover{opacity:1}.black{color:#0d0d0e}.smaller{font-size:12px}.small,.smaller{line-height:20px}.small{font-size:14px}.big{font-size:18px;line-height:28px}.large{font-size:20px;line-height:32px}.end{margin-bottom:0!important}.highlight{background-color:#edf2ff}.nowrap,.nowrap td{white-space:nowrap}@media (min-width:768px) and (max-width:1024px){.columns-2,.columns-3,.columns-4{column-gap:24px}.columns-2{column-count:2}.columns-3{column-count:3}.columns-4{column-count:4}}.row{display:flex;flex-direction:row;flex-wrap:wrap}@media (max-width:768px){.row{flex-direction:column;flex-wrap:nowrap}}.row.gutters,.row.gutters>.row{margin-left:-2%}@media (max-width:768px){.row.gutters,.row.gutters>.row{margin-left:0}}.row.gutters>.col,.row.gutters>.row>.col{margin-left:2%}@media (max-width:768px){.row.gutters>.col,.row.gutters>.row>.col{margin-left:0}}.row.around{justify-content:space-around}.row.between{justify-content:space-between}.row.auto .col{flex-grow:1}.col-1{width:8.33333%}.offset-1{margin-left:8.33333%}.col-2{width:16.66667%}.offset-2{margin-left:16.66667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.33333%}.offset-4{margin-left:33.33333%}.col-5{width:41.66667%}.offset-5{margin-left:41.66667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.33333%}.offset-7{margin-left:58.33333%}.col-8{width:66.66667%}.offset-8{margin-left:66.66667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.33333%}.offset-10{margin-left:83.33333%}.col-11{width:91.66667%}.offset-11{margin-left:91.66667%}.col-12{width:100%}.offset-12{margin-left:100%}.gutters>.col-1{width:6.33333%}.gutters>.offset-1{margin-left:10.33333%!important}.gutters>.col-2{width:14.66667%}.gutters>.offset-2{margin-left:18.66667%!important}.gutters>.col-3{width:23%}.gutters>.offset-3{margin-left:27%!important}.gutters>.col-4{width:31.33333%}.gutters>.offset-4{margin-left:35.33333%!important}.gutters>.col-5{width:39.66667%}.gutters>.offset-5{margin-left:43.66667%!important}.gutters>.col-6{width:48%}.gutters>.offset-6{margin-left:52%!important}.gutters>.col-7{width:56.33333%}.gutters>.offset-7{margin-left:60.33333%!important}.gutters>.col-8{width:64.66667%}.gutters>.offset-8{margin-left:68.66667%!important}.gutters>.col-9{width:73%}.gutters>.offset-9{margin-left:77%!important}.gutters>.col-10{width:81.33333%}.gutters>.offset-10{margin-left:85.33333%!important}.gutters>.col-11{width:89.66667%}.gutters>.offset-11{margin-left:93.66667%!important}.gutters>.col-12{width:98%}.gutters>.offset-12{margin-left:102%!important}@media (max-width:768px){[class*=" offset-"],[class^=offset-]{margin-left:0}}.first{order:-1}.last{order:1}@media (max-width:768px){.row .col{margin-left:0;width:100%}.row.gutters .col{margin-bottom:16px}.first-sm{order:-1}.last-sm{order:1}}table{border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;empty-cells:show;font-size:15px;line-height:24px}table caption{text-align:left;font-size:14px;font-weight:500;color:#676b72}th{text-align:left;font-weight:700;vertical-align:bottom}td{vertical-align:top}td.align-middle,tr.align-middle td{vertical-align:middle}td,th{padding:1rem;border-bottom:1px solid rgba(0,0,0,.05)}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}tfoot td,tfoot th{color:rgba(49,52,57,.5)}table.bordered td,table.bordered th{border:1px solid rgba(0,0,0,.05)}table.striped tr:nth-child(odd) td{background:#f8f8f8}table.bordered td:first-child,table.bordered th:first-child,table.striped td:first-child,table.striped th:first-child{padding-left:1rem}table.bordered td:last-child,table.bordered th:last-child,table.striped td:last-child,table.striped th:last-child{padding-right:1rem}table.unstyled td,table.unstyled th{border:none;padding:0}fieldset{font-family:inherit;border:1px solid rgba(0,0,0,.1);padding:2rem;margin-bottom:2rem;margin-top:2rem}legend{font-weight:700;font-size:12px;text-transform:uppercase;padding:0 1rem;margin-left:-1rem;top:2px;position:relative;line-height:0}input,select,textarea{display:block;width:100%;font-family:inherit;font-size:15px;height:40px;outline:none;vertical-align:middle;background-color:#fff;border:1px solid #d4d4d4;border-radius:3px;box-shadow:none;padding:0 12px}input.small,select.small,textarea.small{height:36px;font-size:13px;padding:0 12px;border-radius:3px}input.big,select.big,textarea.big{height:48px;font-size:17px;padding:0 12px;border-radius:3px}input:focus,select:focus,textarea:focus{outline:none;background-color:#fff;border-color:#1c86f2;box-shadow:inset 0 0 1px #1c86f2}input.error,select.error,textarea.error{background-color:rgba(240,60,105,.1);border:1px solid #f583a0}input.error:focus,select.error:focus,textarea.error:focus{border-color:#f03c69;box-shadow:inset 0 0 1px #f03c69}input.success,select.success,textarea.success{background-color:rgba(53,190,177,.1);border:1px solid #6ad5cb}input.success:focus,select.success:focus,textarea.success:focus{border-color:#35beb1;box-shadow:inset 0 0 1px #35beb1}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{resize:none;opacity:.6;cursor:default;font-style:italic;color:rgba(0,0,0,.5)}select{-webkit-appearance:none;background-image:url('data:image/svg+xml;utf8,');background-repeat:no-repeat;background-position:right 1rem center}select[multiple]{background-image:none;height:auto;padding:.5rem .75rem}textarea{height:auto;padding:8px 12px;line-height:24px;vertical-align:top}input[type=file]{width:auto;border:none;padding:0;height:auto;background:none;box-shadow:none;display:inline-block}input.search,input[type=search]{background-repeat:no-repeat;background-position:8px 53%;background-image:url('data:image/svg+xml;utf8,');padding-left:32px}input[type=checkbox],input[type=radio]{display:inline-block;width:auto;height:auto;padding:0}label{display:block;color:#313439;margin-bottom:4px;font-size:15px}label.checkbox,label .desc,label .error,label .success{text-transform:none;font-weight:400}label.checkbox{font-size:16px;line-height:24px;cursor:pointer;color:inherit}label.checkbox input{margin-top:0}.form-checkboxes label.checkbox{display:inline-block;margin-right:16px}.req{position:relative;top:1px;font-weight:700;color:#f03c69;font-size:110%}.desc{color:rgba(49,52,57,.5);font-size:12px;line-height:20px}span.desc{margin-left:4px}div.desc{margin-top:4px;margin-bottom:-8px}.form-buttons .button,.form-buttons button{margin-right:8px}.form-item,form{margin-bottom:2rem}.form .row:last-child .form-item,.form>.form-item:last-child{margin-bottom:0}.form span.error,.form span.success{font-size:12px;line-height:20px;margin-left:4px}.form-inline input,.form-inline select,.form-inline textarea{display:inline-block;width:auto}.append,.prepend{display:flex}.append input,.prepend input{flex:1}.append .button,.append span,.prepend .button,.prepend span{flex-shrink:0}.append span,.prepend span{display:flex;flex-direction:column;justify-content:center;font-weight:400;border:1px solid #d4d4d4;background-color:#f8f8f8;padding:0 .875rem;color:rgba(0,0,0,.5);font-size:12px;white-space:nowrap}.prepend input{border-radius:0 3px 3px 0}.prepend .button{margin-right:-1px;border-radius:3px 0 0 3px!important}.prepend span{border-right:none}.append input,.prepend span{border-radius:3px 0 0 3px}.append .button{margin-left:-1px;border-radius:0 3px 3px 0!important}.append span{border-left:none;border-radius:0 3px 3px 0}.button,button{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:15px;color:#fff;background-color:#1c86f2;border-radius:3px;min-height:40px;padding:8px 20px;font-weight:500;text-decoration:none;cursor:pointer;display:inline-block;line-height:20px;border:1px solid transparent;vertical-align:middle;-webkit-appearance:none}.button i,button i{position:relative;top:1px;margin:0 2px}input[type=submit]{width:auto}.button:hover,button:hover{outline:none;text-decoration:none;color:#fff;background-color:#4ca0f5}.button.disabled,.button:disabled{cursor:default;font-style:normal;color:hsla(0,0%,100%,.7);background-color:rgba(28,134,242,.7)}.button.small{font-size:13px;min-height:36px;padding:6px 20px;border-radius:3px}.button.big{font-size:17px;min-height:48px;padding:13px 24px;border-radius:3px}.button.large{font-size:19px;min-height:56px;padding:20px 36px;border-radius:3px}.button.outline{background:none;border-width:2px;border-color:#1c86f2;color:#1c86f2}.button.outline:hover{background:none;color:rgba(28,134,242,.6);border-color:rgba(28,134,242,.5)}.button.outline.disabled,.button.outline:disabled{background:none;color:rgba(28,134,242,.7);border-color:rgba(28,134,242,.5)}.button.inverted,.button.inverted:hover{color:#000;background-color:#fff}.button.inverted.disabled,.button.inverted:disabled{color:rgba(0,0,0,.7);background-color:hsla(0,0%,100%,.7)}.button.inverted.outline{background:none;color:#fff;border-color:#fff}.button.inverted.outline:hover{color:hsla(0,0%,100%,.6);border-color:hsla(0,0%,100%,.5)}.button.inverted.outline.disabled,.button.inverted.outline:disabled{background:none;color:hsla(0,0%,100%,.7);border-color:hsla(0,0%,100%,.5)}.button.inverted:hover{opacity:.7}.button.round{border-radius:56px}.button.raised{box-shadow:0 1px 3px rgba(0,0,0,.3)}.button.upper{text-transform:uppercase;letter-spacing:.04em;font-size:13px}.button.upper.small{font-size:11px}.button.upper.big{font-size:13px}.button.upper.large{font-size:15px}.button.secondary{color:#fff;background-color:#313439}.button.secondary:hover{color:#fff;background-color:#606670}.button.secondary.disabled,.button.secondary:disabled{color:hsla(0,0%,100%,.7);background-color:rgba(49,52,57,.7)}.button.secondary.outline{background:none;color:#313439;border-color:#313439}.button.secondary.outline:hover{color:rgba(49,52,57,.6);border-color:rgba(49,52,57,.5)}.button.secondary.outline.disabled,.button.secondary.outline:disabled{background:none;color:rgba(49,52,57,.7);border-color:rgba(49,52,57,.5)}.label{display:inline-block;font-size:13px;background:#e0e1e1;line-height:18px;padding:0 10px;font-weight:500;color:#313439;border:1px solid transparent;vertical-align:middle;text-decoration:none;border-radius:4px}.label a,.label a:hover{color:inherit;text-decoration:none}.label.big{font-size:14px;line-height:24px;padding:0 12px}.label.upper{text-transform:uppercase;font-size:11px}.label.outline{background:none;border-color:#bdbdbd}.label.badge{text-align:center;border-radius:64px;padding:0 6px}.label.badge.big{padding:0 8px}.label.tag{padding:0;background:none;border:none;text-transform:uppercase;font-size:11px}.label.tag.big{font-size:13px}.label.success{background:#35beb1;color:#fff}.label.success.outline,.label.success.tag{background:none;border-color:#35beb1;color:#35beb1}.label.error{background:#f03c69;color:#fff}.label.error.outline,.label.error.tag{background:none;border-color:#f03c69;color:#f03c69}.label.warning{background:#f7ba45;color:#0d0d0e}.label.warning.outline,.label.warning.tag{background:none;border-color:#f7ba45;color:#f7ba45}.label.focus{background:#1c86f2;color:#fff}.label.focus.outline,.label.focus.tag{background:none;border-color:#1c86f2;color:#1c86f2}.label.black{background:#0d0d0e;color:#fff}.label.black.outline,.label.black.tag{background:none;border-color:#0d0d0e;color:#0d0d0e}.label.inverted{background:#fff;color:#0d0d0e}.label.inverted.outline,.label.inverted.tag{background:none;border-color:#fff;color:#fff}.breadcrumbs{font-size:14px;margin-bottom:24px}.breadcrumbs ul{display:flex;align-items:center}.breadcrumbs.push-center ul{justify-content:center}.breadcrumbs a,.breadcrumbs span{font-style:normal;padding:0 10px;display:inline-block;white-space:nowrap}.breadcrumbs li:after{display:inline-block;content:"/";color:rgba(0,0,0,.3)}.breadcrumbs li:last-child:after{display:none}.breadcrumbs li:first-child a,.breadcrumbs li:first-child span{padding-left:0}.breadcrumbs li.active a{color:#313439;text-decoration:none;cursor:text}.pagination{margin:24px 0;font-size:14px}.pagination ul{display:flex;margin:0}.pagination.align-center ul{justify-content:center}.pagination a,.pagination span{border-radius:3px;display:inline-block;padding:8px 12px;line-height:1;white-space:nowrap;border:1px solid transparent}.pagination a{text-decoration:none;color:#313439}.pagination a:hover,.pagination li.active a,.pagination span{color:rgba(0,0,0,.5);border-color:#e0e1e1}.pagination li.active a,.pagination span{cursor:text}.pagination.upper{font-size:12px}.pager span{line-height:24px}.pager a,.pager span{padding-left:16px;padding-right:16px;border-radius:64px;border-color:rgba(0,0,0,.1)}.pager li{flex-basis:50%}.pager li.next{text-align:right}.pager.align-center li{flex-basis:auto;margin-left:4px;margin-right:4px}.pager.flat a,.pager.flat span{border:none;display:block;padding:0}.pager.flat a{font-weight:700}.pager.flat a:hover{background:none;text-decoration:underline}@media (max-width:768px){.pager.flat ul{flex-direction:column}.pager.flat li{flex-basis:100%;margin-bottom:8px;text-align:left}}@font-face{font-family:Kube;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfgAAAC8AAAAYGNtYXAXVtKOAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZsMn2SAAAAF4AAADeGhlYWQMP9EUAAAE8AAAADZoaGVhB8IDzQAABSgAAAAkaG10eCYABd4AAAVMAAAAMGxvY2EFWASuAAAFfAAAABptYXhwABcAmwAABZgAAAAgbmFtZfMJxocAAAW4AAABYnBvc3QAAwAAAAAHHAAAACAAAwPHAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBwPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qf//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAKAAAAAAQAA8AADwAUACQANABEAFYAaAB4AIgAmAAAEyIGFREUFjMhMjY1ETQmIwUhESEREzgBMSIGFRQWMzI2NTQmIzM4ATEiBhUUFjMyNjU0JiMzOAExIgYVFBYzMjY1NCYjATIWHQEUBiMiJj0BNDYzOAExITIWHQEUBiMiJj0BNDYzOAExATgBMSIGFRQWMzI2NTQmIzM4ATEiBhUUFjMyNjU0JiMzOAExIgYVFBYzMjY1NCYjwFBwcFACgFBwcFD9IQM+/MKrHioqHh4qKh70HioqHh4qKh70HisrHh0rKh7+MBQdHRQUHBwUAbgUHBwUFB0dFP4wHioqHh4qKh70HioqHh4qKh70HisrHh0rKh4DYHBQ/iBQcHBQAeBQcF/9XwKh/n8qHh4qKh4eKioeHioqHh4qKh4eKioeHioCQBwVjhUcHBWOFRwcFY4VHBwVjhUc/rAqHh4qKh4eKioeHioqHh4qKh4eKioeHioAAAABAQAAwAMAAcAACwAAAQcXBycHJzcnNxc3AwDMAjMDAzMCzDTMzAGVqAIrAgIrAqgrqKgAAQGAAEACgAJAAAsAACUnByc3JzcXNxcHFwJVqAIrAgIrAqgrqKhAzAIzAwMzAsw0zMwAAAEBgABAAoACQAALAAABFzcXBxcHJwcnNycBq6gCKwICKwKoK6ioAkDMAjMDAzMCzDTMzAABAQAAwAMAAcAACwAAJTcnNxc3FwcXBycHAQDMAjMDAzMCzDTMzOuoAisCAisCqCuoqAAAAgAP/+UD1AOqAAQACAAAEwEHATcFAScBSwOJPPx3PAOJ/Hc8A4kDqvx3PAOJPDz8dzwDiQAAAAADAIAAgAOAAwAAAwAHAAsAADc1IRUBIRUhESEVIYADAP0AAwD9AAMA/QCAgIABgIABgIAAAgBPAA8DsgNxABgALQAAJQcBDgEjIi4CNTQ+AjMyHgIVFAYHAQEiDgIVFB4CMzI+AjU0LgIjA7JY/t4lWTBBc1YxMVZzQUFzVTIcGQEi/dgxVkAlJUBWMTFWQCUlQFYxZ1gBIRkcMlVzQUFzVjExVnNBMFkm/uACuyVAVjExVkAlJUBWMTFWQCUAAAABAAAAAQAABhlWm18PPPUACwQAAAAAANSQRjkAAAAA1JBGOQAA/+UEAAPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAMBAAAAAAAAAAAAAAAAgAAAAQAAAAEAAEABAABgAQAAYAEAAEABAAADwQAAIAEAABPAAAAAAAKABQAHgDYAPIBDAEmAUABXAF2AbwAAAABAAAADACZAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABAAAAAEAAAAAAAIABwBFAAEAAAAAAAMABAAtAAEAAAAAAAQABABaAAEAAAAAAAUACwAMAAEAAAAAAAYABAA5AAEAAAAAAAoAGgBmAAMAAQQJAAEACAAEAAMAAQQJAAIADgBMAAMAAQQJAAMACAAxAAMAAQQJAAQACABeAAMAAQQJAAUAFgAXAAMAAQQJAAYACAA9AAMAAQQJAAoANACAS3ViZQBLAHUAYgBlVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwS3ViZQBLAHUAYgBlS3ViZQBLAHUAYgBlUmVndWxhcgBSAGUAZwB1AGwAYQByS3ViZQBLAHUAYgBlRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==") format("truetype");font-weight:400;font-style:normal}.caret,.close,[class*=" kube-"],[class^=kube-]{font-family:Kube!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.kube-calendar:before{content:"\e900"}.caret.down:before,.kube-caret-down:before{content:"\e901"}.caret.left:before,.kube-caret-left:before{content:"\e902"}.caret.right:before,.kube-caret-right:before{content:"\e903"}.caret.up:before,.kube-caret-up:before{content:"\e904"}.close:before,.kube-close:before{content:"\e905"}.kube-menu:before{content:"\e906"}.kube-search:before{content:"\e907"}.gutters .column.push-left,.push-left{margin-right:auto}.gutters .column.push-right,.push-right{margin-left:auto}.gutters .column.push-center,.push-center{margin-left:auto;margin-right:auto}.gutters .column.push-middle,.push-middle{margin-top:auto;margin-bottom:auto}.push-bottom{margin-top:auto}@media (max-width:768px){.gutters .column.push-left-sm,.push-left-sm{margin-left:0}.gutters .column.push-center-sm,.push-center-sm{margin-left:auto;margin-right:auto}.push-top-sm{margin-top:0}}.align-middle{align-items:center}.align-right{justify-content:flex-end}.align-center{justify-content:center}@media (max-width:768px){.align-left-sm{justify-content:flex-start}}.float-right{float:right}.float-left{float:left}@media (max-width:768px){.float-left,.float-right{float:none}}.fixed{position:fixed;top:0;left:0;z-index:100;width:100%}.w5{width:5%}.w10{width:10%}.w15{width:15%}.w20{width:20%}.w25{width:25%}.w30{width:30%}.w35{width:35%}.w40{width:40%}.w45{width:45%}.w50{width:50%}.w55{width:55%}.w60{width:60%}.w65{width:65%}.w70{width:70%}.w75{width:75%}.w80{width:80%}.w85{width:85%}.w90{width:90%}.w95{width:95%}.w100{width:100%}.w-auto{width:auto}.w-small{width:480px}.w-medium{width:600px}.w-big{width:740px}.w-large{width:840px}@media (max-width:768px){.w-auto-sm{width:auto}.w100-sm,.w-big,.w-large,.w-medium,.w-small{width:100%}}.max-w5{max-width:5%}.max-w10{max-width:10%}.max-w15{max-width:15%}.max-w20{max-width:20%}.max-w25{max-width:25%}.max-w30{max-width:30%}.max-w35{max-width:35%}.max-w40{max-width:40%}.max-w45{max-width:45%}.max-w50{max-width:50%}.max-w55{max-width:55%}.max-w60{max-width:60%}.max-w65{max-width:65%}.max-w70{max-width:70%}.max-w75{max-width:75%}.max-w80{max-width:80%}.max-w85{max-width:85%}.max-w90{max-width:90%}.max-w95{max-width:95%}.max-w100{max-width:100%}.max-w-small{max-width:480px}.max-w-medium{max-width:600px}.max-w-big{max-width:740px}.max-w-large{max-width:840px}@media (max-width:768px){.max-w-auto-sm,.max-w-big,.max-w-large,.max-w-medium,.max-w-small{max-width:auto}}.min-w5{min-width:5%}.min-w10{min-width:10%}.min-w15{min-width:15%}.min-w20{min-width:20%}.min-w25{min-width:25%}.min-w30{min-width:30%}.min-w35{min-width:35%}.min-w40{min-width:40%}.min-w45{min-width:45%}.min-w50{min-width:50%}.min-w55{min-width:55%}.min-w60{min-width:60%}.min-w65{min-width:65%}.min-w70{min-width:70%}.min-w75{min-width:75%}.min-w80{min-width:80%}.min-w85{min-width:85%}.min-w90{min-width:90%}.min-w95{min-width:95%}.min-w100{min-width:100%}.h25{height:25%}.h50{height:50%}.h100{height:100%}.group:after{content:"";display:table;clear:both}.flex{display:flex}@media (max-width:768px){.flex-column-sm{flex-direction:column}.flex-w100-sm{flex:0 0 100%}}@media (max-width:768px) and (max-width:768px){.flex-w100-sm{flex:0 0 100%!important}}.invisible{visibility:hidden}.visible{visibility:visible}.display-block{display:block}.hide{display:none!important}@media (max-width:768px){.hide-sm{display:none!important}}@media (min-width:768px){.show-sm{display:none!important}}@media print{.hide-print{display:none!important}.show-print{display:block!important}}.no-scroll{overflow:hidden;position:fixed;top:0;left:0;width:100%;height:100%!important}.scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.video-container{height:0;padding-bottom:56.25%;position:relative;margin-bottom:16px}.video-container embed,.video-container iframe,.video-container object{position:absolute;top:0;left:0;width:100%!important;height:100%!important}.close{display:inline-block;min-height:16px;min-width:16px;line-height:16px;vertical-align:middle;text-align:center;font-size:12px;opacity:.6}.close:hover{opacity:1}.close.small{font-size:8px}.close.big{font-size:18px}.close.white{color:#fff}.caret{display:inline-block}.button .caret{margin-right:-8px}.overlay{position:fixed;z-index:200;top:0;left:0;right:0;bottom:0;background-color:hsla(0,0%,100%,.95)}.overlay>.close{position:fixed;top:1rem;right:1rem}@media print{*{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,h4{page-break-after:avoid}@page{margin:.5cm}}@keyframes slideUp{to{height:0;padding-top:0;padding-bottom:0}}@keyframes slideDown{0%{height:0;padding-top:0;padding-bottom:0}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes flipIn{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes flipOut{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes slideInRight{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes slideInLeft{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}@keyframes slideInDown{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}@keyframes slideOutLeft{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}@keyframes slideOutRight{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}@keyframes slideOutUp{0%{transform:translateZ(0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.03,1.03,1.03)}to{transform:scaleX(1)}}@keyframes shake{15%{transform:translateX(.5rem)}30%{transform:translateX(-.4rem)}45%{transform:translateX(.3rem)}60%{transform:translateX(-.2rem)}75%{transform:translateX(.1rem)}90%{transform:translateX(0)}}.fadeIn{animation:fadeIn .25s}.fadeOut{animation:fadeOut .25s}.zoomIn{animation:zoomIn .2s}.zoomOut{animation:zoomOut .5s}.slideInRight{animation:slideInRight .5s}.slideInLeft{animation:slideInLeft .5s}.slideInDown{animation:slideInDown .5s}.slideOutLeft{animation:slideOutLeft .5s}.slideOutRight{animation:slideOutRight .5s}.slideOutUp{animation:slideOutUp .5s}.slideUp{overflow:hidden;animation:slideUp .2s ease-in-out}.slideDown{overflow:hidden;animation:slideDown 80ms ease-in-out}.flipIn{animation:flipIn .25s cubic-bezier(.5,-.5,.5,1.5)}.flipOut{animation:flipOut .5s cubic-bezier(.5,-.5,.5,1.5)}.rotate{animation:rotate .5s}.pulse{animation:pulse .25s 2}.shake{animation:shake .5s}.dropdown{position:absolute;z-index:100;top:0;right:0;width:280px;color:#000;font-size:15px;background:#fff;box-shadow:0 10px 25px rgba(0,0,0,.15);border-radius:3px;max-height:300px;margin:0;padding:0;overflow:hidden}.dropdown.dropdown-mobile{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;max-height:none;border:none}.dropdown .close{margin:20px auto}.dropdown.open{overflow:auto}.dropdown ul{list-style:none;margin:0}.dropdown ul li{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown ul li:last-child{border-bottom:none}.dropdown ul a{display:block;padding:12px;text-decoration:none;color:#000}.dropdown ul a:hover{background:rgba(0,0,0,.05)}.message{font-family:Consolas,Monaco,Courier New,monospace;font-size:14px;line-height:20px;background:#e0e1e1;color:#313439;padding:1rem 2.5em .75rem 1rem;margin-bottom:24px;position:relative}.message a{color:inherit}.message h2,.message h3,.message h4,.message h5,.message h6{margin-bottom:0}.message .close{position:absolute;right:1rem;top:1.1rem}.message.error{background:#f03c69;color:#fff}.message.success{background:#35beb1;color:#fff}.message.warning{background:#f7ba45}.message.focus{background:#1c86f2;color:#fff}.message.black{background:#0d0d0e;color:#fff}.message.inverted{background:#fff}.modal-box{position:fixed;top:0;left:0;bottom:0;right:0;overflow-x:hidden;overflow-y:auto;z-index:200}.modal{position:relative;margin:16px auto auto;padding:0;background:#fff;box-shadow:0 10px 25px rgba(0,0,0,.15);border-radius:8px;color:#000}@media (max-width:768px){.modal input,.modal textarea{font-size:16px}}.modal .close{position:absolute;top:18px;right:16px;opacity:.3}.modal .close:hover{opacity:1}.modal-header{padding:24px 32px;font-size:18px;font-weight:700;border-bottom:1px solid rgba(0,0,0,.05)}.modal-header:empty{display:none}.modal-body{padding:36px 56px}@media (max-width:768px){.modal-body,.modal-header{padding:24px}}.offcanvas{background:#fff;position:fixed;padding:24px;height:100%;top:0;left:0;z-index:300;overflow-y:scroll}.offcanvas .close{position:absolute;top:8px;right:8px}.offcanvas-left{border-right:1px solid rgba(0,0,0,.1)}.offcanvas-right{left:auto;right:0;border-left:1px solid rgba(0,0,0,.1)}.offcanvas-push-body{position:relative}.tabs{margin-bottom:24px;font-size:14px}.tabs li.active a,.tabs li em{color:#313439;border:1px solid rgba(0,0,0,.1);cursor:default;text-decoration:none;background:none}.tabs a,.tabs em{position:relative;top:1px;font-style:normal;display:block;padding:.5rem 1rem;border:1px solid transparent;color:rgba(0,0,0,.5);text-decoration:none}.tabs a:hover{-moz-transition:all .2s linear;transition:all .2s linear;color:#313439;text-decoration:underline;background-color:#e0e1e1}@media (min-width:768px){.tabs ul{display:flex;margin-top:-1px;border-bottom:1px solid rgba(0,0,0,.1)}.tabs li.active a,.tabs li em{border-bottom:1px solid #fff}} \ No newline at end of file diff --git a/packages/cssnano-preset-default/src/__tests__/integrations/picnic-v6.4.0.css b/packages/cssnano-preset-default/src/__tests__/integrations/picnic-v6.4.0.css index 8fef54c8e..7588fbe7a 100644 --- a/packages/cssnano-preset-default/src/__tests__/integrations/picnic-v6.4.0.css +++ b/packages/cssnano-preset-default/src/__tests__/integrations/picnic-v6.4.0.css @@ -1 +1 @@ -@charset "UTF-8";html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset,legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:inherit}body,html{font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;height:100%}body{color:#111;font-size:1.1em;line-height:1.5;background:#fff}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;padding:.6em 0}li{margin:0 0 .3em}a{color:#0074d9;text-decoration:none;box-shadow:none;transition:all .3s}code{font-size:.8em}code,pre{padding:.3em .6em;background:#f5f5f5}pre{text-align:left;border-radius:.2em}pre code{padding:0}blockquote{padding:0 0 0 1em;margin:0 0 0 .1em;box-shadow:inset 5px 0 rgba(17,17,17,.3)}label{cursor:pointer}[class*=" icon-"]:before,[class^=icon-]:before{margin:0 .6em 0 0}i[class*=" icon-"]:before,i[class^=icon-]:before{margin:0}.button,.dropimage,.label,[data-tooltip]:after,[type=submit],button{display:inline-block;text-align:center;margin:0;padding:.3em .9em;vertical-align:middle;background:#0074d9;color:#fff;border:0;border-radius:.2em;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.success.button,.success.dropimage,.success.label,.success[data-tooltip]:after,.success[type=submit],button.success{background:#2ecc40}.warning.button,.warning.dropimage,.warning.label,.warning[data-tooltip]:after,.warning[type=submit],button.warning{background:#ff851b}.error.button,.error.dropimage,.error.label,.error[data-tooltip]:after,.error[type=submit],button.error{background:#ff4136}.pseudo.button,.pseudo.dropimage,.pseudo.label,.pseudo[data-tooltip]:after,.pseudo[type=submit],button.pseudo{background:transparent;color:#111}.label,[data-tooltip]:after{font-size:.6em;padding:.4em .6em;margin-left:1em;line-height:1}.button,.dropimage,[type=submit],button{margin:.3em 0;cursor:pointer;transition:all .3s;border-radius:.2em;height:auto;box-shadow:inset 0 0 transparent}.button:focus,.button:hover,.dropimage:focus,.dropimage:hover,[type=submit]:focus,[type=submit]:hover,button:focus,button:hover{box-shadow:inset 0 0 0 99em hsla(0,0%,100%,.2);border:0}.pseudo.button:focus,.pseudo.button:hover,.pseudo.dropimage:focus,.pseudo.dropimage:hover,.pseudo[type=submit]:focus,.pseudo[type=submit]:hover,button.pseudo:focus,button.pseudo:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.1)}.active.button,.active.dropimage,.active[type=submit],.button:active,.dropimage:active,.pseudo.button:active,.pseudo.dropimage:active,.pseudo[type=submit]:active,[type=submit]:active,button.active,button.pseudo:active,button:active{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[disabled].button,[disabled].dropimage,[disabled][type=submit],button[disabled]{cursor:default;box-shadow:none;background:#bbb}:checked+.toggle,:checked+.toggle:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[type]+.toggle{padding:.3em .9em;margin-right:0}[type]+.toggle:after,[type]+.toggle:before{display:none}.select select,input,textarea{line-height:1.5;margin:0;height:2.1em;padding:.3em .6em;border:1px solid #ccc;background-color:#fff;border-radius:.2em;transition:all .3s;width:100%}.select select:focus,input:focus,textarea:focus{border:1px solid #0074d9;outline:0}textarea{height:auto}[type=color],[type=file]{cursor:pointer}[type=file]{height:auto}select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiPjxwYXRoIGQ9Ik0wIDFsMSAyIDEtMnoiLz48L3N2Zz4=) no-repeat scroll 95%/10px 15px;background-position:calc(100% - 15px) 50%;border:1px solid #ccc;border-radius:.2em;cursor:pointer;width:100%;height:2.1em;box-sizing:border-box;padding:.3em .45em;transition:all .3s;-moz-appearance:none;-webkit-appearance:none;appearance:none}select::-ms-expand{display:none}select:active,select:focus{border:1px solid #0074d9;transition:outline 0s}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #111}select option{font-size:inherit;padding:.3em .45em}[type=checkbox],[type=radio]{opacity:0;width:0;position:absolute;display:inline-block}[type=checkbox]+.checkable:hover:before,[type=checkbox]:focus+.checkable:before,[type=radio]+.checkable:hover:before,[type=radio]:focus+.checkable:before{border:1px solid #0074d9}[type=checkbox]+.checkable,[type=radio]+.checkable{position:relative;cursor:pointer;padding-left:1.5em;margin-right:.6em}[type=checkbox]+.checkable:after,[type=checkbox]+.checkable:before,[type=radio]+.checkable:after,[type=radio]+.checkable:before{content:"";position:absolute;display:inline-block;left:0;top:50%;transform:translateY(-50%);font-size:1em;line-height:1em;color:transparent;font-family:sans;text-align:center;box-sizing:border-box;width:1em;height:1em;border-radius:50%;transition:all .3s}[type=checkbox]+.checkable:before,[type=radio]+.checkable:before{border:1px solid #aaa}[type=checkbox]:checked+.checkable:after,[type=radio]:checked+.checkable:after{background:#555;transform:scale(.5) translateY(-100%)}[type=checkbox]+.checkable:before{border-radius:.2em}[type=checkbox]+.checkable:after{content:"✔";background:none;transform:scale(2) translateY(-25%);visibility:hidden;opacity:0}[type=checkbox]:checked+.checkable:after{color:#111;background:none;transform:translateY(-50%);transition:all .3s;visibility:visible;opacity:1}table{text-align:left}td,th{padding:.3em 2.4em .3em .6em}th{text-align:left;font-weight:900;color:#fff;background-color:#0074d9}.success th{background-color:#2ecc40}.warning th{background-color:#ff851b}.error th{background-color:#ff4136}.dull th{background-color:#aaa}tr:nth-child(2n){background:rgba(0,0,0,.05)}.flex{display:-ms-flexbox;display:flex;margin-left:-.6em;width:calc(100% + .6em);flex-wrap:wrap;transition:all .3s ease}.flex>*{box-sizing:border-box;flex:1 1 auto;padding-left:.6em;padding-bottom:.6em}.flex[class*=eight]>*,.flex[class*=eleven]>*,.flex[class*=five]>*,.flex[class*=four]>*,.flex[class*=nine]>*,.flex[class*=one]>*,.flex[class*=seven]>*,.flex[class*=six]>*,.flex[class*=ten]>*,.flex[class*=three]>*,.flex[class*=twelve]>*,.flex[class*=two]>*{flex-grow:0}.flex.grow>*{flex-grow:1}.center{justify-content:center}.one>*{width:100%}.two>*{width:50%}.three>*{width:33.33333%}.four>*{width:25%}.five>*{width:20%}.six>*{width:16.66666%}.seven>*{width:14.28571%}.eight>*{width:12.5%}.nine>*{width:11.11111%}.ten>*{width:10%}.eleven>*{width:9.09091%}.twelve>*{width:8.33333%}@media (min-width:500px){.one-500>*{width:100%}.two-500>*{width:50%}.three-500>*{width:33.33333%}.four-500>*{width:25%}.five-500>*{width:20%}.six-500>*{width:16.66666%}.seven-500>*{width:14.28571%}.eight-500>*{width:12.5%}.nine-500>*{width:11.11111%}.ten-500>*{width:10%}.eleven-500>*{width:9.09091%}.twelve-500>*{width:8.33333%}}@media (min-width:600px){.one-600>*{width:100%}.two-600>*{width:50%}.three-600>*{width:33.33333%}.four-600>*{width:25%}.five-600>*{width:20%}.six-600>*{width:16.66666%}.seven-600>*{width:14.28571%}.eight-600>*{width:12.5%}.nine-600>*{width:11.11111%}.ten-600>*{width:10%}.eleven-600>*{width:9.09091%}.twelve-600>*{width:8.33333%}}@media (min-width:700px){.one-700>*{width:100%}.two-700>*{width:50%}.three-700>*{width:33.33333%}.four-700>*{width:25%}.five-700>*{width:20%}.six-700>*{width:16.66666%}.seven-700>*{width:14.28571%}.eight-700>*{width:12.5%}.nine-700>*{width:11.11111%}.ten-700>*{width:10%}.eleven-700>*{width:9.09091%}.twelve-700>*{width:8.33333%}}@media (min-width:800px){.one-800>*{width:100%}.two-800>*{width:50%}.three-800>*{width:33.33333%}.four-800>*{width:25%}.five-800>*{width:20%}.six-800>*{width:16.66666%}.seven-800>*{width:14.28571%}.eight-800>*{width:12.5%}.nine-800>*{width:11.11111%}.ten-800>*{width:10%}.eleven-800>*{width:9.09091%}.twelve-800>*{width:8.33333%}}@media (min-width:900px){.one-900>*{width:100%}.two-900>*{width:50%}.three-900>*{width:33.33333%}.four-900>*{width:25%}.five-900>*{width:20%}.six-900>*{width:16.66666%}.seven-900>*{width:14.28571%}.eight-900>*{width:12.5%}.nine-900>*{width:11.11111%}.ten-900>*{width:10%}.eleven-900>*{width:9.09091%}.twelve-900>*{width:8.33333%}}@media (min-width:1000px){.one-1000>*{width:100%}.two-1000>*{width:50%}.three-1000>*{width:33.33333%}.four-1000>*{width:25%}.five-1000>*{width:20%}.six-1000>*{width:16.66666%}.seven-1000>*{width:14.28571%}.eight-1000>*{width:12.5%}.nine-1000>*{width:11.11111%}.ten-1000>*{width:10%}.eleven-1000>*{width:9.09091%}.twelve-1000>*{width:8.33333%}}@media (min-width:1100px){.one-1100>*{width:100%}.two-1100>*{width:50%}.three-1100>*{width:33.33333%}.four-1100>*{width:25%}.five-1100>*{width:20%}.six-1100>*{width:16.66666%}.seven-1100>*{width:14.28571%}.eight-1100>*{width:12.5%}.nine-1100>*{width:11.11111%}.ten-1100>*{width:10%}.eleven-1100>*{width:9.09091%}.twelve-1100>*{width:8.33333%}}@media (min-width:1200px){.one-1200>*{width:100%}.two-1200>*{width:50%}.three-1200>*{width:33.33333%}.four-1200>*{width:25%}.five-1200>*{width:20%}.six-1200>*{width:16.66666%}.seven-1200>*{width:14.28571%}.eight-1200>*{width:12.5%}.nine-1200>*{width:11.11111%}.ten-1200>*{width:10%}.eleven-1200>*{width:9.09091%}.twelve-1200>*{width:8.33333%}}@media (min-width:1300px){.one-1300>*{width:100%}.two-1300>*{width:50%}.three-1300>*{width:33.33333%}.four-1300>*{width:25%}.five-1300>*{width:20%}.six-1300>*{width:16.66666%}.seven-1300>*{width:14.28571%}.eight-1300>*{width:12.5%}.nine-1300>*{width:11.11111%}.ten-1300>*{width:10%}.eleven-1300>*{width:9.09091%}.twelve-1300>*{width:8.33333%}}@media (min-width:1400px){.one-1400>*{width:100%}.two-1400>*{width:50%}.three-1400>*{width:33.33333%}.four-1400>*{width:25%}.five-1400>*{width:20%}.six-1400>*{width:16.66666%}.seven-1400>*{width:14.28571%}.eight-1400>*{width:12.5%}.nine-1400>*{width:11.11111%}.ten-1400>*{width:10%}.eleven-1400>*{width:9.09091%}.twelve-1400>*{width:8.33333%}}@media (min-width:1500px){.one-1500>*{width:100%}.two-1500>*{width:50%}.three-1500>*{width:33.33333%}.four-1500>*{width:25%}.five-1500>*{width:20%}.six-1500>*{width:16.66666%}.seven-1500>*{width:14.28571%}.eight-1500>*{width:12.5%}.nine-1500>*{width:11.11111%}.ten-1500>*{width:10%}.eleven-1500>*{width:9.09091%}.twelve-1500>*{width:8.33333%}}@media (min-width:1600px){.one-1600>*{width:100%}.two-1600>*{width:50%}.three-1600>*{width:33.33333%}.four-1600>*{width:25%}.five-1600>*{width:20%}.six-1600>*{width:16.66666%}.seven-1600>*{width:14.28571%}.eight-1600>*{width:12.5%}.nine-1600>*{width:11.11111%}.ten-1600>*{width:10%}.eleven-1600>*{width:9.09091%}.twelve-1600>*{width:8.33333%}}@media (min-width:1700px){.one-1700>*{width:100%}.two-1700>*{width:50%}.three-1700>*{width:33.33333%}.four-1700>*{width:25%}.five-1700>*{width:20%}.six-1700>*{width:16.66666%}.seven-1700>*{width:14.28571%}.eight-1700>*{width:12.5%}.nine-1700>*{width:11.11111%}.ten-1700>*{width:10%}.eleven-1700>*{width:9.09091%}.twelve-1700>*{width:8.33333%}}@media (min-width:1800px){.one-1800>*{width:100%}.two-1800>*{width:50%}.three-1800>*{width:33.33333%}.four-1800>*{width:25%}.five-1800>*{width:20%}.six-1800>*{width:16.66666%}.seven-1800>*{width:14.28571%}.eight-1800>*{width:12.5%}.nine-1800>*{width:11.11111%}.ten-1800>*{width:10%}.eleven-1800>*{width:9.09091%}.twelve-1800>*{width:8.33333%}}@media (min-width:1900px){.one-1900>*{width:100%}.two-1900>*{width:50%}.three-1900>*{width:33.33333%}.four-1900>*{width:25%}.five-1900>*{width:20%}.six-1900>*{width:16.66666%}.seven-1900>*{width:14.28571%}.eight-1900>*{width:12.5%}.nine-1900>*{width:11.11111%}.ten-1900>*{width:10%}.eleven-1900>*{width:9.09091%}.twelve-1900>*{width:8.33333%}}@media (min-width:2000px){.one-2000>*{width:100%}.two-2000>*{width:50%}.three-2000>*{width:33.33333%}.four-2000>*{width:25%}.five-2000>*{width:20%}.six-2000>*{width:16.66666%}.seven-2000>*{width:14.28571%}.eight-2000>*{width:12.5%}.nine-2000>*{width:11.11111%}.ten-2000>*{width:10%}.eleven-2000>*{width:9.09091%}.twelve-2000>*{width:8.33333%}}.full{width:100%}.half{width:50%}.third{width:33.33333%}.two-third{width:66.66666%}.fourth{width:25%}.three-fourth{width:75%}.fifth{width:20%}.two-fifth{width:40%}.three-fifth{width:60%}.four-fifth{width:80%}.sixth{width:16.66666%}.none{display:none}@media (min-width:500px){.full-500{width:100%;display:block}.half-500{width:50%;display:block}.third-500{width:33.33333%;display:block}.two-third-500{width:66.66666%;display:block}.fourth-500{width:25%;display:block}.three-fourth-500{width:75%;display:block}.fifth-500{width:20%;display:block}.two-fifth-500{width:40%;display:block}.three-fifth-500{width:60%;display:block}.four-fifth-500{width:80%;display:block}.sixth-500{width:16.66666%;display:block}}@media (min-width:600px){.full-600{width:100%;display:block}.half-600{width:50%;display:block}.third-600{width:33.33333%;display:block}.two-third-600{width:66.66666%;display:block}.fourth-600{width:25%;display:block}.three-fourth-600{width:75%;display:block}.fifth-600{width:20%;display:block}.two-fifth-600{width:40%;display:block}.three-fifth-600{width:60%;display:block}.four-fifth-600{width:80%;display:block}.sixth-600{width:16.66666%;display:block}}@media (min-width:700px){.full-700{width:100%;display:block}.half-700{width:50%;display:block}.third-700{width:33.33333%;display:block}.two-third-700{width:66.66666%;display:block}.fourth-700{width:25%;display:block}.three-fourth-700{width:75%;display:block}.fifth-700{width:20%;display:block}.two-fifth-700{width:40%;display:block}.three-fifth-700{width:60%;display:block}.four-fifth-700{width:80%;display:block}.sixth-700{width:16.66666%;display:block}}@media (min-width:800px){.full-800{width:100%;display:block}.half-800{width:50%;display:block}.third-800{width:33.33333%;display:block}.two-third-800{width:66.66666%;display:block}.fourth-800{width:25%;display:block}.three-fourth-800{width:75%;display:block}.fifth-800{width:20%;display:block}.two-fifth-800{width:40%;display:block}.three-fifth-800{width:60%;display:block}.four-fifth-800{width:80%;display:block}.sixth-800{width:16.66666%;display:block}}@media (min-width:900px){.full-900{width:100%;display:block}.half-900{width:50%;display:block}.third-900{width:33.33333%;display:block}.two-third-900{width:66.66666%;display:block}.fourth-900{width:25%;display:block}.three-fourth-900{width:75%;display:block}.fifth-900{width:20%;display:block}.two-fifth-900{width:40%;display:block}.three-fifth-900{width:60%;display:block}.four-fifth-900{width:80%;display:block}.sixth-900{width:16.66666%;display:block}}@media (min-width:1000px){.full-1000{width:100%;display:block}.half-1000{width:50%;display:block}.third-1000{width:33.33333%;display:block}.two-third-1000{width:66.66666%;display:block}.fourth-1000{width:25%;display:block}.three-fourth-1000{width:75%;display:block}.fifth-1000{width:20%;display:block}.two-fifth-1000{width:40%;display:block}.three-fifth-1000{width:60%;display:block}.four-fifth-1000{width:80%;display:block}.sixth-1000{width:16.66666%;display:block}}@media (min-width:1100px){.full-1100{width:100%;display:block}.half-1100{width:50%;display:block}.third-1100{width:33.33333%;display:block}.two-third-1100{width:66.66666%;display:block}.fourth-1100{width:25%;display:block}.three-fourth-1100{width:75%;display:block}.fifth-1100{width:20%;display:block}.two-fifth-1100{width:40%;display:block}.three-fifth-1100{width:60%;display:block}.four-fifth-1100{width:80%;display:block}.sixth-1100{width:16.66666%;display:block}}@media (min-width:1200px){.full-1200{width:100%;display:block}.half-1200{width:50%;display:block}.third-1200{width:33.33333%;display:block}.two-third-1200{width:66.66666%;display:block}.fourth-1200{width:25%;display:block}.three-fourth-1200{width:75%;display:block}.fifth-1200{width:20%;display:block}.two-fifth-1200{width:40%;display:block}.three-fifth-1200{width:60%;display:block}.four-fifth-1200{width:80%;display:block}.sixth-1200{width:16.66666%;display:block}}@media (min-width:1300px){.full-1300{width:100%;display:block}.half-1300{width:50%;display:block}.third-1300{width:33.33333%;display:block}.two-third-1300{width:66.66666%;display:block}.fourth-1300{width:25%;display:block}.three-fourth-1300{width:75%;display:block}.fifth-1300{width:20%;display:block}.two-fifth-1300{width:40%;display:block}.three-fifth-1300{width:60%;display:block}.four-fifth-1300{width:80%;display:block}.sixth-1300{width:16.66666%;display:block}}@media (min-width:1400px){.full-1400{width:100%;display:block}.half-1400{width:50%;display:block}.third-1400{width:33.33333%;display:block}.two-third-1400{width:66.66666%;display:block}.fourth-1400{width:25%;display:block}.three-fourth-1400{width:75%;display:block}.fifth-1400{width:20%;display:block}.two-fifth-1400{width:40%;display:block}.three-fifth-1400{width:60%;display:block}.four-fifth-1400{width:80%;display:block}.sixth-1400{width:16.66666%;display:block}}@media (min-width:1500px){.full-1500{width:100%;display:block}.half-1500{width:50%;display:block}.third-1500{width:33.33333%;display:block}.two-third-1500{width:66.66666%;display:block}.fourth-1500{width:25%;display:block}.three-fourth-1500{width:75%;display:block}.fifth-1500{width:20%;display:block}.two-fifth-1500{width:40%;display:block}.three-fifth-1500{width:60%;display:block}.four-fifth-1500{width:80%;display:block}.sixth-1500{width:16.66666%;display:block}}@media (min-width:1600px){.full-1600{width:100%;display:block}.half-1600{width:50%;display:block}.third-1600{width:33.33333%;display:block}.two-third-1600{width:66.66666%;display:block}.fourth-1600{width:25%;display:block}.three-fourth-1600{width:75%;display:block}.fifth-1600{width:20%;display:block}.two-fifth-1600{width:40%;display:block}.three-fifth-1600{width:60%;display:block}.four-fifth-1600{width:80%;display:block}.sixth-1600{width:16.66666%;display:block}}@media (min-width:1700px){.full-1700{width:100%;display:block}.half-1700{width:50%;display:block}.third-1700{width:33.33333%;display:block}.two-third-1700{width:66.66666%;display:block}.fourth-1700{width:25%;display:block}.three-fourth-1700{width:75%;display:block}.fifth-1700{width:20%;display:block}.two-fifth-1700{width:40%;display:block}.three-fifth-1700{width:60%;display:block}.four-fifth-1700{width:80%;display:block}.sixth-1700{width:16.66666%;display:block}}@media (min-width:1800px){.full-1800{width:100%;display:block}.half-1800{width:50%;display:block}.third-1800{width:33.33333%;display:block}.two-third-1800{width:66.66666%;display:block}.fourth-1800{width:25%;display:block}.three-fourth-1800{width:75%;display:block}.fifth-1800{width:20%;display:block}.two-fifth-1800{width:40%;display:block}.three-fifth-1800{width:60%;display:block}.four-fifth-1800{width:80%;display:block}.sixth-1800{width:16.66666%;display:block}}@media (min-width:1900px){.full-1900{width:100%;display:block}.half-1900{width:50%;display:block}.third-1900{width:33.33333%;display:block}.two-third-1900{width:66.66666%;display:block}.fourth-1900{width:25%;display:block}.three-fourth-1900{width:75%;display:block}.fifth-1900{width:20%;display:block}.two-fifth-1900{width:40%;display:block}.three-fifth-1900{width:60%;display:block}.four-fifth-1900{width:80%;display:block}.sixth-1900{width:16.66666%;display:block}}@media (min-width:2000px){.full-2000{width:100%;display:block}.half-2000{width:50%;display:block}.third-2000{width:33.33333%;display:block}.two-third-2000{width:66.66666%;display:block}.fourth-2000{width:25%;display:block}.three-fourth-2000{width:75%;display:block}.fifth-2000{width:20%;display:block}.two-fifth-2000{width:40%;display:block}.three-fifth-2000{width:60%;display:block}.four-fifth-2000{width:80%;display:block}.sixth-2000{width:16.66666%;display:block}}@media (min-width:500px){.none-500{display:none}}@media (min-width:600px){.none-600{display:none}}@media (min-width:700px){.none-700{display:none}}@media (min-width:800px){.none-800{display:none}}@media (min-width:900px){.none-900{display:none}}@media (min-width:1000px){.none-1000{display:none}}@media (min-width:1100px){.none-1100{display:none}}@media (min-width:1200px){.none-1200{display:none}}@media (min-width:1300px){.none-1300{display:none}}@media (min-width:1400px){.none-1400{display:none}}@media (min-width:1500px){.none-1500{display:none}}@media (min-width:1600px){.none-1600{display:none}}@media (min-width:1700px){.none-1700{display:none}}@media (min-width:1800px){.none-1800{display:none}}@media (min-width:1900px){.none-1900{display:none}}@media (min-width:2000px){.none-2000{display:none}}.off-none{margin-left:0}.off-half{margin-left:50%}.off-third{margin-left:33.33333%}.off-two-third{margin-left:66.66666%}.off-fourth{margin-left:25%}.off-three-fourth{margin-left:75%}.off-fifth{margin-left:20%}.off-two-fifth{margin-left:40%}.off-three-fifth{margin-left:60%}.off-four-fifth{margin-left:80%}.off-sixth{margin-left:16.66666%}@media (min-width:500px){.off-none-500{margin-left:0}.off-half-500{margin-left:50%}.off-third-500{margin-left:33.33333%}.off-two-third-500{margin-left:66.66666%}.off-fourth-500{margin-left:25%}.off-three-fourth-500{margin-left:75%}.off-fifth-500{margin-left:20%}.off-two-fifth-500{margin-left:40%}.off-three-fifth-500{margin-left:60%}.off-four-fifth-500{margin-left:80%}.off-sixth-500{margin-left:16.66666%}}@media (min-width:600px){.off-none-600{margin-left:0}.off-half-600{margin-left:50%}.off-third-600{margin-left:33.33333%}.off-two-third-600{margin-left:66.66666%}.off-fourth-600{margin-left:25%}.off-three-fourth-600{margin-left:75%}.off-fifth-600{margin-left:20%}.off-two-fifth-600{margin-left:40%}.off-three-fifth-600{margin-left:60%}.off-four-fifth-600{margin-left:80%}.off-sixth-600{margin-left:16.66666%}}@media (min-width:700px){.off-none-700{margin-left:0}.off-half-700{margin-left:50%}.off-third-700{margin-left:33.33333%}.off-two-third-700{margin-left:66.66666%}.off-fourth-700{margin-left:25%}.off-three-fourth-700{margin-left:75%}.off-fifth-700{margin-left:20%}.off-two-fifth-700{margin-left:40%}.off-three-fifth-700{margin-left:60%}.off-four-fifth-700{margin-left:80%}.off-sixth-700{margin-left:16.66666%}}@media (min-width:800px){.off-none-800{margin-left:0}.off-half-800{margin-left:50%}.off-third-800{margin-left:33.33333%}.off-two-third-800{margin-left:66.66666%}.off-fourth-800{margin-left:25%}.off-three-fourth-800{margin-left:75%}.off-fifth-800{margin-left:20%}.off-two-fifth-800{margin-left:40%}.off-three-fifth-800{margin-left:60%}.off-four-fifth-800{margin-left:80%}.off-sixth-800{margin-left:16.66666%}}@media (min-width:900px){.off-none-900{margin-left:0}.off-half-900{margin-left:50%}.off-third-900{margin-left:33.33333%}.off-two-third-900{margin-left:66.66666%}.off-fourth-900{margin-left:25%}.off-three-fourth-900{margin-left:75%}.off-fifth-900{margin-left:20%}.off-two-fifth-900{margin-left:40%}.off-three-fifth-900{margin-left:60%}.off-four-fifth-900{margin-left:80%}.off-sixth-900{margin-left:16.66666%}}@media (min-width:1000px){.off-none-1000{margin-left:0}.off-half-1000{margin-left:50%}.off-third-1000{margin-left:33.33333%}.off-two-third-1000{margin-left:66.66666%}.off-fourth-1000{margin-left:25%}.off-three-fourth-1000{margin-left:75%}.off-fifth-1000{margin-left:20%}.off-two-fifth-1000{margin-left:40%}.off-three-fifth-1000{margin-left:60%}.off-four-fifth-1000{margin-left:80%}.off-sixth-1000{margin-left:16.66666%}}@media (min-width:1100px){.off-none-1100{margin-left:0}.off-half-1100{margin-left:50%}.off-third-1100{margin-left:33.33333%}.off-two-third-1100{margin-left:66.66666%}.off-fourth-1100{margin-left:25%}.off-three-fourth-1100{margin-left:75%}.off-fifth-1100{margin-left:20%}.off-two-fifth-1100{margin-left:40%}.off-three-fifth-1100{margin-left:60%}.off-four-fifth-1100{margin-left:80%}.off-sixth-1100{margin-left:16.66666%}}@media (min-width:1200px){.off-none-1200{margin-left:0}.off-half-1200{margin-left:50%}.off-third-1200{margin-left:33.33333%}.off-two-third-1200{margin-left:66.66666%}.off-fourth-1200{margin-left:25%}.off-three-fourth-1200{margin-left:75%}.off-fifth-1200{margin-left:20%}.off-two-fifth-1200{margin-left:40%}.off-three-fifth-1200{margin-left:60%}.off-four-fifth-1200{margin-left:80%}.off-sixth-1200{margin-left:16.66666%}}@media (min-width:1300px){.off-none-1300{margin-left:0}.off-half-1300{margin-left:50%}.off-third-1300{margin-left:33.33333%}.off-two-third-1300{margin-left:66.66666%}.off-fourth-1300{margin-left:25%}.off-three-fourth-1300{margin-left:75%}.off-fifth-1300{margin-left:20%}.off-two-fifth-1300{margin-left:40%}.off-three-fifth-1300{margin-left:60%}.off-four-fifth-1300{margin-left:80%}.off-sixth-1300{margin-left:16.66666%}}@media (min-width:1400px){.off-none-1400{margin-left:0}.off-half-1400{margin-left:50%}.off-third-1400{margin-left:33.33333%}.off-two-third-1400{margin-left:66.66666%}.off-fourth-1400{margin-left:25%}.off-three-fourth-1400{margin-left:75%}.off-fifth-1400{margin-left:20%}.off-two-fifth-1400{margin-left:40%}.off-three-fifth-1400{margin-left:60%}.off-four-fifth-1400{margin-left:80%}.off-sixth-1400{margin-left:16.66666%}}@media (min-width:1500px){.off-none-1500{margin-left:0}.off-half-1500{margin-left:50%}.off-third-1500{margin-left:33.33333%}.off-two-third-1500{margin-left:66.66666%}.off-fourth-1500{margin-left:25%}.off-three-fourth-1500{margin-left:75%}.off-fifth-1500{margin-left:20%}.off-two-fifth-1500{margin-left:40%}.off-three-fifth-1500{margin-left:60%}.off-four-fifth-1500{margin-left:80%}.off-sixth-1500{margin-left:16.66666%}}@media (min-width:1600px){.off-none-1600{margin-left:0}.off-half-1600{margin-left:50%}.off-third-1600{margin-left:33.33333%}.off-two-third-1600{margin-left:66.66666%}.off-fourth-1600{margin-left:25%}.off-three-fourth-1600{margin-left:75%}.off-fifth-1600{margin-left:20%}.off-two-fifth-1600{margin-left:40%}.off-three-fifth-1600{margin-left:60%}.off-four-fifth-1600{margin-left:80%}.off-sixth-1600{margin-left:16.66666%}}@media (min-width:1700px){.off-none-1700{margin-left:0}.off-half-1700{margin-left:50%}.off-third-1700{margin-left:33.33333%}.off-two-third-1700{margin-left:66.66666%}.off-fourth-1700{margin-left:25%}.off-three-fourth-1700{margin-left:75%}.off-fifth-1700{margin-left:20%}.off-two-fifth-1700{margin-left:40%}.off-three-fifth-1700{margin-left:60%}.off-four-fifth-1700{margin-left:80%}.off-sixth-1700{margin-left:16.66666%}}@media (min-width:1800px){.off-none-1800{margin-left:0}.off-half-1800{margin-left:50%}.off-third-1800{margin-left:33.33333%}.off-two-third-1800{margin-left:66.66666%}.off-fourth-1800{margin-left:25%}.off-three-fourth-1800{margin-left:75%}.off-fifth-1800{margin-left:20%}.off-two-fifth-1800{margin-left:40%}.off-three-fifth-1800{margin-left:60%}.off-four-fifth-1800{margin-left:80%}.off-sixth-1800{margin-left:16.66666%}}@media (min-width:1900px){.off-none-1900{margin-left:0}.off-half-1900{margin-left:50%}.off-third-1900{margin-left:33.33333%}.off-two-third-1900{margin-left:66.66666%}.off-fourth-1900{margin-left:25%}.off-three-fourth-1900{margin-left:75%}.off-fifth-1900{margin-left:20%}.off-two-fifth-1900{margin-left:40%}.off-three-fifth-1900{margin-left:60%}.off-four-fifth-1900{margin-left:80%}.off-sixth-1900{margin-left:16.66666%}}@media (min-width:2000px){.off-none-2000{margin-left:0}.off-half-2000{margin-left:50%}.off-third-2000{margin-left:33.33333%}.off-two-third-2000{margin-left:66.66666%}.off-fourth-2000{margin-left:25%}.off-three-fourth-2000{margin-left:75%}.off-fifth-2000{margin-left:20%}.off-two-fifth-2000{margin-left:40%}.off-three-fifth-2000{margin-left:60%}.off-four-fifth-2000{margin-left:80%}.off-sixth-2000{margin-left:16.66666%}}nav{position:fixed;top:0;left:0;right:0;height:3em;padding:0 .6em;background:#fff;box-shadow:0 0 .2em rgba(17,17,17,.2);z-index:10000;transition:all .3s;transform-style:preserve-3d}nav .brand,nav .burger,nav .menu{float:right;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}nav .brand{font-weight:700;float:left;padding:0 .6em;max-width:50%;white-space:nowrap;color:#111}nav .brand *{vertical-align:middle}nav .logo{height:2em;margin-right:.3em}nav .select:after{height:calc(100% - 1px);padding:0;line-height:2.4em}nav .menu>*{margin-right:.6em}nav .burger{display:none}@media (max-width:60em){nav .burger{display:inline-block;cursor:pointer;bottom:-1000em;margin:0}nav .burger~.menu,nav .show:checked~.burger{position:fixed;min-height:100%;width:0;overflow:hidden;top:0;right:0;bottom:-1000em;margin:0;background:#fff;transition:all .3s ease;transform:none}nav .burger~.menu{z-index:11}nav .show:checked~.burger{color:transparent;width:100%;border-radius:0;background:rgba(0,0,0,.2);transition:all .3s ease}nav .show:checked~.menu{width:70%;overflow:auto;transition:all .3s ease;height:100vh}nav .burger~.menu>*{display:block;margin:.3em;text-align:left;max-width:calc(100% - .6em)}nav .burger~.menu>a{padding:.3em .9em}}.stack,.stack .toggle{margin-top:0;margin-bottom:0;display:block;width:100%;text-align:left;border-radius:0}.stack:first-child,.stack:first-child .toggle{border-top-left-radius:.2em;border-top-right-radius:.2em}.stack:last-child,.stack:last-child .toggle{border-bottom-left-radius:.2em;border-bottom-right-radius:.2em}input.stack,select.stack,textarea.stack{transition:border-bottom 0 ease 0;border-bottom-width:0}input.stack:last-child,select.stack:last-child,textarea.stack:last-child{border-bottom-width:1px}input.stack:focus+input,input.stack:focus+select,input.stack:focus+textarea,select.stack:focus+input,select.stack:focus+select,select.stack:focus+textarea,textarea.stack:focus+input,textarea.stack:focus+select,textarea.stack:focus+textarea{border-top-color:#0074d9}.card,.modal .overlay~*{position:relative;box-shadow:0;border-radius:.2em;border:1px solid #ccc;overflow:hidden;text-align:left;background:#fff;margin-bottom:.6em;padding:0;transition:all .3s ease}.hidden.card,.modal .overlay:checked+*,.modal .overlay~.hidden,.modal .overlay~:checked+*,:checked+.card{font-size:0;padding:0;margin:0;border:0}.card>*,.modal .overlay~*>*{max-width:100%;display:block}.card>:last-child,.modal .overlay~*>:last-child{margin-bottom:0}.card>p,.card header,.card section,.modal .overlay~*>p,.modal .overlay~* header,.modal .overlay~* section{padding:.6em .8em}.card section,.modal .overlay~* section{padding:.6em .8em 0}.card hr,.modal .overlay~* hr{border:none;height:1px;background-color:#eee}.card header,.modal .overlay~* header{font-weight:700;position:relative;border-bottom:1px solid #eee}.card header h1,.card header h2,.card header h3,.card header h4,.card header h5,.card header h6,.modal .overlay~* header h1,.modal .overlay~* header h2,.modal .overlay~* header h3,.modal .overlay~* header h4,.modal .overlay~* header h5,.modal .overlay~* header h6{padding:0;margin:0 2em 0 0;line-height:1;display:inline-block;vertical-align:text-bottom}.card header:last-child,.modal .overlay~* header:last-child{border-bottom:0}.card footer,.modal .overlay~* footer{padding:.8em}.card p,.modal .overlay~* p{margin:.3em 0}.card p:first-child,.modal .overlay~* p:first-child{margin-top:0}.card p:last-child,.modal .overlay~* p:last-child{margin-bottom:0}.card>p,.modal .overlay~*>p{margin:0;padding-right:2.5em}.card .close,.modal .overlay~* .close{position:absolute;top:.4em;right:.3em;font-size:1.2em;padding:0 .5em;cursor:pointer;width:auto}.card .close:hover,.modal .overlay~* .close:hover{color:#ff4136}.card h1+.close,.modal .overlay~* h1+.close{margin:.2em}.card h2+.close,.modal .overlay~* h2+.close{margin:.1em}.card .dangerous,.modal .overlay~* .dangerous{background:#ff4136;float:right}.modal{text-align:center}.modal>input{display:none}.modal>input~*{opacity:0;max-height:0;overflow:hidden}.modal .overlay{top:0;left:0;bottom:0;right:0;position:fixed;margin:0;border-radius:0;background:rgba(17,17,17,.6);transition:all .3s;z-index:100000}.modal .overlay:after,.modal .overlay:before{display:none}.modal .overlay~*{border:0;position:fixed;top:50%;left:50%;transform:translateX(-50%) translateY(-50%) scale(.2);z-index:1000000;transition:all .3s}.modal>input:checked~*{display:block;opacity:1;max-height:10000px;transition:all .3s}.modal>input:checked~.overlay~*{max-height:90%;overflow:auto;-webkit-transform:translateX(-50%) translateY(-50%) scale(1);transform:translateX(-50%) translateY(-50%) scale(1)}@media (max-width:60em){.modal .overlay~*{min-width:90%}}.dropimage{position:relative;display:block;padding:0 0 56.25%;overflow:hidden;cursor:pointer;border:0;margin:.3em 0;border-radius:.2em;background-color:#ddd;background-size:cover;background-position:50%;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NDAiIGhlaWdodD0iNjQwIj48ZyBmaWxsPSIjMzMzIj48cGF0aCBkPSJNMTg3IDIzMGMtMTIgMC0yMiAxMC0yMiAyMnYxNTZjMCAxMiAxMCAyMiAyMiAyMmgyNzZjMTIgMCAyMi0xMCAyMi0yMlYyNTJjMC0xMi0xMC0yMi0yMi0yMkgxODd6bTE3MyAyNmE3MCA3MiAwIDAgMSA3MCA3MiA3MCA3MiAwIDAgMS03MCA3MiA3MCA3MiAwIDAgMS03MC03MiA3MCA3MiAwIDAgMSA3MC03MnoiLz48Y2lyY2xlIGN4PSIzNjAiIGN5PSIzMzAiIHI9IjQxIi8+PHBhdGggZD0iTTIwNSAyMjVsNS0xMGgyMGw1IDEwaC0zME0yODUgMjAwbC0xNSAyNWgxMDZsLTE1LTI1aC03NnptMjUgNWgyN3YxM2gtMjd2LTEzek00MDUgMjI1bDUtMTBoMjBsNSAxMGgtMzAiLz48L2c+PC9zdmc+)}.dropimage input{left:0;width:100%;height:100%;border:0;margin:0;padding:0;opacity:0;cursor:pointer;position:absolute}.tabs{position:relative;overflow:hidden}.tabs>label img{float:left;margin-left:.6em}.tabs>.row{width:calc(100% + 1.2em);display:table;table-layout:fixed;position:relative;padding-left:0;transition:all .3s;border-spacing:0;margin:0}.tabs>.row:after,.tabs>.row:before{display:none}.tabs>.row>*,.tabs>.row img{display:table-cell;vertical-align:top;margin:0;width:100%}.tabs>input{display:none}.tabs>input+*{width:100%}.tabs>input+label{width:auto}.two.tabs>.row{width:200%;left:-100%}.two.tabs>input:first-of-type:checked~.row{margin-left:100%}.two.tabs>label img{width:48%;margin:4% 0 4% 4%}.three.tabs>.row{width:300%;left:-200%}.three.tabs>input:first-of-type:checked~.row{margin-left:200%}.three.tabs>input:nth-of-type(2):checked~.row{margin-left:100%}.three.tabs>label img{width:30%;margin:5% 0 5% 5%}.four.tabs>.row{width:400%;left:-300%}.four.tabs>input:first-of-type:checked~.row{margin-left:300%}.four.tabs>input:nth-of-type(2):checked~.row{margin-left:200%}.four.tabs>input:nth-of-type(3):checked~.row{margin-left:100%}.four.tabs>label img{width:22%;margin:4% 0 4% 4%}.tabs>label:first-of-type img{margin-left:0}[data-tooltip]{position:relative}[data-tooltip]:after,[data-tooltip]:before{position:absolute;z-index:10;opacity:0;border-width:0;height:0;padding:0;overflow:hidden;transition:opacity .6s ease,height 0s ease .6s;top:calc(100% - 6px);left:0;margin-top:12px}[data-tooltip]:after{margin-left:0;font-size:.8em;background:#111;content:attr(data-tooltip);white-space:nowrap}[data-tooltip]:before{content:"";width:0;height:0;border:0 solid transparent;border-bottom-color:#111;margin-top:0;left:10px}[data-tooltip]:focus:after,[data-tooltip]:focus:before,[data-tooltip]:hover:after,[data-tooltip]:hover:before{opacity:1;border-width:6px;height:auto}[data-tooltip]:focus:after,[data-tooltip]:hover:after{padding:.45em .9em}.tooltip-top:after,.tooltip-top:before{top:auto;bottom:calc(100% - 6px);left:0;margin-bottom:12px}.tooltip-top:before{border-color:#111 transparent transparent;margin-bottom:0;left:10px}.tooltip-right:after,.tooltip-right:before{left:100%;margin-left:6px;margin-top:0;top:0}.tooltip-right:before{border-color:transparent #111 transparent transparent;margin-left:-6px;left:100%;top:7px}.tooltip-left:after,.tooltip-left:before{right:100%;margin-right:6px;left:auto;margin-top:0;top:0}.tooltip-left:before{border-color:transparent transparent transparent #111;margin-right:-6px;right:100%;top:7px} \ No newline at end of file +@charset "UTF-8";html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset,legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:inherit}body,html{font-family:Arial,Helvetica,sans-serif;box-sizing:border-box;height:100%}body{color:#111;font-size:1.1em;line-height:1.5;background:#fff}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;padding:.6em 0}li{margin:0 0 .3em}a{color:#0074d9;text-decoration:none;box-shadow:none;transition:all .3s}code{font-size:.8em}code,pre{padding:.3em .6em;background:#f5f5f5}pre{text-align:left;border-radius:.2em}pre code{padding:0}blockquote{padding:0 0 0 1em;margin:0 0 0 .1em;box-shadow:inset 5px 0 rgba(17,17,17,.3)}label{cursor:pointer}[class*=" icon-"]:before,[class^=icon-]:before{margin:0 .6em 0 0}i[class*=" icon-"]:before,i[class^=icon-]:before{margin:0}.button,.dropimage,.label,[data-tooltip]:after,[type=submit],button{display:inline-block;text-align:center;margin:0;padding:.3em .9em;vertical-align:middle;background:#0074d9;color:#fff;border:0;border-radius:.2em;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.success.button,.success.dropimage,.success.label,.success[data-tooltip]:after,.success[type=submit],button.success{background:#2ecc40}.warning.button,.warning.dropimage,.warning.label,.warning[data-tooltip]:after,.warning[type=submit],button.warning{background:#ff851b}.error.button,.error.dropimage,.error.label,.error[data-tooltip]:after,.error[type=submit],button.error{background:#ff4136}.pseudo.button,.pseudo.dropimage,.pseudo.label,.pseudo[data-tooltip]:after,.pseudo[type=submit],button.pseudo{background:transparent;color:#111}.label,[data-tooltip]:after{font-size:.6em;padding:.4em .6em;margin-left:1em;line-height:1}.button,.dropimage,[type=submit],button{margin:.3em 0;cursor:pointer;transition:all .3s;border-radius:.2em;height:auto;box-shadow:inset 0 0 transparent}.button:focus,.button:hover,.dropimage:focus,.dropimage:hover,[type=submit]:focus,[type=submit]:hover,button:focus,button:hover{box-shadow:inset 0 0 0 99em hsla(0,0%,100%,.2);border:0}.pseudo.button:focus,.pseudo.button:hover,.pseudo.dropimage:focus,.pseudo.dropimage:hover,.pseudo[type=submit]:focus,.pseudo[type=submit]:hover,button.pseudo:focus,button.pseudo:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.1)}.active.button,.active.dropimage,.active[type=submit],.button:active,.dropimage:active,.pseudo.button:active,.pseudo.dropimage:active,.pseudo[type=submit]:active,[type=submit]:active,button.active,button.pseudo:active,button:active{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[disabled].button,[disabled].dropimage,[disabled][type=submit],button[disabled]{cursor:default;box-shadow:none;background:#bbb}:checked+.toggle,:checked+.toggle:hover{box-shadow:inset 0 0 0 99em rgba(17,17,17,.2)}[type]+.toggle{padding:.3em .9em;margin-right:0}[type]+.toggle:after,[type]+.toggle:before{display:none}.select select,input,textarea{line-height:1.5;margin:0;height:2.1em;padding:.3em .6em;border:1px solid #ccc;background-color:#fff;border-radius:.2em;transition:all .3s;width:100%}.select select:focus,input:focus,textarea:focus{border:1px solid #0074d9;outline:0}textarea{height:auto}[type=color],[type=file]{cursor:pointer}[type=file]{height:auto}select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiPjxwYXRoIGQ9Ik0wIDFsMSAyIDEtMnoiLz48L3N2Zz4=) no-repeat scroll 95%/10px 15px;background-position:calc(100% - 15px);border:1px solid #ccc;border-radius:.2em;cursor:pointer;width:100%;height:2.1em;box-sizing:border-box;padding:.3em .45em;transition:all .3s;-moz-appearance:none;-webkit-appearance:none;appearance:none}select::-ms-expand{display:none}select:active,select:focus{border:1px solid #0074d9;transition:outline 0s}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #111}select option{font-size:inherit;padding:.3em .45em}[type=checkbox],[type=radio]{opacity:0;width:0;position:absolute;display:inline-block}[type=checkbox]+.checkable:hover:before,[type=checkbox]:focus+.checkable:before,[type=radio]+.checkable:hover:before,[type=radio]:focus+.checkable:before{border:1px solid #0074d9}[type=checkbox]+.checkable,[type=radio]+.checkable{position:relative;cursor:pointer;padding-left:1.5em;margin-right:.6em}[type=checkbox]+.checkable:after,[type=checkbox]+.checkable:before,[type=radio]+.checkable:after,[type=radio]+.checkable:before{content:"";position:absolute;display:inline-block;left:0;top:50%;transform:translateY(-50%);font-size:1em;line-height:1em;color:transparent;font-family:sans;text-align:center;box-sizing:border-box;width:1em;height:1em;border-radius:50%;transition:all .3s}[type=checkbox]+.checkable:before,[type=radio]+.checkable:before{border:1px solid #aaa}[type=checkbox]:checked+.checkable:after,[type=radio]:checked+.checkable:after{background:#555;transform:scale(.5) translateY(-100%)}[type=checkbox]+.checkable:before{border-radius:.2em}[type=checkbox]+.checkable:after{content:"✔";background:none;transform:scale(2) translateY(-25%);visibility:hidden;opacity:0}[type=checkbox]:checked+.checkable:after{color:#111;background:none;transform:translateY(-50%);transition:all .3s;visibility:visible;opacity:1}table{text-align:left}td,th{padding:.3em 2.4em .3em .6em}th{text-align:left;font-weight:900;color:#fff;background-color:#0074d9}.success th{background-color:#2ecc40}.warning th{background-color:#ff851b}.error th{background-color:#ff4136}.dull th{background-color:#aaa}tr:nth-child(2n){background:rgba(0,0,0,.05)}.flex{display:-ms-flexbox;display:flex;margin-left:-.6em;width:calc(100% + .6em);flex-wrap:wrap;transition:all .3s ease}.flex>*{box-sizing:border-box;flex:1 1 auto;padding-left:.6em;padding-bottom:.6em}.flex[class*=eight]>*,.flex[class*=eleven]>*,.flex[class*=five]>*,.flex[class*=four]>*,.flex[class*=nine]>*,.flex[class*=one]>*,.flex[class*=seven]>*,.flex[class*=six]>*,.flex[class*=ten]>*,.flex[class*=three]>*,.flex[class*=twelve]>*,.flex[class*=two]>*{flex-grow:0}.flex.grow>*{flex-grow:1}.center{justify-content:center}.one>*{width:100%}.two>*{width:50%}.three>*{width:33.33333%}.four>*{width:25%}.five>*{width:20%}.six>*{width:16.66666%}.seven>*{width:14.28571%}.eight>*{width:12.5%}.nine>*{width:11.11111%}.ten>*{width:10%}.eleven>*{width:9.09091%}.twelve>*{width:8.33333%}@media (min-width:500px){.one-500>*{width:100%}.two-500>*{width:50%}.three-500>*{width:33.33333%}.four-500>*{width:25%}.five-500>*{width:20%}.six-500>*{width:16.66666%}.seven-500>*{width:14.28571%}.eight-500>*{width:12.5%}.nine-500>*{width:11.11111%}.ten-500>*{width:10%}.eleven-500>*{width:9.09091%}.twelve-500>*{width:8.33333%}}@media (min-width:600px){.one-600>*{width:100%}.two-600>*{width:50%}.three-600>*{width:33.33333%}.four-600>*{width:25%}.five-600>*{width:20%}.six-600>*{width:16.66666%}.seven-600>*{width:14.28571%}.eight-600>*{width:12.5%}.nine-600>*{width:11.11111%}.ten-600>*{width:10%}.eleven-600>*{width:9.09091%}.twelve-600>*{width:8.33333%}}@media (min-width:700px){.one-700>*{width:100%}.two-700>*{width:50%}.three-700>*{width:33.33333%}.four-700>*{width:25%}.five-700>*{width:20%}.six-700>*{width:16.66666%}.seven-700>*{width:14.28571%}.eight-700>*{width:12.5%}.nine-700>*{width:11.11111%}.ten-700>*{width:10%}.eleven-700>*{width:9.09091%}.twelve-700>*{width:8.33333%}}@media (min-width:800px){.one-800>*{width:100%}.two-800>*{width:50%}.three-800>*{width:33.33333%}.four-800>*{width:25%}.five-800>*{width:20%}.six-800>*{width:16.66666%}.seven-800>*{width:14.28571%}.eight-800>*{width:12.5%}.nine-800>*{width:11.11111%}.ten-800>*{width:10%}.eleven-800>*{width:9.09091%}.twelve-800>*{width:8.33333%}}@media (min-width:900px){.one-900>*{width:100%}.two-900>*{width:50%}.three-900>*{width:33.33333%}.four-900>*{width:25%}.five-900>*{width:20%}.six-900>*{width:16.66666%}.seven-900>*{width:14.28571%}.eight-900>*{width:12.5%}.nine-900>*{width:11.11111%}.ten-900>*{width:10%}.eleven-900>*{width:9.09091%}.twelve-900>*{width:8.33333%}}@media (min-width:1000px){.one-1000>*{width:100%}.two-1000>*{width:50%}.three-1000>*{width:33.33333%}.four-1000>*{width:25%}.five-1000>*{width:20%}.six-1000>*{width:16.66666%}.seven-1000>*{width:14.28571%}.eight-1000>*{width:12.5%}.nine-1000>*{width:11.11111%}.ten-1000>*{width:10%}.eleven-1000>*{width:9.09091%}.twelve-1000>*{width:8.33333%}}@media (min-width:1100px){.one-1100>*{width:100%}.two-1100>*{width:50%}.three-1100>*{width:33.33333%}.four-1100>*{width:25%}.five-1100>*{width:20%}.six-1100>*{width:16.66666%}.seven-1100>*{width:14.28571%}.eight-1100>*{width:12.5%}.nine-1100>*{width:11.11111%}.ten-1100>*{width:10%}.eleven-1100>*{width:9.09091%}.twelve-1100>*{width:8.33333%}}@media (min-width:1200px){.one-1200>*{width:100%}.two-1200>*{width:50%}.three-1200>*{width:33.33333%}.four-1200>*{width:25%}.five-1200>*{width:20%}.six-1200>*{width:16.66666%}.seven-1200>*{width:14.28571%}.eight-1200>*{width:12.5%}.nine-1200>*{width:11.11111%}.ten-1200>*{width:10%}.eleven-1200>*{width:9.09091%}.twelve-1200>*{width:8.33333%}}@media (min-width:1300px){.one-1300>*{width:100%}.two-1300>*{width:50%}.three-1300>*{width:33.33333%}.four-1300>*{width:25%}.five-1300>*{width:20%}.six-1300>*{width:16.66666%}.seven-1300>*{width:14.28571%}.eight-1300>*{width:12.5%}.nine-1300>*{width:11.11111%}.ten-1300>*{width:10%}.eleven-1300>*{width:9.09091%}.twelve-1300>*{width:8.33333%}}@media (min-width:1400px){.one-1400>*{width:100%}.two-1400>*{width:50%}.three-1400>*{width:33.33333%}.four-1400>*{width:25%}.five-1400>*{width:20%}.six-1400>*{width:16.66666%}.seven-1400>*{width:14.28571%}.eight-1400>*{width:12.5%}.nine-1400>*{width:11.11111%}.ten-1400>*{width:10%}.eleven-1400>*{width:9.09091%}.twelve-1400>*{width:8.33333%}}@media (min-width:1500px){.one-1500>*{width:100%}.two-1500>*{width:50%}.three-1500>*{width:33.33333%}.four-1500>*{width:25%}.five-1500>*{width:20%}.six-1500>*{width:16.66666%}.seven-1500>*{width:14.28571%}.eight-1500>*{width:12.5%}.nine-1500>*{width:11.11111%}.ten-1500>*{width:10%}.eleven-1500>*{width:9.09091%}.twelve-1500>*{width:8.33333%}}@media (min-width:1600px){.one-1600>*{width:100%}.two-1600>*{width:50%}.three-1600>*{width:33.33333%}.four-1600>*{width:25%}.five-1600>*{width:20%}.six-1600>*{width:16.66666%}.seven-1600>*{width:14.28571%}.eight-1600>*{width:12.5%}.nine-1600>*{width:11.11111%}.ten-1600>*{width:10%}.eleven-1600>*{width:9.09091%}.twelve-1600>*{width:8.33333%}}@media (min-width:1700px){.one-1700>*{width:100%}.two-1700>*{width:50%}.three-1700>*{width:33.33333%}.four-1700>*{width:25%}.five-1700>*{width:20%}.six-1700>*{width:16.66666%}.seven-1700>*{width:14.28571%}.eight-1700>*{width:12.5%}.nine-1700>*{width:11.11111%}.ten-1700>*{width:10%}.eleven-1700>*{width:9.09091%}.twelve-1700>*{width:8.33333%}}@media (min-width:1800px){.one-1800>*{width:100%}.two-1800>*{width:50%}.three-1800>*{width:33.33333%}.four-1800>*{width:25%}.five-1800>*{width:20%}.six-1800>*{width:16.66666%}.seven-1800>*{width:14.28571%}.eight-1800>*{width:12.5%}.nine-1800>*{width:11.11111%}.ten-1800>*{width:10%}.eleven-1800>*{width:9.09091%}.twelve-1800>*{width:8.33333%}}@media (min-width:1900px){.one-1900>*{width:100%}.two-1900>*{width:50%}.three-1900>*{width:33.33333%}.four-1900>*{width:25%}.five-1900>*{width:20%}.six-1900>*{width:16.66666%}.seven-1900>*{width:14.28571%}.eight-1900>*{width:12.5%}.nine-1900>*{width:11.11111%}.ten-1900>*{width:10%}.eleven-1900>*{width:9.09091%}.twelve-1900>*{width:8.33333%}}@media (min-width:2000px){.one-2000>*{width:100%}.two-2000>*{width:50%}.three-2000>*{width:33.33333%}.four-2000>*{width:25%}.five-2000>*{width:20%}.six-2000>*{width:16.66666%}.seven-2000>*{width:14.28571%}.eight-2000>*{width:12.5%}.nine-2000>*{width:11.11111%}.ten-2000>*{width:10%}.eleven-2000>*{width:9.09091%}.twelve-2000>*{width:8.33333%}}.full{width:100%}.half{width:50%}.third{width:33.33333%}.two-third{width:66.66666%}.fourth{width:25%}.three-fourth{width:75%}.fifth{width:20%}.two-fifth{width:40%}.three-fifth{width:60%}.four-fifth{width:80%}.sixth{width:16.66666%}.none{display:none}@media (min-width:500px){.full-500{width:100%;display:block}.half-500{width:50%;display:block}.third-500{width:33.33333%;display:block}.two-third-500{width:66.66666%;display:block}.fourth-500{width:25%;display:block}.three-fourth-500{width:75%;display:block}.fifth-500{width:20%;display:block}.two-fifth-500{width:40%;display:block}.three-fifth-500{width:60%;display:block}.four-fifth-500{width:80%;display:block}.sixth-500{width:16.66666%;display:block}}@media (min-width:600px){.full-600{width:100%;display:block}.half-600{width:50%;display:block}.third-600{width:33.33333%;display:block}.two-third-600{width:66.66666%;display:block}.fourth-600{width:25%;display:block}.three-fourth-600{width:75%;display:block}.fifth-600{width:20%;display:block}.two-fifth-600{width:40%;display:block}.three-fifth-600{width:60%;display:block}.four-fifth-600{width:80%;display:block}.sixth-600{width:16.66666%;display:block}}@media (min-width:700px){.full-700{width:100%;display:block}.half-700{width:50%;display:block}.third-700{width:33.33333%;display:block}.two-third-700{width:66.66666%;display:block}.fourth-700{width:25%;display:block}.three-fourth-700{width:75%;display:block}.fifth-700{width:20%;display:block}.two-fifth-700{width:40%;display:block}.three-fifth-700{width:60%;display:block}.four-fifth-700{width:80%;display:block}.sixth-700{width:16.66666%;display:block}}@media (min-width:800px){.full-800{width:100%;display:block}.half-800{width:50%;display:block}.third-800{width:33.33333%;display:block}.two-third-800{width:66.66666%;display:block}.fourth-800{width:25%;display:block}.three-fourth-800{width:75%;display:block}.fifth-800{width:20%;display:block}.two-fifth-800{width:40%;display:block}.three-fifth-800{width:60%;display:block}.four-fifth-800{width:80%;display:block}.sixth-800{width:16.66666%;display:block}}@media (min-width:900px){.full-900{width:100%;display:block}.half-900{width:50%;display:block}.third-900{width:33.33333%;display:block}.two-third-900{width:66.66666%;display:block}.fourth-900{width:25%;display:block}.three-fourth-900{width:75%;display:block}.fifth-900{width:20%;display:block}.two-fifth-900{width:40%;display:block}.three-fifth-900{width:60%;display:block}.four-fifth-900{width:80%;display:block}.sixth-900{width:16.66666%;display:block}}@media (min-width:1000px){.full-1000{width:100%;display:block}.half-1000{width:50%;display:block}.third-1000{width:33.33333%;display:block}.two-third-1000{width:66.66666%;display:block}.fourth-1000{width:25%;display:block}.three-fourth-1000{width:75%;display:block}.fifth-1000{width:20%;display:block}.two-fifth-1000{width:40%;display:block}.three-fifth-1000{width:60%;display:block}.four-fifth-1000{width:80%;display:block}.sixth-1000{width:16.66666%;display:block}}@media (min-width:1100px){.full-1100{width:100%;display:block}.half-1100{width:50%;display:block}.third-1100{width:33.33333%;display:block}.two-third-1100{width:66.66666%;display:block}.fourth-1100{width:25%;display:block}.three-fourth-1100{width:75%;display:block}.fifth-1100{width:20%;display:block}.two-fifth-1100{width:40%;display:block}.three-fifth-1100{width:60%;display:block}.four-fifth-1100{width:80%;display:block}.sixth-1100{width:16.66666%;display:block}}@media (min-width:1200px){.full-1200{width:100%;display:block}.half-1200{width:50%;display:block}.third-1200{width:33.33333%;display:block}.two-third-1200{width:66.66666%;display:block}.fourth-1200{width:25%;display:block}.three-fourth-1200{width:75%;display:block}.fifth-1200{width:20%;display:block}.two-fifth-1200{width:40%;display:block}.three-fifth-1200{width:60%;display:block}.four-fifth-1200{width:80%;display:block}.sixth-1200{width:16.66666%;display:block}}@media (min-width:1300px){.full-1300{width:100%;display:block}.half-1300{width:50%;display:block}.third-1300{width:33.33333%;display:block}.two-third-1300{width:66.66666%;display:block}.fourth-1300{width:25%;display:block}.three-fourth-1300{width:75%;display:block}.fifth-1300{width:20%;display:block}.two-fifth-1300{width:40%;display:block}.three-fifth-1300{width:60%;display:block}.four-fifth-1300{width:80%;display:block}.sixth-1300{width:16.66666%;display:block}}@media (min-width:1400px){.full-1400{width:100%;display:block}.half-1400{width:50%;display:block}.third-1400{width:33.33333%;display:block}.two-third-1400{width:66.66666%;display:block}.fourth-1400{width:25%;display:block}.three-fourth-1400{width:75%;display:block}.fifth-1400{width:20%;display:block}.two-fifth-1400{width:40%;display:block}.three-fifth-1400{width:60%;display:block}.four-fifth-1400{width:80%;display:block}.sixth-1400{width:16.66666%;display:block}}@media (min-width:1500px){.full-1500{width:100%;display:block}.half-1500{width:50%;display:block}.third-1500{width:33.33333%;display:block}.two-third-1500{width:66.66666%;display:block}.fourth-1500{width:25%;display:block}.three-fourth-1500{width:75%;display:block}.fifth-1500{width:20%;display:block}.two-fifth-1500{width:40%;display:block}.three-fifth-1500{width:60%;display:block}.four-fifth-1500{width:80%;display:block}.sixth-1500{width:16.66666%;display:block}}@media (min-width:1600px){.full-1600{width:100%;display:block}.half-1600{width:50%;display:block}.third-1600{width:33.33333%;display:block}.two-third-1600{width:66.66666%;display:block}.fourth-1600{width:25%;display:block}.three-fourth-1600{width:75%;display:block}.fifth-1600{width:20%;display:block}.two-fifth-1600{width:40%;display:block}.three-fifth-1600{width:60%;display:block}.four-fifth-1600{width:80%;display:block}.sixth-1600{width:16.66666%;display:block}}@media (min-width:1700px){.full-1700{width:100%;display:block}.half-1700{width:50%;display:block}.third-1700{width:33.33333%;display:block}.two-third-1700{width:66.66666%;display:block}.fourth-1700{width:25%;display:block}.three-fourth-1700{width:75%;display:block}.fifth-1700{width:20%;display:block}.two-fifth-1700{width:40%;display:block}.three-fifth-1700{width:60%;display:block}.four-fifth-1700{width:80%;display:block}.sixth-1700{width:16.66666%;display:block}}@media (min-width:1800px){.full-1800{width:100%;display:block}.half-1800{width:50%;display:block}.third-1800{width:33.33333%;display:block}.two-third-1800{width:66.66666%;display:block}.fourth-1800{width:25%;display:block}.three-fourth-1800{width:75%;display:block}.fifth-1800{width:20%;display:block}.two-fifth-1800{width:40%;display:block}.three-fifth-1800{width:60%;display:block}.four-fifth-1800{width:80%;display:block}.sixth-1800{width:16.66666%;display:block}}@media (min-width:1900px){.full-1900{width:100%;display:block}.half-1900{width:50%;display:block}.third-1900{width:33.33333%;display:block}.two-third-1900{width:66.66666%;display:block}.fourth-1900{width:25%;display:block}.three-fourth-1900{width:75%;display:block}.fifth-1900{width:20%;display:block}.two-fifth-1900{width:40%;display:block}.three-fifth-1900{width:60%;display:block}.four-fifth-1900{width:80%;display:block}.sixth-1900{width:16.66666%;display:block}}@media (min-width:2000px){.full-2000{width:100%;display:block}.half-2000{width:50%;display:block}.third-2000{width:33.33333%;display:block}.two-third-2000{width:66.66666%;display:block}.fourth-2000{width:25%;display:block}.three-fourth-2000{width:75%;display:block}.fifth-2000{width:20%;display:block}.two-fifth-2000{width:40%;display:block}.three-fifth-2000{width:60%;display:block}.four-fifth-2000{width:80%;display:block}.sixth-2000{width:16.66666%;display:block}}@media (min-width:500px){.none-500{display:none}}@media (min-width:600px){.none-600{display:none}}@media (min-width:700px){.none-700{display:none}}@media (min-width:800px){.none-800{display:none}}@media (min-width:900px){.none-900{display:none}}@media (min-width:1000px){.none-1000{display:none}}@media (min-width:1100px){.none-1100{display:none}}@media (min-width:1200px){.none-1200{display:none}}@media (min-width:1300px){.none-1300{display:none}}@media (min-width:1400px){.none-1400{display:none}}@media (min-width:1500px){.none-1500{display:none}}@media (min-width:1600px){.none-1600{display:none}}@media (min-width:1700px){.none-1700{display:none}}@media (min-width:1800px){.none-1800{display:none}}@media (min-width:1900px){.none-1900{display:none}}@media (min-width:2000px){.none-2000{display:none}}.off-none{margin-left:0}.off-half{margin-left:50%}.off-third{margin-left:33.33333%}.off-two-third{margin-left:66.66666%}.off-fourth{margin-left:25%}.off-three-fourth{margin-left:75%}.off-fifth{margin-left:20%}.off-two-fifth{margin-left:40%}.off-three-fifth{margin-left:60%}.off-four-fifth{margin-left:80%}.off-sixth{margin-left:16.66666%}@media (min-width:500px){.off-none-500{margin-left:0}.off-half-500{margin-left:50%}.off-third-500{margin-left:33.33333%}.off-two-third-500{margin-left:66.66666%}.off-fourth-500{margin-left:25%}.off-three-fourth-500{margin-left:75%}.off-fifth-500{margin-left:20%}.off-two-fifth-500{margin-left:40%}.off-three-fifth-500{margin-left:60%}.off-four-fifth-500{margin-left:80%}.off-sixth-500{margin-left:16.66666%}}@media (min-width:600px){.off-none-600{margin-left:0}.off-half-600{margin-left:50%}.off-third-600{margin-left:33.33333%}.off-two-third-600{margin-left:66.66666%}.off-fourth-600{margin-left:25%}.off-three-fourth-600{margin-left:75%}.off-fifth-600{margin-left:20%}.off-two-fifth-600{margin-left:40%}.off-three-fifth-600{margin-left:60%}.off-four-fifth-600{margin-left:80%}.off-sixth-600{margin-left:16.66666%}}@media (min-width:700px){.off-none-700{margin-left:0}.off-half-700{margin-left:50%}.off-third-700{margin-left:33.33333%}.off-two-third-700{margin-left:66.66666%}.off-fourth-700{margin-left:25%}.off-three-fourth-700{margin-left:75%}.off-fifth-700{margin-left:20%}.off-two-fifth-700{margin-left:40%}.off-three-fifth-700{margin-left:60%}.off-four-fifth-700{margin-left:80%}.off-sixth-700{margin-left:16.66666%}}@media (min-width:800px){.off-none-800{margin-left:0}.off-half-800{margin-left:50%}.off-third-800{margin-left:33.33333%}.off-two-third-800{margin-left:66.66666%}.off-fourth-800{margin-left:25%}.off-three-fourth-800{margin-left:75%}.off-fifth-800{margin-left:20%}.off-two-fifth-800{margin-left:40%}.off-three-fifth-800{margin-left:60%}.off-four-fifth-800{margin-left:80%}.off-sixth-800{margin-left:16.66666%}}@media (min-width:900px){.off-none-900{margin-left:0}.off-half-900{margin-left:50%}.off-third-900{margin-left:33.33333%}.off-two-third-900{margin-left:66.66666%}.off-fourth-900{margin-left:25%}.off-three-fourth-900{margin-left:75%}.off-fifth-900{margin-left:20%}.off-two-fifth-900{margin-left:40%}.off-three-fifth-900{margin-left:60%}.off-four-fifth-900{margin-left:80%}.off-sixth-900{margin-left:16.66666%}}@media (min-width:1000px){.off-none-1000{margin-left:0}.off-half-1000{margin-left:50%}.off-third-1000{margin-left:33.33333%}.off-two-third-1000{margin-left:66.66666%}.off-fourth-1000{margin-left:25%}.off-three-fourth-1000{margin-left:75%}.off-fifth-1000{margin-left:20%}.off-two-fifth-1000{margin-left:40%}.off-three-fifth-1000{margin-left:60%}.off-four-fifth-1000{margin-left:80%}.off-sixth-1000{margin-left:16.66666%}}@media (min-width:1100px){.off-none-1100{margin-left:0}.off-half-1100{margin-left:50%}.off-third-1100{margin-left:33.33333%}.off-two-third-1100{margin-left:66.66666%}.off-fourth-1100{margin-left:25%}.off-three-fourth-1100{margin-left:75%}.off-fifth-1100{margin-left:20%}.off-two-fifth-1100{margin-left:40%}.off-three-fifth-1100{margin-left:60%}.off-four-fifth-1100{margin-left:80%}.off-sixth-1100{margin-left:16.66666%}}@media (min-width:1200px){.off-none-1200{margin-left:0}.off-half-1200{margin-left:50%}.off-third-1200{margin-left:33.33333%}.off-two-third-1200{margin-left:66.66666%}.off-fourth-1200{margin-left:25%}.off-three-fourth-1200{margin-left:75%}.off-fifth-1200{margin-left:20%}.off-two-fifth-1200{margin-left:40%}.off-three-fifth-1200{margin-left:60%}.off-four-fifth-1200{margin-left:80%}.off-sixth-1200{margin-left:16.66666%}}@media (min-width:1300px){.off-none-1300{margin-left:0}.off-half-1300{margin-left:50%}.off-third-1300{margin-left:33.33333%}.off-two-third-1300{margin-left:66.66666%}.off-fourth-1300{margin-left:25%}.off-three-fourth-1300{margin-left:75%}.off-fifth-1300{margin-left:20%}.off-two-fifth-1300{margin-left:40%}.off-three-fifth-1300{margin-left:60%}.off-four-fifth-1300{margin-left:80%}.off-sixth-1300{margin-left:16.66666%}}@media (min-width:1400px){.off-none-1400{margin-left:0}.off-half-1400{margin-left:50%}.off-third-1400{margin-left:33.33333%}.off-two-third-1400{margin-left:66.66666%}.off-fourth-1400{margin-left:25%}.off-three-fourth-1400{margin-left:75%}.off-fifth-1400{margin-left:20%}.off-two-fifth-1400{margin-left:40%}.off-three-fifth-1400{margin-left:60%}.off-four-fifth-1400{margin-left:80%}.off-sixth-1400{margin-left:16.66666%}}@media (min-width:1500px){.off-none-1500{margin-left:0}.off-half-1500{margin-left:50%}.off-third-1500{margin-left:33.33333%}.off-two-third-1500{margin-left:66.66666%}.off-fourth-1500{margin-left:25%}.off-three-fourth-1500{margin-left:75%}.off-fifth-1500{margin-left:20%}.off-two-fifth-1500{margin-left:40%}.off-three-fifth-1500{margin-left:60%}.off-four-fifth-1500{margin-left:80%}.off-sixth-1500{margin-left:16.66666%}}@media (min-width:1600px){.off-none-1600{margin-left:0}.off-half-1600{margin-left:50%}.off-third-1600{margin-left:33.33333%}.off-two-third-1600{margin-left:66.66666%}.off-fourth-1600{margin-left:25%}.off-three-fourth-1600{margin-left:75%}.off-fifth-1600{margin-left:20%}.off-two-fifth-1600{margin-left:40%}.off-three-fifth-1600{margin-left:60%}.off-four-fifth-1600{margin-left:80%}.off-sixth-1600{margin-left:16.66666%}}@media (min-width:1700px){.off-none-1700{margin-left:0}.off-half-1700{margin-left:50%}.off-third-1700{margin-left:33.33333%}.off-two-third-1700{margin-left:66.66666%}.off-fourth-1700{margin-left:25%}.off-three-fourth-1700{margin-left:75%}.off-fifth-1700{margin-left:20%}.off-two-fifth-1700{margin-left:40%}.off-three-fifth-1700{margin-left:60%}.off-four-fifth-1700{margin-left:80%}.off-sixth-1700{margin-left:16.66666%}}@media (min-width:1800px){.off-none-1800{margin-left:0}.off-half-1800{margin-left:50%}.off-third-1800{margin-left:33.33333%}.off-two-third-1800{margin-left:66.66666%}.off-fourth-1800{margin-left:25%}.off-three-fourth-1800{margin-left:75%}.off-fifth-1800{margin-left:20%}.off-two-fifth-1800{margin-left:40%}.off-three-fifth-1800{margin-left:60%}.off-four-fifth-1800{margin-left:80%}.off-sixth-1800{margin-left:16.66666%}}@media (min-width:1900px){.off-none-1900{margin-left:0}.off-half-1900{margin-left:50%}.off-third-1900{margin-left:33.33333%}.off-two-third-1900{margin-left:66.66666%}.off-fourth-1900{margin-left:25%}.off-three-fourth-1900{margin-left:75%}.off-fifth-1900{margin-left:20%}.off-two-fifth-1900{margin-left:40%}.off-three-fifth-1900{margin-left:60%}.off-four-fifth-1900{margin-left:80%}.off-sixth-1900{margin-left:16.66666%}}@media (min-width:2000px){.off-none-2000{margin-left:0}.off-half-2000{margin-left:50%}.off-third-2000{margin-left:33.33333%}.off-two-third-2000{margin-left:66.66666%}.off-fourth-2000{margin-left:25%}.off-three-fourth-2000{margin-left:75%}.off-fifth-2000{margin-left:20%}.off-two-fifth-2000{margin-left:40%}.off-three-fifth-2000{margin-left:60%}.off-four-fifth-2000{margin-left:80%}.off-sixth-2000{margin-left:16.66666%}}nav{position:fixed;top:0;left:0;right:0;height:3em;padding:0 .6em;background:#fff;box-shadow:0 0 .2em rgba(17,17,17,.2);z-index:10000;transition:all .3s;transform-style:preserve-3d}nav .brand,nav .burger,nav .menu{float:right;position:relative;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}nav .brand{font-weight:700;float:left;padding:0 .6em;max-width:50%;white-space:nowrap;color:#111}nav .brand *{vertical-align:middle}nav .logo{height:2em;margin-right:.3em}nav .select:after{height:calc(100% - 1px);padding:0;line-height:2.4em}nav .menu>*{margin-right:.6em}nav .burger{display:none}@media (max-width:60em){nav .burger{display:inline-block;cursor:pointer;bottom:-1000em;margin:0}nav .burger~.menu,nav .show:checked~.burger{position:fixed;min-height:100%;width:0;overflow:hidden;top:0;right:0;bottom:-1000em;margin:0;background:#fff;transition:all .3s ease;transform:none}nav .burger~.menu{z-index:11}nav .show:checked~.burger{color:transparent;width:100%;border-radius:0;background:rgba(0,0,0,.2);transition:all .3s ease}nav .show:checked~.menu{width:70%;overflow:auto;transition:all .3s ease;height:100vh}nav .burger~.menu>*{display:block;margin:.3em;text-align:left;max-width:calc(100% - .6em)}nav .burger~.menu>a{padding:.3em .9em}}.stack,.stack .toggle{margin-top:0;margin-bottom:0;display:block;width:100%;text-align:left;border-radius:0}.stack:first-child,.stack:first-child .toggle{border-top-left-radius:.2em;border-top-right-radius:.2em}.stack:last-child,.stack:last-child .toggle{border-bottom-left-radius:.2em;border-bottom-right-radius:.2em}input.stack,select.stack,textarea.stack{transition:border-bottom 0 ease 0;border-bottom-width:0}input.stack:last-child,select.stack:last-child,textarea.stack:last-child{border-bottom-width:1px}input.stack:focus+input,input.stack:focus+select,input.stack:focus+textarea,select.stack:focus+input,select.stack:focus+select,select.stack:focus+textarea,textarea.stack:focus+input,textarea.stack:focus+select,textarea.stack:focus+textarea{border-top-color:#0074d9}.card,.modal .overlay~*{position:relative;box-shadow:0;border-radius:.2em;border:1px solid #ccc;overflow:hidden;text-align:left;background:#fff;margin-bottom:.6em;padding:0;transition:all .3s ease}.hidden.card,.modal .overlay:checked+*,.modal .overlay~.hidden,.modal .overlay~:checked+*,:checked+.card{font-size:0;padding:0;margin:0;border:0}.card>*,.modal .overlay~*>*{max-width:100%;display:block}.card>:last-child,.modal .overlay~*>:last-child{margin-bottom:0}.card>p,.card header,.card section,.modal .overlay~*>p,.modal .overlay~* header,.modal .overlay~* section{padding:.6em .8em}.card section,.modal .overlay~* section{padding:.6em .8em 0}.card hr,.modal .overlay~* hr{border:none;height:1px;background-color:#eee}.card header,.modal .overlay~* header{font-weight:700;position:relative;border-bottom:1px solid #eee}.card header h1,.card header h2,.card header h3,.card header h4,.card header h5,.card header h6,.modal .overlay~* header h1,.modal .overlay~* header h2,.modal .overlay~* header h3,.modal .overlay~* header h4,.modal .overlay~* header h5,.modal .overlay~* header h6{padding:0;margin:0 2em 0 0;line-height:1;display:inline-block;vertical-align:text-bottom}.card header:last-child,.modal .overlay~* header:last-child{border-bottom:0}.card footer,.modal .overlay~* footer{padding:.8em}.card p,.modal .overlay~* p{margin:.3em 0}.card p:first-child,.modal .overlay~* p:first-child{margin-top:0}.card p:last-child,.modal .overlay~* p:last-child{margin-bottom:0}.card>p,.modal .overlay~*>p{margin:0;padding-right:2.5em}.card .close,.modal .overlay~* .close{position:absolute;top:.4em;right:.3em;font-size:1.2em;padding:0 .5em;cursor:pointer;width:auto}.card .close:hover,.modal .overlay~* .close:hover{color:#ff4136}.card h1+.close,.modal .overlay~* h1+.close{margin:.2em}.card h2+.close,.modal .overlay~* h2+.close{margin:.1em}.card .dangerous,.modal .overlay~* .dangerous{background:#ff4136;float:right}.modal{text-align:center}.modal>input{display:none}.modal>input~*{opacity:0;max-height:0;overflow:hidden}.modal .overlay{top:0;left:0;bottom:0;right:0;position:fixed;margin:0;border-radius:0;background:rgba(17,17,17,.6);transition:all .3s;z-index:100000}.modal .overlay:after,.modal .overlay:before{display:none}.modal .overlay~*{border:0;position:fixed;top:50%;left:50%;transform:translateX(-50%) translateY(-50%) scale(.2);z-index:1000000;transition:all .3s}.modal>input:checked~*{display:block;opacity:1;max-height:10000px;transition:all .3s}.modal>input:checked~.overlay~*{max-height:90%;overflow:auto;-webkit-transform:translateX(-50%) translateY(-50%) scale(1);transform:translateX(-50%) translateY(-50%) scale(1)}@media (max-width:60em){.modal .overlay~*{min-width:90%}}.dropimage{position:relative;display:block;padding:0 0 56.25%;overflow:hidden;cursor:pointer;border:0;margin:.3em 0;border-radius:.2em;background-color:#ddd;background-size:cover;background-position:50%;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2NDAiIGhlaWdodD0iNjQwIj48ZyBmaWxsPSIjMzMzIj48cGF0aCBkPSJNMTg3IDIzMGMtMTIgMC0yMiAxMC0yMiAyMnYxNTZjMCAxMiAxMCAyMiAyMiAyMmgyNzZjMTIgMCAyMi0xMCAyMi0yMlYyNTJjMC0xMi0xMC0yMi0yMi0yMkgxODd6bTE3MyAyNmE3MCA3MiAwIDAgMSA3MCA3MiA3MCA3MiAwIDAgMS03MCA3MiA3MCA3MiAwIDAgMS03MC03MiA3MCA3MiAwIDAgMSA3MC03MnoiLz48Y2lyY2xlIGN4PSIzNjAiIGN5PSIzMzAiIHI9IjQxIi8+PHBhdGggZD0iTTIwNSAyMjVsNS0xMGgyMGw1IDEwaC0zME0yODUgMjAwbC0xNSAyNWgxMDZsLTE1LTI1aC03NnptMjUgNWgyN3YxM2gtMjd2LTEzek00MDUgMjI1bDUtMTBoMjBsNSAxMGgtMzAiLz48L2c+PC9zdmc+)}.dropimage input{left:0;width:100%;height:100%;border:0;margin:0;padding:0;opacity:0;cursor:pointer;position:absolute}.tabs{position:relative;overflow:hidden}.tabs>label img{float:left;margin-left:.6em}.tabs>.row{width:calc(100% + 1.2em);display:table;table-layout:fixed;position:relative;padding-left:0;transition:all .3s;border-spacing:0;margin:0}.tabs>.row:after,.tabs>.row:before{display:none}.tabs>.row>*,.tabs>.row img{display:table-cell;vertical-align:top;margin:0;width:100%}.tabs>input{display:none}.tabs>input+*{width:100%}.tabs>input+label{width:auto}.two.tabs>.row{width:200%;left:-100%}.two.tabs>input:first-of-type:checked~.row{margin-left:100%}.two.tabs>label img{width:48%;margin:4% 0 4% 4%}.three.tabs>.row{width:300%;left:-200%}.three.tabs>input:first-of-type:checked~.row{margin-left:200%}.three.tabs>input:nth-of-type(2):checked~.row{margin-left:100%}.three.tabs>label img{width:30%;margin:5% 0 5% 5%}.four.tabs>.row{width:400%;left:-300%}.four.tabs>input:first-of-type:checked~.row{margin-left:300%}.four.tabs>input:nth-of-type(2):checked~.row{margin-left:200%}.four.tabs>input:nth-of-type(3):checked~.row{margin-left:100%}.four.tabs>label img{width:22%;margin:4% 0 4% 4%}.tabs>label:first-of-type img{margin-left:0}[data-tooltip]{position:relative}[data-tooltip]:after,[data-tooltip]:before{position:absolute;z-index:10;opacity:0;border-width:0;height:0;padding:0;overflow:hidden;transition:opacity .6s ease,height 0s ease .6s;top:calc(100% - 6px);left:0;margin-top:12px}[data-tooltip]:after{margin-left:0;font-size:.8em;background:#111;content:attr(data-tooltip);white-space:nowrap}[data-tooltip]:before{content:"";width:0;height:0;border:0 solid transparent;border-bottom-color:#111;margin-top:0;left:10px}[data-tooltip]:focus:after,[data-tooltip]:focus:before,[data-tooltip]:hover:after,[data-tooltip]:hover:before{opacity:1;border-width:6px;height:auto}[data-tooltip]:focus:after,[data-tooltip]:hover:after{padding:.45em .9em}.tooltip-top:after,.tooltip-top:before{top:auto;bottom:calc(100% - 6px);left:0;margin-bottom:12px}.tooltip-top:before{border-color:#111 transparent transparent;margin-bottom:0;left:10px}.tooltip-right:after,.tooltip-right:before{left:100%;margin-left:6px;margin-top:0;top:0}.tooltip-right:before{border-color:transparent #111 transparent transparent;margin-left:-6px;left:100%;top:7px}.tooltip-left:after,.tooltip-left:before{right:100%;margin-right:6px;left:auto;margin-top:0;top:0}.tooltip-left:before{border-color:transparent transparent transparent #111;margin-right:-6px;right:100%;top:7px} \ No newline at end of file diff --git a/packages/cssnano-preset-default/src/__tests__/integrations/schema-v2.0.1.css b/packages/cssnano-preset-default/src/__tests__/integrations/schema-v2.0.1.css index 45321c7c3..62d35b3e4 100644 --- a/packages/cssnano-preset-default/src/__tests__/integrations/schema-v2.0.1.css +++ b/packages/cssnano-preset-default/src/__tests__/integrations/schema-v2.0.1.css @@ -1,2 +1,2 @@ -body{background-color:#fff;color:#333;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-weight:400;font-size:16px;font-size:1rem;line-height:1.3125;padding:0;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%}*,:after,:before{-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}a{color:#3498db;text-decoration:none;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}a:hover{color:#1d6fa5;text-decoration:underline}ol,ul{margin:0;list-style:none;padding:0}hr{border:none;border-top:1px solid #eee;height:1px;margin:1rem 0;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}h1,h2,h3,h4,h5,h6,p{margin:1.3125rem 0}h1,h2,h3,h4,h5,h6{font-family:inherit;text-rendering:optimizelegibility;color:#333;margin-bottom:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit;font-family:inherit}h1.heading,h1.title,h3.heading,h3.title{font-family:inherit;color:inherit}.h1,h1{font-size:36px;font-size:2.25rem;line-height:1.4}.h2,h2{font-size:31px;font-size:1.9375rem;line-height:1.2}.h3,h3{font-size:24px;font-size:1.5rem;line-height:1}.h4,h4{font-size:18px;font-size:1.125rem;line-height:1.2}.h5,h5{font-size:14px;font-size:.875rem}.h6,h6{font-size:12px;font-size:.75rem;line-height:.875}.subheader{color:inherit;text-transform:uppercase}blockquote{font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-size:16px;font-size:1rem;margin-top:.625rem;margin-bottom:.625rem;margin-left:3.125rem;padding-left:1rem;border-left:5px solid #3498db}blockquote cite{font-weight:700}p{color:inherit;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-size:16px;font-size:1rem;line-height:1.3125}.lead,p.lead{font-size:21px;font-size:1.3125rem;font-weight:700}button{border:none}.nav>li>a:hover.btn-danger-outline,.nav>li>a:hover.btn-default-outline,.nav>li>a:hover.btn-info-outline,.nav>li>a:hover.btn-primary-outline,.nav>li>a:hover.btn-success-outline,.nav>li>a:hover.btn-warning-outline,a.btn-danger,a.btn-danger-outline:hover,a.btn-info,a.btn-info-outline:hover,a.btn-primary,a.btn-primary-outline:hover,a.btn-success,a.btn-success-outline:hover,a.btn-warning,a.btn-warning-outline:hover,a:hover.btn-danger,a:hover.btn-danger-gradient,a:hover.btn-info,a:hover.btn-info-gradient,a:hover.btn-info-outline,a:hover.btn-primary,a:hover.btn-primary-gradient,a:hover.btn-primary-outline,a:hover.btn-success,a:hover.btn-success-gradient,a:hover.btn-success-outline,a:hover.btn-warning,a:hover.btn-warning-gradient,a:hover.btn-warning-outline{text-decoration:none;color:#fff}.btn>i:before{margin-right:.5rem}.btn{padding:.5rem .875rem;font-size:1rem;line-height:1.3125;border-radius:6px;color:#777;border:1px solid transparent;display:inline-block;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-weight:400;cursor:pointer;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.25);-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-lg{padding:.875rem 1.5rem;font-size:1.25rem;line-height:1.70625}.btn-lg,.btn-sm{border-radius:6px}.btn-sm{padding:.4rem .6rem;font-size:.875rem;line-height:1rem}.btn-pill{-webkit-border-radius:24px;-moz-border-radius:24px;-ms-border-radius:24px;-o-border-radius:24px;border-radius:24px}.btn-link{background:transparent;background-color:transparent;border-color:transparent;color:inherit;text-shadow:none}.btn-full{display:block;width:100%}a.btn-default,a:hover.btn-default-gradient{color:#777;text-decoration:none}.btn-default,.nav>li>a.btn-default{color:#777;background-color:#fff;border-color:#ccc;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-default:hover,.nav>li>a.btn-default:hover{background-color:#f2f2f2;border-color:#bfbfbf}.btn-default:active,.nav>li>a.btn-default:active{color:#777;background-color:#e9e9e9;border-color:#b6b6b6;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-default-outline,.default-outline{color:#777;background-color:transparent;border-color:#777;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-default-outline:hover,.default-outline:hover{background-color:transparent;border-color:#6a6a6a}.btn-default-outline:active,.default-outline:active{color:#777;background-color:transparent;border-color:#616161;outline:0}.btn-default-outline:hover,.default-outline:hover{border-color:#777;color:#fff;background-color:#777;text-decoration:none}.btn-default-outline:active,.default-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-default-gradient,.default-gradient{background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f5f5f5),color-stop(1,#fff));background:-ms-linear-gradient(bottom,#f5f5f5,#fff);background:-moz-linear-gradient(center bottom,#f5f5f5 0,#fff 100%);background:-o-linear-gradient(#fff,#f5f5f5);background-image:linear-gradient(top,#f5f5f5,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#f5f5f5",GradientType=0);border:1px solid #ccc;text-shadow:0 1px 0 #fff}.btn-default-gradient:hover,.default-gradient:hover{background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f5f5f5),color-stop(1,#f5f5f5));background:-ms-linear-gradient(bottom,#f5f5f5,#f5f5f5);background:-moz-linear-gradient(center bottom,#f5f5f5 0,#f5f5f5 100%);background:-o-linear-gradient(#f5f5f5,#f5f5f5);background-image:linear-gradient(top,#f5f5f5,#f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f5f5f5",endColorstr="#f5f5f5",GradientType=0)}.btn-default-gradient:active,.default-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-primary,.nav>li>a.btn-primary{color:#fff;background-color:#3498db;border-color:#2386c8;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-primary:hover,.nav>li>a.btn-primary:hover{background-color:#258cd1;border-color:#2077b2}.btn-primary:active,.nav>li>a.btn-primary:active{color:#fff;background-color:#2282c1;border-color:#1d6da3;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-primary-outline,.primary-outline{color:#3498db;background-color:transparent;border-color:#3498db;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-primary-outline:hover,.primary-outline:hover{background-color:transparent;border-color:#258cd1}.btn-primary-outline:active,.primary-outline:active{color:#3498db;background-color:transparent;border-color:#2282c1;outline:0}.btn-primary-outline:hover,.primary-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#3498db}.btn-primary-outline:active,.primary-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-primary-gradient,.primary-gradient{background:#3498db;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#2b94d9),color-stop(1,#8bc4ea));background:-ms-linear-gradient(bottom,#2b94d9,#8bc4ea);background:-moz-linear-gradient(center bottom,#2b94d9 0,#8bc4ea 100%);background:-o-linear-gradient(#8bc4ea,#2b94d9);background-image:linear-gradient(top,#2b94d9,#8bc4ea);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#8bc4ea",endColorstr="#2b94d9",GradientType=0);color:#fff;border:1px solid #3498db}.btn-primary-gradient:hover,.primary-gradient:hover{background:#3498db;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3498db),color-stop(1,#3498db));background:-ms-linear-gradient(bottom,#3498db,#3498db);background:-moz-linear-gradient(center bottom,#3498db 0,#3498db 100%);background:-o-linear-gradient(#3498db,#3498db);background-image:linear-gradient(top,#3498db,#3498db);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3498db",endColorstr="#3498db",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-primary-gradient:active,.primary-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-danger,.nav>li>a.btn-danger{color:#fff;background-color:#e74c3c;border-color:#e32f1c;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-danger:hover,.nav>li>a.btn-danger:hover{background-color:#e43725;border-color:#cd2a19}.btn-danger:active,.nav>li>a.btn-danger:active{color:#fff;background-color:#dd2d1b;border-color:#bd2717;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-danger-outline,.danger-outline{color:#e74c3c;background-color:transparent;border-color:#e74c3c;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-danger-outline:hover,.danger-outline:hover{background-color:transparent;border-color:#e43725}.btn-danger-outline:active,.danger-outline:active{color:#e74c3c;background-color:transparent;border-color:#dd2d1b;outline:0}.btn-danger-outline:hover,.danger-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#e74c3c}.btn-danger-outline:active,.danger-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-danger-gradient,.danger-gradient{background:#e74c3c;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#e64433),color-stop(1,#f29f97));background:-ms-linear-gradient(bottom,#e64433,#f29f97);background:-moz-linear-gradient(center bottom,#e64433 0,#f29f97 100%);background:-o-linear-gradient(#f29f97,#e64433);background-image:linear-gradient(top,#e64433,#f29f97);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f29f97",endColorstr="#e64433",GradientType=0);color:#fff;border:1px solid #e74c3c}.btn-danger-gradient:hover,.danger-gradient:hover{background:#e74c3c;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#e74c3c),color-stop(1,#e74c3c));background:-ms-linear-gradient(bottom,#e74c3c,#e74c3c);background:-moz-linear-gradient(center bottom,#e74c3c 0,#e74c3c 100%);background:-o-linear-gradient(#e74c3c,#e74c3c);background-image:linear-gradient(top,#e74c3c,#e74c3c);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#e74c3c",endColorstr="#e74c3c",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-danger-gradient:active,.danger-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-info,.nav>li>a.btn-info{color:#fff;background-color:#24cabc;border-color:#1faca0;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-info:hover,.nav>li>a.btn-info:hover{background-color:#20b4a8;border-color:#1b968c}.btn-info:active,.nav>li>a.btn-info:active{color:#fff;background-color:#1da59a;border-color:#18877e;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-info-outline,.info-outline{color:#24cabc;background-color:transparent;border-color:#24cabc;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-info-outline:hover,.info-outline:hover{background-color:transparent;border-color:#20b4a8}.btn-info-outline:active,.info-outline:active{color:#24cabc;background-color:transparent;border-color:#1da59a;outline:0}.btn-info-outline:hover,.info-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#24cabc}.btn-info-outline:active,.info-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-info-gradient,.info-gradient{background:#24cabc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#22c1b4),color-stop(1,#6fe5db));background:-ms-linear-gradient(bottom,#22c1b4,#6fe5db);background:-moz-linear-gradient(center bottom,#22c1b4 0,#6fe5db 100%);background:-o-linear-gradient(#6fe5db,#22c1b4);background-image:linear-gradient(top,#22c1b4,#6fe5db);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#6fe5db",endColorstr="#22c1b4",GradientType=0);color:#fff;border:1px solid #24cabc}.btn-info-gradient:hover,.info-gradient:hover{background:#24cabc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#24cabc),color-stop(1,#24cabc));background:-ms-linear-gradient(bottom,#24cabc,#24cabc);background:-moz-linear-gradient(center bottom,#24cabc 0,#24cabc 100%);background:-o-linear-gradient(#24cabc,#24cabc);background-image:linear-gradient(top,#24cabc,#24cabc);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#24cabc",endColorstr="#24cabc",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-info-gradient:active,.info-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-warning,.nav>li>a.btn-warning{color:#fff;background-color:#f39c12;border-color:#d6880b;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-warning:hover,.nav>li>a.btn-warning:hover{background-color:#e08e0b;border-color:#be780a}.btn-warning:active,.nav>li>a.btn-warning:active{color:#fff;background-color:#cf830a;border-color:#ad6e09;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-warning-outline,.warning-outline{color:#f39c12;background-color:transparent;border-color:#f39c12;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-warning-outline:hover,.warning-outline:hover{background-color:transparent;border-color:#e08e0b}.btn-warning-outline:active,.warning-outline:active{color:#f39c12;background-color:transparent;border-color:#cf830a;outline:0}.btn-warning-outline:hover,.warning-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#f39c12}.btn-warning-outline:active,.warning-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-warning-gradient,.warning-gradient{background:#f39c12;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ef970c),color-stop(1,#f8c573));background:-ms-linear-gradient(bottom,#ef970c,#f8c573);background:-moz-linear-gradient(center bottom,#ef970c 0,#f8c573 100%);background:-o-linear-gradient(#f8c573,#ef970c);background-image:linear-gradient(top,#ef970c,#f8c573);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8c573",endColorstr="#ef970c",GradientType=0);color:#fff;border:1px solid #f39c12}.btn-warning-gradient:hover,.warning-gradient:hover{background:#f39c12;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f39c12),color-stop(1,#f39c12));background:-ms-linear-gradient(bottom,#f39c12,#f39c12);background:-moz-linear-gradient(center bottom,#f39c12 0,#f39c12 100%);background:-o-linear-gradient(#f39c12,#f39c12);background-image:linear-gradient(top,#f39c12,#f39c12);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f39c12",endColorstr="#f39c12",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-warning-gradient:active,.warning-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-success,.nav>li>a.btn-success{color:#fff;background-color:#2ecc71;border-color:#27af61;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-success:hover,.nav>li>a.btn-success:hover{background-color:#29b765;border-color:#239a55}.btn-success:active,.nav>li>a.btn-success:active{color:#fff;background-color:#26a95d;border-color:#1f8b4d;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-success-outline,.success-outline{color:#2ecc71;background-color:transparent;border-color:#2ecc71;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-success-outline:hover,.success-outline:hover{background-color:transparent;border-color:#29b765}.btn-success-outline:active,.success-outline:active{color:#2ecc71;background-color:transparent;border-color:#26a95d;outline:0}.btn-success-outline:hover,.success-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#2ecc71}.btn-success-outline:active,.success-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-success-gradient,.success-gradient{background:#2ecc71;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#2cc46c),color-stop(1,#7ee2a8));background:-ms-linear-gradient(bottom,#2cc46c,#7ee2a8);background:-moz-linear-gradient(center bottom,#2cc46c 0,#7ee2a8 100%);background:-o-linear-gradient(#7ee2a8,#2cc46c);background-image:linear-gradient(top,#2cc46c,#7ee2a8);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#7ee2a8",endColorstr="#2cc46c",GradientType=0);color:#fff;border:1px solid #2ecc71}.btn-success-gradient:hover,.success-gradient:hover{background:#2ecc71;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#2ecc71),color-stop(1,#2ecc71));background:-ms-linear-gradient(bottom,#2ecc71,#2ecc71);background:-moz-linear-gradient(center bottom,#2ecc71 0,#2ecc71 100%);background:-o-linear-gradient(#2ecc71,#2ecc71);background-image:linear-gradient(top,#2ecc71,#2ecc71);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#2ecc71",endColorstr="#2ecc71",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-success-gradient:active,.success-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}[class^=col]{float:left;min-height:1px;margin-left:1.25rem}@media screen and (max-width:47.9375rem){[class^=col]{float:none;width:100%;margin-left:0}}@media screen and (min-width:75rem){[class^=col]{margin-left:1.875rem}}.row{margin-left:-1.25rem;*zoom:1}@media screen and (min-width:75rem){.row{margin-left:-1.875rem;*zoom:1}}@media screen and (max-width:47.9375rem){.row{margin-left:0}}.row:after,.row:before{display:table;line-height:0;content:""}.row:after{clear:both}.container{width:940px;width:58.75rem}@media screen and (max-width:47.9375rem){.container{width:95%;width:auto;float:none}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.container{width:724px;width:45.25rem}}@media screen and (min-width:75rem){.container{width:1170px;width:73.125rem}}.col12{width:940px;width:58.75rem}@media screen and (min-width:75rem){.col12{width:1170px;width:73.125rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col12{width:724px;width:45.25rem}}@media screen and (max-width:47.9375rem){.col12{width:100%}}.col11{width:860px;width:53.75rem}@media screen and (min-width:75rem){.col11{width:1070px;width:66.875rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col11{width:662px;width:41.375rem}}@media screen and (max-width:47.9375rem){.col11{width:100%}}.col10{width:780px;width:48.75rem}@media screen and (min-width:75rem){.col10{width:970px;width:60.625rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col10{width:600px;width:37.5rem}}@media screen and (max-width:47.9375rem){.col10{width:100%}}.col9{width:700px;width:43.75rem}@media screen and (min-width:75rem){.col9{width:870px;width:54.375rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col9{width:538px;width:33.625rem}}@media screen and (max-width:47.9375rem){.col9{width:100%}}.col8{width:620px;width:38.75rem}@media screen and (min-width:75rem){.col8{width:770px;width:48.125rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col8{width:476px;width:29.75rem}}@media screen and (max-width:47.9375rem){.col8{width:100%}}.col7{width:540px;width:33.75rem}@media screen and (min-width:75rem){.col7{width:670px;width:41.875rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col7{width:414px;width:25.875rem}}@media screen and (max-width:47.9375rem){.col7{width:100%}}.col6{width:460px;width:28.75rem}@media screen and (min-width:75rem){.col6{width:570px;width:35.625rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col6{width:352px;width:22rem}}@media screen and (max-width:47.9375rem){.col6{width:100%}}.col5{width:380px;width:23.75rem}@media screen and (min-width:75rem){.col5{width:470px;width:29.375rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col5{width:290px;width:18.125rem}}@media screen and (max-width:47.9375rem){.col5{width:100%}}.col4{width:300px;width:18.75rem}@media screen and (min-width:75rem){.col4{width:370px;width:23.125rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col4{width:228px;width:14.25rem}}@media screen and (max-width:47.9375rem){.col4{width:100%}}.col3{width:220px;width:13.75rem}@media screen and (min-width:75rem){.col3{width:270px;width:16.875rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col3{width:166px;width:10.375rem}}@media screen and (max-width:47.9375rem){.col3{width:100%}}.col2{width:140px;width:8.75rem}@media screen and (min-width:75rem){.col2{width:170px;width:10.625rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col2{width:104px;width:6.5rem}}@media screen and (max-width:47.9375rem){.col2{width:100%}}.col1{width:60px;width:3.75rem}@media screen and (min-width:75rem){.col1{width:70px;width:4.375rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col1{width:42px;width:2.625rem}}@media screen and (max-width:47.9375rem){.col1{width:100%}}.offset12{width:980px;width:61.25rem}.offset11{width:900px;width:56.25rem}.offset10{width:820px;width:51.25rem}.offset9{width:740px;width:46.25rem}.offset8{width:660px;width:41.25rem}.offset7{width:580px;width:36.25rem}.offset6{width:500px;width:31.25rem}.offset5{width:420px;width:26.25rem}.offset4{width:340px;width:21.25rem}.offset3{width:260px;width:16.25rem}.offset2{width:180px;width:11.25rem}.offset1{width:100px;width:6.25rem}@media (min-width:768px) and (max-width:979px){.offset12{width:764px;width:47.75rem}.offset11{width:702px;width:43.875rem}.offset10{width:640px;width:40rem}.offset9{width:578px;width:36.125rem}.offset8{width:516px;width:32.25rem}.offset7{width:454px;width:28.375rem}.offset6{width:392px;width:24.5rem}.offset5{width:330px;width:20.625rem}.offset4{width:268px;width:16.75rem}.offset3{width:206px;width:12.875rem}.offset2{width:144px;width:9rem}.offset1{width:82px;width:5.125rem}.row-fluid{width:100%;*zoom:1}.row-fluid:after{clear:both}.row-fluid [class^=col]{display:block;float:left;width:100%;min-height:30px;margin-left:2.76%;*margin-left:2.7%;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.row-fluid [class^=col]:first-child{margin-left:0}.row-fluid .controls-row [class^=col]+[class^=col]{margin-left:2.76%}.row-fluid .col12{width:100%}.row-fluid .col11{width:91.43%}.row-fluid .col10{width:82.87%}.row-fluid .col9{width:74.3%}.row-fluid .col8{width:65.74%}.row-fluid .col7{width:57.18%}.row-fluid .col6{width:48.61%}.row-fluid .col5{width:40.05%}.row-fluid .col4{width:31.49}.row-fluid .col3{width:22.92%}.row-fluid .col2{width:14.36%}.row-fluid .col1{width:5.8%}.row-fluid .offset12{margin-left:105.52%}.row-fluid .offset12:first-child{margin-left:102.76%}.row-fluid .offset11{margin-left:96.96%}.row-fluid .offset11:first-child{margin-left:94.19%}.row-fluid .offset10{margin-left:88.39%}.row-fluid .offset10:first-child{margin-left:85.63%}.row-fluid .offset9{margin-left:79.83%}.row-fluid .offset9:first-child{margin-left:77.07%}.row-fluid .offset8{margin-left:71.27%}.row-fluid .offset8:first-child{margin-left:68.5%}.row-fluid .offset7{margin-left:62.7}.row-fluid .offset7:first-child{margin-left:59.94%}.row-fluid .offset6{margin-left:54.148%}.row-fluid .offset6:first-child{margin-left:51.38%}.row-fluid .offset5{margin-left:45.58%}.row-fluid .offset5:first-child{margin-left:42.81%}.row-fluid .offset4{margin-left:37.01%}.row-fluid .offset4:first-child{margin-left:34.25%}.row-fluid .offset3{margin-left:28.45%}.row-fluid .offset3:first-child{margin-left:25.69%}.row-fluid .offset2{margin-left:19.88%}.row-fluid .offset2:first-child{margin-left:17.12%}.row-fluid .offset1{margin-left:11.32%}.row-fluid .offset1:first-child{margin-left:8.56%}}@media (min-width:768px) and (max-width:979px) and screen and (max-width:47.9375rem){.row-fluid [class^=col]{margin-left:0}}.row-fluid{width:100%;*zoom:1}.row-fluid:after,.row-fluid:before{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class^=col]{display:block;float:left;width:100%;min-height:30px;margin-left:2.12%;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.row-fluid [class^=col]:first-child{margin-left:0}.row-fluid .controls-row [class^=col]+[class^=col]{margin-left:2.12%}.row-fluid .col12{width:100%}.row-fluid .col11{width:91.48%}.row-fluid .col10{width:82.97%}.row-fluid .col9{width:74.46%}.row-fluid .col8{width:65.95%}.row-fluid .col7{width:57.44%}.row-fluid .col6{width:48.93%}.row-fluid .col5{width:40.42%}.row-fluid .col4{width:31.91%}.row-fluid .col3{width:23.4%}.row-fluid .col2{width:14.895%}.row-fluid .col1{width:6.38%}.row-fluid .offset12{margin-left:104.25%}.row-fluid .offset12:first-child{margin-left:102.12%}.row-fluid .offset11{margin-left:95.74%}.row-fluid .offset11:first-child{margin-left:93.61%}.row-fluid .offset10{margin-left:87.23%}.row-fluid .offset10:first-child{margin-left:85.1%}.row-fluid .offset9{margin-left:78.72%}.row-fluid .offset9:first-child{margin-left:76.59%}.row-fluid .offset8{margin-left:70.21%}.row-fluid .offset8:first-child{margin-left:68.08%}.row-fluid .offset7{margin-left:61.7%}.row-fluid .offset7:first-child{margin-left:59.57%}.row-fluid .offset6{margin-left:53.195%}.row-fluid .offset6:first-child{margin-left:51.06%}.row-fluid .offset5{margin-left:44.68%}.row-fluid .offset5:first-child{margin-left:42.55%}.row-fluid .offset4{margin-left:36.17%}.row-fluid .offset4:first-child{margin-left:34.04%}.row-fluid .offset3{margin-left:27.65%}.row-fluid .offset3:first-child{margin-left:25.53%}.row-fluid .offset2{margin-left:19.14%}.row-fluid .offset2:first-child{margin-left:17.02%}.row-fluid .offset1{margin-left:10.63%}.row-fluid .offset1:first-child{margin-left:8.51%}@media screen and (max-width:47.9375rem){.row-fluid{width:100%}.row-fluid [class^=col],.uneditable-input[class^=col],[class^=col]{display:block;float:none;width:100%;margin-left:0;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}}.row-fluid [class^=col].hide,[class^=col].hide{display:none}.row-fluid [class^=col].pull-right,[class^=col].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:after,.container:before{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:1.25rem;padding-left:1.25rem;*zoom:1}.container-fluid:after,.container-fluid:before{display:table;line-height:0;content:""}.container-fluid:after{clear:both}.alert{color:inherit;border:1px solid transparent;display:block;padding:1rem;background-color:#ecfbf2;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px}.alert>h4{color:inherit;margin-top:0}.alert>p{color:inherit;margin:0}.alert i{float:right}.alert a{text-decoration:underline}.alert a:hover{text-decoration:none}.alert .btn{margin-top:1.4rem}.alert .fa:before,.alert i:before{margin-top:3px;display:inline-block}.alert a,.alert a:hover,span.close{color:inherit;font-weight:700}span.close{float:right;cursor:pointer}.table{width:100%;max-width:100%;border-spacing:0;border-collapse:collapse;display:table;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;color:#777}.table-bordered{border:1px solid #ccc}.table-stripe>tbody>tr:nth-child(odd)>td{background-color:#f9f9f9}.table-stripe.table-bordered>thead>tr>th{background-color:#fff}.table.table-condensed>tbody>tr>td,.table.table-condensed>thead>tr>th{padding:.41666667rem .66666667rem}@media screen and (max-width:47.9375rem){.responsive-table{width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}}.table>tr{display:table-row;vertical-align:inherit;border-color:inherit}.table-bordered>tbody>tr>td,.table-bordered>thead>tr>th{border:1px solid #ccc}.table-bordered>thead>tr>th{background-color:#f9f9f9;box-shadow:inset 0 2px 0 hsla(0,0%,100%,.92)}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ccc;color:#555}.table-bordered>thead>tr>th{border-bottom-width:1px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:.75rem;line-height:1.3125;vertical-align:middle;border-top:1px solid #ccc;text-align:left}.table-hover>tbody>tr:hover,.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr>td:hover,.table-hover>tfoot>tr:hover,.table-hover>tfoot>tr:hover>td,.table-hover>tfoot>tr>td:hover,.table-hover>thead>tr:hover>td{background-color:#f9f9f9;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody>tr.is-primary>td,.table>tbody>tr:hover.is-primary>td{background-color:#eaf4fb;color:#196090}.table>tbody>tr.is-success>td,.table>tbody>tr:hover.is-success>td{background-color:#e2f8eb;color:#1b7943}.table>tbody>tr.is-info>td,.table>tbody>tr:hover.is-info>td{background-color:#d7f8f5;color:#15736b}.table>tbody>tr.is-warning>td,.table>tbody>tr:hover.is-warning>td{background-color:#fef5e8;color:#976008}.table>tbody>tr.is-danger>td,.table>tbody>tr:hover.is-danger>td{background-color:#fef5f4;color:#d62c1a}input{line-height:normal;outline:0}input[type=checkbox],input[type=radio]{padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}label{font-weight:700;font-family:inherit;display:block;margin-bottom:.5rem}input[type=checkbox],input[type=radio]{-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#ccc;font-size:inherit;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif}textarea{height:auto;resize:none}input[type=checkbox],input[type=radio]{margin-top:1px\9;*margin-top:0;line-height:normal}.form-group{vertical-align:middle;position:relative;margin-bottom:1rem}.form-element-group,.form-element-group-lg,.form-element-group-sm{display:inline-table;vertical-align:middle;position:relative;margin-bottom:1rem}.form-element-group:after,.form-element-group:before,.form-group:after,.form-group:before{clear:both;display:table;content:""}.form-element{background-color:#fff;display:block;width:100%;font-size:1rem;font-weight:400;line-height:1.3125;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;float:left;color:#777;vertical-align:middle;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;padding:.5rem .875rem;border:1px solid #ccc;outline:0;-webkit-appearance:none;-webkit-transition:border .25s linear,box-shadow .25s linear;-moz-transition:border linear .25s,box-shadow linear .25s;-o-transition:border linear .25s,box-shadow linear .25s;transition:border .25s linear,box-shadow .25s linear}.form-element.is-disabled{background-color:#eee}.form-element-group-lg>.form-element,.form-element-group-lg>.form-element-extra,.form-element-group-lg>.form-group-btn:first-child>.btn,.form-element-group-lg>.form-group-btn:last-child>.btn,.form-element-lg,.form-element-lg>.form-element,.form-element-lg>.form-element-extra{padding:.875rem 1.5rem;line-height:1.70625;font-size:1.25rem}.form-element-group-lg>.form-element-extra.btn-pill,.form-element-group-lg>.form-element.btn-pill,.form-element-group-lg>.form-group-btn:last-child>.btn.btn-pill,.form-element-lg>.form-element-extra.btn-pill,.form-element-lg>.form-element.btn-pill,.form-element-lg>.form-group-btn:first-child>.btn.btn-pill,.form-element-lg>.form-group-btn:last-child>.btn.btn-pill .form-element-group-lg>.form-group-btn:first-child>.btn.btn-pill{-webkit-border-radius:60px;-moz-border-radius:60px;-ms-border-radius:60px;-o-border-radius:60px;border-radius:60px}.form-element-group-sm>.form-element,.form-element-group-sm>.form-element-extra,.form-element-group-sm>.form-group-btn:last-child>.btn,.form-element-sm,.form-element-sm>.form-element,.form-element-sm>.form-element-extra,.form-element-sm>.form-group-btn:first-child>.btn,.form-element-sm>.form-group-btn:last-child>.btn .form-element-group-sm>.form-group-btn:first-child>.btn{padding:.22857143rem .6rem;line-height:1rem;font-size:.875rem}.form-element:focus{outline:0;outline:thin dotted\9;border-color:#24cabc;-webkit-box-shadow:0 0 8px rgba(36,202,188,.6);-moz-box-shadow:0 0 8px rgba(36,202,188,.6);box-shadow:0 0 8px rgba(36,202,188,.6)}.form-element-extra,.form-group-btn,.form-group-extra{display:table-cell}.form-element-extra{background-color:#eee;border:1px solid #ccc;padding:.5rem .875rem;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;text-align:center;vertical-align:middle;z-index:1000;display:table-cell;white-space:nowrap;width:1%}.btn-group-lg>.btn:first-child,.btn-group-sm>.btn:first-child,.btn-group>.btn:first-child,.form-element-group-lg>.btn-group-lg>.btn:first-child,.form-element-group-lg>.btn-group>.btn:first-child,.form-element-group-lg>.form-element-extra:first-child,.form-element-group-lg>.form-group-btn:first-child>.btn,.form-element-group-sm>.form-element-extra:first-child,.form-element-group>.btn-group-lg>.btn:first-child,.form-element-group>.btn-group>.btn:first-child,.form-element-group>.form-element-extra:first-child,.form-element-group>.form-group-btn:first-child>.btn,.pagination>ul>li:first-child,.pagination>ul>li:first-child>.btn{border-top-left-radius:6px;border-bottom-left-radius:6px;margin-left:1px}.btn-group-lg>.btn:last-child,.btn-group-sm>.btn:last-child,.btn-group>.btn:last-child,.form-element-group-lg>.form-element-extra:last-child,.form-element-group-lg>.form-group-btn>.btn,.form-element-group-sm>.form-element-extra:last-child,.form-element-group-sm>.form-group-btn>.btn,.form-element-group>.form-element-extra:last-child,.form-element-group>.form-group-btn:last-child>.btn,.pagination>ul>li:last-child,.pagination>ul>li:last-child>.btn{border-top-right-radius:6px;border-bottom-right-radius:6px}.form-element-group-lg>.form-element-extra:last-child,.form-element-group-sm>.form-element-extra:last-child,.form-element-group>.form-element-extra:last-child,.pagination>ul>li:last-child,.pagination>ul>li:last-child>.btn{border-left:0}.form-element-element>.form-group-btn:last-child>.btn,.form-element-group-lg .form-element:last-child,.form-element-group-lg>.form-group-btn>.btn,.form-element-group-sm .form-element:last-child,.form-element-group-sm>.form-group-btn>.btn,.form-element-group .form-element:last-child,.form-element-group>.form-group-btn>.btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.form-element-group-btn:first-child>.btn,.form-element-group-lg .form-element:first-child,.form-element-group-sm .form-element:first-child,.form-element-group .form-element:first-child,.form-group-btn:first-child>.btn{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.form-group-btn,.form-group-extra{width:1%;vertical-align:middle;white-space:nowrap}.form-group-btn>button>i:before{margin:0}.has-icon{display:block}.has-icon>.fa{position:relative;right:0;vertical-align:middle;margin-right:1rem;margin-top:.775rem;float:right;top:-2.45rem}.dropdown,.dropdown div,.dropdown div:after,.dropdown li{-webkit-transition:all .15s ease-in-out;-moz-transition:all .15s ease-in-out;-ms-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.dropdown.scrollable div:after,.dropdown .selected:after{-webkit-pointer-events:none;-moz-pointer-events:none;-ms-pointer-events:none;pointer-events:none}.dropdown{position:relative;width:160px;border:1px solid #ccc;cursor:pointer;background:#fff;color:#777;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.dropdown.open{z-index:2}.dropdown:hover{box-shadow:0 0 5px rgba(0,0,0,.15)}.dropdown.focus{box-shadow:0 0 5px rgba(51,102,248,.4)}.dropdown .carat{position:absolute;right:12px;top:50%;margin-top:-3px;border:6px solid transparent;border-top-color:#ccc}.dropdown.open .carat{margin-top:-10px;border-top:6px solid transparent;border-bottom:6px solid #ccc}.dropdown .old{height:0;width:0;overflow:hidden}.dropdown .old,.dropdown select{position:absolute;left:0;top:0}.dropdown.touch .old{width:100%;height:100%}.dropdown.touch select{width:100%;height:100%;opacity:0}.dropdown .selected,.dropdown li{display:block;font-size:16px;font-size:1rem;line-height:1;color:inherit;padding:9px 12px;overflow:hidden;white-space:nowrap}.dropdown .selected:after{content:"";position:absolute;right:0;top:0;bottom:0;width:60px}.dropdown div{position:absolute;height:0;left:-1px;right:-1px;top:100%;margin-top:-1px;background:#fff;border:1px solid #ccc;border-top-color:#eee;border-radius:0 0 6px 6px;overflow:hidden;opacity:0}.dropdown.open div{opacity:1;z-index:2}.dropdown.scrollable div:after{content:"";position:absolute;left:0;right:0;bottom:0;height:50px}.dropdown.scrollable.bottom div:after{opacity:0}.dropdown ul{position:absolute;left:0;top:0;height:100%;width:100%;list-style:none;overflow:hidden;margin:0;padding-left:0}.dropdown.scrollable.open ul{overflow-y:auto}.dropdown li{list-style:none;padding:8px 12px;color:#777}.dropdown li.focus{background:#3498db;position:relative;z-index:3;color:#fff}.dropdown li.active{font-weight:700}.panel{border:1px solid transparent;background-color:#fff;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.15);-moz-box-shadow:0 2px 5px rgba(0,0,0,.15);box-shadow:0 2px 5px rgba(0,0,0,.15)}.panel-title{padding:1.5rem .875rem;border-top-right-radius:6px;border-top-left-radius:6px;border-bottom:1px solid transparent;font-weight:700}.panel-body{padding:1.5rem .875rem;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.panel-default{border-color:#ccc}.panel-default>.panel-title{background-color:#f9f9f9;color:#555;border-bottom-color:#ccc}.panel-success{border-color:#93e7b6}.panel-success>.panel-title{background-color:#d8f6e5;color:#29b765;border-bottom-color:#93e7b6}.panel-info{border-color:#84e9e1}.panel-info>.panel-title{background-color:#c3f4f0;color:#20b4a8;border-bottom-color:#84e9e1}.panel-warning{border-color:#f9cf8b}.panel-warning>.panel-title{background-color:#fdeed7;color:#e08e0b;border-bottom-color:#f9cf8b}.panel-danger{border-color:#f5b4ae}.panel-danger>.panel-title{background-color:#fef5f4;color:#e43725;border-bottom-color:#f5b4ae}.panel-primary{border-color:#5faee3}.panel-primary>.panel-title{background-color:#f5fafd;color:#217dbb;border-bottom-color:#5faee3}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{margin-top:0;margin-bottom:.4rem}.panel>.btn,.panel a{margin-top:.5rem;margin-bottom:0}.panel p{margin:1rem 0 0}.badge{display:inline-block;min-width:10px;min-width:.625rem;padding:.26666667rem .6rem;font-size:14px;font-size:.875rem;font-weight:400;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;-webkit-border-radius:120px;-moz-border-radius:120px;-ms-border-radius:120px;-o-border-radius:120px;border-radius:120px}.badge.success{background-color:#2ecc71}.badge.primary{background-color:#3498db}.badge.danger{background-color:#e74c3c}.badge.warning{background-color:#f39c12}.badge.info{background-color:#24cabc}.btn>.badge{margin-left:.375rem}.btn-danger>.badge,.btn-info>.badge,.btn-primary>.badge,.btn-success>.badge,.btn-warning>.badge,.list-group-element.active>.badge{background-color:#fff;text-shadow:none}.list-group-element.active>.badge{color:#24cabc}.btn-primary>.badge{color:#3498db}.btn-success>.badge{color:#2ecc71}.btn-info>.badge{color:#24cabc}.btn-warning>.badge{color:#f39c12}.btn-danger>.badge{color:#e74c3c}.btn-label{vertical-align:middle;display:inline-block;padding:.025rem .25rem;background-color:#ccc;color:#fff;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:1px solid rgba(0,0,0,.25);text-shadow:0 -1px 0 rgba(0,0,0,.15);font-size:12px;font-size:.75rem;margin:.5rem 0}.btn-label.primary{background-color:#3498db;color:#fff}.btn-label.success{background-color:#2ecc71;color:#fff}.btn-label.danger{background-color:#e74c3c;color:#fff}.btn-label.info{background-color:#24cabc;color:#fff}.btn-label.warning{background-color:#f39c12;color:#fff} +body{background-color:#fff;color:#333;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-weight:400;font-size:16px;font-size:1rem;line-height:1.3125;padding:0;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%}*,:after,:before{-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}a{color:#3498db;text-decoration:none;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}a:hover{color:#1d6fa5;text-decoration:underline}ol,ul{margin:0;list-style:none;padding:0}hr{border:none;border-top:1px solid #eee;height:1px;margin:1rem 0;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}h1,h2,h3,h4,h5,h6,p{margin:1.3125rem 0}h1,h2,h3,h4,h5,h6{font-family:inherit;text-rendering:optimizelegibility;color:#333;margin-bottom:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit;font-family:inherit}h1.heading,h1.title,h3.heading,h3.title{font-family:inherit;color:inherit}.h1,h1{font-size:36px;font-size:2.25rem;line-height:1.4}.h2,h2{font-size:31px;font-size:1.9375rem;line-height:1.2}.h3,h3{font-size:24px;font-size:1.5rem;line-height:1}.h4,h4{font-size:18px;font-size:1.125rem;line-height:1.2}.h5,h5{font-size:14px;font-size:.875rem}.h6,h6{font-size:12px;font-size:.75rem;line-height:.875}.subheader{color:inherit;text-transform:uppercase}blockquote{font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-size:16px;font-size:1rem;margin-top:.625rem;margin-bottom:.625rem;margin-left:3.125rem;padding-left:1rem;border-left:5px solid #3498db}blockquote cite{font-weight:700}p{color:inherit;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-size:16px;font-size:1rem;line-height:1.3125}.lead,p.lead{font-size:21px;font-size:1.3125rem;font-weight:700}button{border:none}.nav>li>a:hover.btn-danger-outline,.nav>li>a:hover.btn-default-outline,.nav>li>a:hover.btn-info-outline,.nav>li>a:hover.btn-primary-outline,.nav>li>a:hover.btn-success-outline,.nav>li>a:hover.btn-warning-outline,a.btn-danger,a.btn-danger-outline:hover,a.btn-info,a.btn-info-outline:hover,a.btn-primary,a.btn-primary-outline:hover,a.btn-success,a.btn-success-outline:hover,a.btn-warning,a.btn-warning-outline:hover,a:hover.btn-danger,a:hover.btn-danger-gradient,a:hover.btn-info,a:hover.btn-info-gradient,a:hover.btn-info-outline,a:hover.btn-primary,a:hover.btn-primary-gradient,a:hover.btn-primary-outline,a:hover.btn-success,a:hover.btn-success-gradient,a:hover.btn-success-outline,a:hover.btn-warning,a:hover.btn-warning-gradient,a:hover.btn-warning-outline{text-decoration:none;color:#fff}.btn>i:before{margin-right:.5rem}.btn{padding:.5rem .875rem;font-size:1rem;line-height:1.3125;border-radius:6px;color:#777;border:1px solid transparent;display:inline-block;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;font-weight:400;cursor:pointer;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.25);-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-lg{padding:.875rem 1.5rem;font-size:1.25rem;line-height:1.70625}.btn-lg,.btn-sm{border-radius:6px}.btn-sm{padding:.4rem .6rem;font-size:.875rem;line-height:1rem}.btn-pill{-webkit-border-radius:24px;-moz-border-radius:24px;-ms-border-radius:24px;-o-border-radius:24px;border-radius:24px}.btn-link{background:transparent;background-color:transparent;border-color:transparent;color:inherit;text-shadow:none}.btn-full{display:block;width:100%}a.btn-default,a:hover.btn-default-gradient{color:#777;text-decoration:none}.btn-default,.nav>li>a.btn-default{color:#777;background-color:#fff;border-color:#ccc;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-default:hover,.nav>li>a.btn-default:hover{background-color:#f2f2f2;border-color:#bfbfbf}.btn-default:active,.nav>li>a.btn-default:active{color:#777;background-color:#e9e9e9;border-color:#b6b6b6;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-default-outline,.default-outline{color:#777;background-color:transparent;border-color:#777;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-default-outline:hover,.default-outline:hover{background-color:transparent;border-color:#6a6a6a}.btn-default-outline:active,.default-outline:active{color:#777;background-color:transparent;border-color:#616161;outline:0}.btn-default-outline:hover,.default-outline:hover{border-color:#777;color:#fff;background-color:#777;text-decoration:none}.btn-default-outline:active,.default-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-default-gradient,.default-gradient{background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f5f5f5),color-stop(1,#fff));background:-ms-linear-gradient(bottom,#f5f5f5,#fff);background:-moz-linear-gradient(center bottom,#f5f5f5 0,#fff 100%);background:-o-linear-gradient(#fff,#f5f5f5);background-image:linear-gradient(top,#f5f5f5,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#f5f5f5",GradientType=0);border:1px solid #ccc;text-shadow:0 1px 0 #fff}.btn-default-gradient:hover,.default-gradient:hover{background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f5f5f5),color-stop(1,#f5f5f5));background:-ms-linear-gradient(bottom,#f5f5f5,#f5f5f5);background:-moz-linear-gradient(center bottom,#f5f5f5 0,#f5f5f5 100%);background:-o-linear-gradient(#f5f5f5,#f5f5f5);background-image:linear-gradient(top,#f5f5f5,#f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f5f5f5",endColorstr="#f5f5f5",GradientType=0)}.btn-default-gradient:active,.default-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-primary,.nav>li>a.btn-primary{color:#fff;background-color:#3498db;border-color:#2386c8;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-primary:hover,.nav>li>a.btn-primary:hover{background-color:#258cd1;border-color:#2077b2}.btn-primary:active,.nav>li>a.btn-primary:active{color:#fff;background-color:#2282c1;border-color:#1d6da3;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-primary-outline,.primary-outline{color:#3498db;background-color:transparent;border-color:#3498db;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-primary-outline:hover,.primary-outline:hover{background-color:transparent;border-color:#258cd1}.btn-primary-outline:active,.primary-outline:active{color:#3498db;background-color:transparent;border-color:#2282c1;outline:0}.btn-primary-outline:hover,.primary-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#3498db}.btn-primary-outline:active,.primary-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-primary-gradient,.primary-gradient{background:#3498db;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#2b94d9),color-stop(1,#8bc4ea));background:-ms-linear-gradient(bottom,#2b94d9,#8bc4ea);background:-moz-linear-gradient(center bottom,#2b94d9 0,#8bc4ea 100%);background:-o-linear-gradient(#8bc4ea,#2b94d9);background-image:linear-gradient(top,#2b94d9,#8bc4ea);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#8bc4ea",endColorstr="#2b94d9",GradientType=0);color:#fff;border:1px solid #3498db}.btn-primary-gradient:hover,.primary-gradient:hover{background:#3498db;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3498db),color-stop(1,#3498db));background:-ms-linear-gradient(bottom,#3498db,#3498db);background:-moz-linear-gradient(center bottom,#3498db 0,#3498db 100%);background:-o-linear-gradient(#3498db,#3498db);background-image:linear-gradient(top,#3498db,#3498db);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3498db",endColorstr="#3498db",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-primary-gradient:active,.primary-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-danger,.nav>li>a.btn-danger{color:#fff;background-color:#e74c3c;border-color:#e32f1c;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-danger:hover,.nav>li>a.btn-danger:hover{background-color:#e43725;border-color:#cd2a19}.btn-danger:active,.nav>li>a.btn-danger:active{color:#fff;background-color:#dd2d1b;border-color:#bd2717;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-danger-outline,.danger-outline{color:#e74c3c;background-color:transparent;border-color:#e74c3c;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-danger-outline:hover,.danger-outline:hover{background-color:transparent;border-color:#e43725}.btn-danger-outline:active,.danger-outline:active{color:#e74c3c;background-color:transparent;border-color:#dd2d1b;outline:0}.btn-danger-outline:hover,.danger-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#e74c3c}.btn-danger-outline:active,.danger-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-danger-gradient,.danger-gradient{background:#e74c3c;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#e64433),color-stop(1,#f29f97));background:-ms-linear-gradient(bottom,#e64433,#f29f97);background:-moz-linear-gradient(center bottom,#e64433 0,#f29f97 100%);background:-o-linear-gradient(#f29f97,#e64433);background-image:linear-gradient(top,#e64433,#f29f97);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f29f97",endColorstr="#e64433",GradientType=0);color:#fff;border:1px solid #e74c3c}.btn-danger-gradient:hover,.danger-gradient:hover{background:#e74c3c;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#e74c3c),color-stop(1,#e74c3c));background:-ms-linear-gradient(bottom,#e74c3c,#e74c3c);background:-moz-linear-gradient(center bottom,#e74c3c 0,#e74c3c 100%);background:-o-linear-gradient(#e74c3c,#e74c3c);background-image:linear-gradient(top,#e74c3c,#e74c3c);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#e74c3c",endColorstr="#e74c3c",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-danger-gradient:active,.danger-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-info,.nav>li>a.btn-info{color:#fff;background-color:#24cabc;border-color:#1faca0;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-info:hover,.nav>li>a.btn-info:hover{background-color:#20b4a8;border-color:#1b968c}.btn-info:active,.nav>li>a.btn-info:active{color:#fff;background-color:#1da59a;border-color:#18877e;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-info-outline,.info-outline{color:#24cabc;background-color:transparent;border-color:#24cabc;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-info-outline:hover,.info-outline:hover{background-color:transparent;border-color:#20b4a8}.btn-info-outline:active,.info-outline:active{color:#24cabc;background-color:transparent;border-color:#1da59a;outline:0}.btn-info-outline:hover,.info-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#24cabc}.btn-info-outline:active,.info-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-info-gradient,.info-gradient{background:#24cabc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#22c1b4),color-stop(1,#6fe5db));background:-ms-linear-gradient(bottom,#22c1b4,#6fe5db);background:-moz-linear-gradient(center bottom,#22c1b4 0,#6fe5db 100%);background:-o-linear-gradient(#6fe5db,#22c1b4);background-image:linear-gradient(top,#22c1b4,#6fe5db);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#6fe5db",endColorstr="#22c1b4",GradientType=0);color:#fff;border:1px solid #24cabc}.btn-info-gradient:hover,.info-gradient:hover{background:#24cabc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#24cabc),color-stop(1,#24cabc));background:-ms-linear-gradient(bottom,#24cabc,#24cabc);background:-moz-linear-gradient(center bottom,#24cabc 0,#24cabc 100%);background:-o-linear-gradient(#24cabc,#24cabc);background-image:linear-gradient(top,#24cabc,#24cabc);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#24cabc",endColorstr="#24cabc",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-info-gradient:active,.info-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-warning,.nav>li>a.btn-warning{color:#fff;background-color:#f39c12;border-color:#d6880b;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-warning:hover,.nav>li>a.btn-warning:hover{background-color:#e08e0b;border-color:#be780a}.btn-warning:active,.nav>li>a.btn-warning:active{color:#fff;background-color:#cf830a;border-color:#ad6e09;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-warning-outline,.warning-outline{color:#f39c12;background-color:transparent;border-color:#f39c12;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-warning-outline:hover,.warning-outline:hover{background-color:transparent;border-color:#e08e0b}.btn-warning-outline:active,.warning-outline:active{color:#f39c12;background-color:transparent;border-color:#cf830a;outline:0}.btn-warning-outline:hover,.warning-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#f39c12}.btn-warning-outline:active,.warning-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-warning-gradient,.warning-gradient{background:#f39c12;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ef970c),color-stop(1,#f8c573));background:-ms-linear-gradient(bottom,#ef970c,#f8c573);background:-moz-linear-gradient(center bottom,#ef970c 0,#f8c573 100%);background:-o-linear-gradient(#f8c573,#ef970c);background-image:linear-gradient(top,#ef970c,#f8c573);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f8c573",endColorstr="#ef970c",GradientType=0);color:#fff;border:1px solid #f39c12}.btn-warning-gradient:hover,.warning-gradient:hover{background:#f39c12;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#f39c12),color-stop(1,#f39c12));background:-ms-linear-gradient(bottom,#f39c12,#f39c12);background:-moz-linear-gradient(center bottom,#f39c12 0,#f39c12 100%);background:-o-linear-gradient(#f39c12,#f39c12);background-image:linear-gradient(top,#f39c12,#f39c12);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f39c12",endColorstr="#f39c12",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-warning-gradient:active,.warning-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-success,.nav>li>a.btn-success{color:#fff;background-color:#2ecc71;border-color:#27af61;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.btn-success:hover,.nav>li>a.btn-success:hover{background-color:#29b765;border-color:#239a55}.btn-success:active,.nav>li>a.btn-success:active{color:#fff;background-color:#26a95d;border-color:#1f8b4d;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.btn-success-outline,.success-outline{color:#2ecc71;background-color:transparent;border-color:#2ecc71;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;text-shadow:none}.btn-success-outline:hover,.success-outline:hover{background-color:transparent;border-color:#29b765}.btn-success-outline:active,.success-outline:active{color:#2ecc71;background-color:transparent;border-color:#26a95d;outline:0}.btn-success-outline:hover,.success-outline:hover{border-color:rgba(0,0,0,.08);color:#fff;background-color:#2ecc71}.btn-success-outline:active,.success-outline:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.btn-success-gradient,.success-gradient{background:#2ecc71;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#2cc46c),color-stop(1,#7ee2a8));background:-ms-linear-gradient(bottom,#2cc46c,#7ee2a8);background:-moz-linear-gradient(center bottom,#2cc46c 0,#7ee2a8 100%);background:-o-linear-gradient(#7ee2a8,#2cc46c);background-image:linear-gradient(top,#2cc46c,#7ee2a8);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#7ee2a8",endColorstr="#2cc46c",GradientType=0);color:#fff;border:1px solid #2ecc71}.btn-success-gradient:hover,.success-gradient:hover{background:#2ecc71;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#2ecc71),color-stop(1,#2ecc71));background:-ms-linear-gradient(bottom,#2ecc71,#2ecc71);background:-moz-linear-gradient(center bottom,#2ecc71 0,#2ecc71 100%);background:-o-linear-gradient(#2ecc71,#2ecc71);background-image:linear-gradient(top,#2ecc71,#2ecc71);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#2ecc71",endColorstr="#2ecc71",GradientType=0);border-color:rgba(0,0,0,.08)}.btn-success-gradient:active,.success-gradient:active{-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15)}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}[class^=col]{float:left;min-height:1px;margin-left:1.25rem}@media screen and (max-width:47.9375rem){[class^=col]{float:none;width:100%;margin-left:0}}@media screen and (min-width:75rem){[class^=col]{margin-left:1.875rem}}.row{margin-left:-1.25rem;*zoom:1}@media screen and (min-width:75rem){.row{margin-left:-1.875rem;*zoom:1}}@media screen and (max-width:47.9375rem){.row{margin-left:0}}.row:after,.row:before{display:table;line-height:0;content:""}.row:after{clear:both}.container{width:940px;width:58.75rem}@media screen and (max-width:47.9375rem){.container{width:95%;width:auto;float:none}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.container{width:724px;width:45.25rem}}@media screen and (min-width:75rem){.container{width:1170px;width:73.125rem}}.col12{width:940px;width:58.75rem}@media screen and (min-width:75rem){.col12{width:1170px;width:73.125rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col12{width:724px;width:45.25rem}}@media screen and (max-width:47.9375rem){.col12{width:100%}}.col11{width:860px;width:53.75rem}@media screen and (min-width:75rem){.col11{width:1070px;width:66.875rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col11{width:662px;width:41.375rem}}@media screen and (max-width:47.9375rem){.col11{width:100%}}.col10{width:780px;width:48.75rem}@media screen and (min-width:75rem){.col10{width:970px;width:60.625rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col10{width:600px;width:37.5rem}}@media screen and (max-width:47.9375rem){.col10{width:100%}}.col9{width:700px;width:43.75rem}@media screen and (min-width:75rem){.col9{width:870px;width:54.375rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col9{width:538px;width:33.625rem}}@media screen and (max-width:47.9375rem){.col9{width:100%}}.col8{width:620px;width:38.75rem}@media screen and (min-width:75rem){.col8{width:770px;width:48.125rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col8{width:476px;width:29.75rem}}@media screen and (max-width:47.9375rem){.col8{width:100%}}.col7{width:540px;width:33.75rem}@media screen and (min-width:75rem){.col7{width:670px;width:41.875rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col7{width:414px;width:25.875rem}}@media screen and (max-width:47.9375rem){.col7{width:100%}}.col6{width:460px;width:28.75rem}@media screen and (min-width:75rem){.col6{width:570px;width:35.625rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col6{width:352px;width:22rem}}@media screen and (max-width:47.9375rem){.col6{width:100%}}.col5{width:380px;width:23.75rem}@media screen and (min-width:75rem){.col5{width:470px;width:29.375rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col5{width:290px;width:18.125rem}}@media screen and (max-width:47.9375rem){.col5{width:100%}}.col4{width:300px;width:18.75rem}@media screen and (min-width:75rem){.col4{width:370px;width:23.125rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col4{width:228px;width:14.25rem}}@media screen and (max-width:47.9375rem){.col4{width:100%}}.col3{width:220px;width:13.75rem}@media screen and (min-width:75rem){.col3{width:270px;width:16.875rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col3{width:166px;width:10.375rem}}@media screen and (max-width:47.9375rem){.col3{width:100%}}.col2{width:140px;width:8.75rem}@media screen and (min-width:75rem){.col2{width:170px;width:10.625rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col2{width:104px;width:6.5rem}}@media screen and (max-width:47.9375rem){.col2{width:100%}}.col1{width:60px;width:3.75rem}@media screen and (min-width:75rem){.col1{width:70px;width:4.375rem}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.col1{width:42px;width:2.625rem}}@media screen and (max-width:47.9375rem){.col1{width:100%}}.offset12{width:980px;width:61.25rem}.offset11{width:900px;width:56.25rem}.offset10{width:820px;width:51.25rem}.offset9{width:740px;width:46.25rem}.offset8{width:660px;width:41.25rem}.offset7{width:580px;width:36.25rem}.offset6{width:500px;width:31.25rem}.offset5{width:420px;width:26.25rem}.offset4{width:340px;width:21.25rem}.offset3{width:260px;width:16.25rem}.offset2{width:180px;width:11.25rem}.offset1{width:100px;width:6.25rem}@media (min-width:768px) and (max-width:979px){.offset12{width:764px;width:47.75rem}.offset11{width:702px;width:43.875rem}.offset10{width:640px;width:40rem}.offset9{width:578px;width:36.125rem}.offset8{width:516px;width:32.25rem}.offset7{width:454px;width:28.375rem}.offset6{width:392px;width:24.5rem}.offset5{width:330px;width:20.625rem}.offset4{width:268px;width:16.75rem}.offset3{width:206px;width:12.875rem}.offset2{width:144px;width:9rem}.offset1{width:82px;width:5.125rem}.row-fluid{width:100%;*zoom:1}.row-fluid:after{clear:both}.row-fluid [class^=col]{display:block;float:left;width:100%;min-height:30px;margin-left:2.76%;*margin-left:2.7%;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.row-fluid [class^=col]:first-child{margin-left:0}.row-fluid .controls-row [class^=col]+[class^=col]{margin-left:2.76%}.row-fluid .col12{width:100%}.row-fluid .col11{width:91.43%}.row-fluid .col10{width:82.87%}.row-fluid .col9{width:74.3%}.row-fluid .col8{width:65.74%}.row-fluid .col7{width:57.18%}.row-fluid .col6{width:48.61%}.row-fluid .col5{width:40.05%}.row-fluid .col4{width:31.49}.row-fluid .col3{width:22.92%}.row-fluid .col2{width:14.36%}.row-fluid .col1{width:5.8%}.row-fluid .offset12{margin-left:105.52%}.row-fluid .offset12:first-child{margin-left:102.76%}.row-fluid .offset11{margin-left:96.96%}.row-fluid .offset11:first-child{margin-left:94.19%}.row-fluid .offset10{margin-left:88.39%}.row-fluid .offset10:first-child{margin-left:85.63%}.row-fluid .offset9{margin-left:79.83%}.row-fluid .offset9:first-child{margin-left:77.07%}.row-fluid .offset8{margin-left:71.27%}.row-fluid .offset8:first-child{margin-left:68.5%}.row-fluid .offset7{margin-left:62.7}.row-fluid .offset7:first-child{margin-left:59.94%}.row-fluid .offset6{margin-left:54.148%}.row-fluid .offset6:first-child{margin-left:51.38%}.row-fluid .offset5{margin-left:45.58%}.row-fluid .offset5:first-child{margin-left:42.81%}.row-fluid .offset4{margin-left:37.01%}.row-fluid .offset4:first-child{margin-left:34.25%}.row-fluid .offset3{margin-left:28.45%}.row-fluid .offset3:first-child{margin-left:25.69%}.row-fluid .offset2{margin-left:19.88%}.row-fluid .offset2:first-child{margin-left:17.12%}.row-fluid .offset1{margin-left:11.32%}.row-fluid .offset1:first-child{margin-left:8.56%}}@media (min-width:768px) and (max-width:979px) and screen and (max-width:47.9375rem){.row-fluid [class^=col]{margin-left:0}}.row-fluid{width:100%;*zoom:1}.row-fluid:after,.row-fluid:before{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class^=col]{display:block;float:left;width:100%;min-height:30px;margin-left:2.12%;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.row-fluid [class^=col]:first-child{margin-left:0}.row-fluid .controls-row [class^=col]+[class^=col]{margin-left:2.12%}.row-fluid .col12{width:100%}.row-fluid .col11{width:91.48%}.row-fluid .col10{width:82.97%}.row-fluid .col9{width:74.46%}.row-fluid .col8{width:65.95%}.row-fluid .col7{width:57.44%}.row-fluid .col6{width:48.93%}.row-fluid .col5{width:40.42%}.row-fluid .col4{width:31.91%}.row-fluid .col3{width:23.4%}.row-fluid .col2{width:14.895%}.row-fluid .col1{width:6.38%}.row-fluid .offset12{margin-left:104.25%}.row-fluid .offset12:first-child{margin-left:102.12%}.row-fluid .offset11{margin-left:95.74%}.row-fluid .offset11:first-child{margin-left:93.61%}.row-fluid .offset10{margin-left:87.23%}.row-fluid .offset10:first-child{margin-left:85.1%}.row-fluid .offset9{margin-left:78.72%}.row-fluid .offset9:first-child{margin-left:76.59%}.row-fluid .offset8{margin-left:70.21%}.row-fluid .offset8:first-child{margin-left:68.08%}.row-fluid .offset7{margin-left:61.7%}.row-fluid .offset7:first-child{margin-left:59.57%}.row-fluid .offset6{margin-left:53.195%}.row-fluid .offset6:first-child{margin-left:51.06%}.row-fluid .offset5{margin-left:44.68%}.row-fluid .offset5:first-child{margin-left:42.55%}.row-fluid .offset4{margin-left:36.17%}.row-fluid .offset4:first-child{margin-left:34.04%}.row-fluid .offset3{margin-left:27.65%}.row-fluid .offset3:first-child{margin-left:25.53%}.row-fluid .offset2{margin-left:19.14%}.row-fluid .offset2:first-child{margin-left:17.02%}.row-fluid .offset1{margin-left:10.63%}.row-fluid .offset1:first-child{margin-left:8.51%}@media screen and (max-width:47.9375rem){.row-fluid{width:100%}.row-fluid [class^=col],.uneditable-input[class^=col],[class^=col]{display:block;float:none;width:100%;margin-left:0;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}}.row-fluid [class^=col].hide,[class^=col].hide{display:none}.row-fluid [class^=col].pull-right,[class^=col].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:after,.container:before{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:1.25rem;padding-left:1.25rem;*zoom:1}.container-fluid:after,.container-fluid:before{display:table;line-height:0;content:""}.container-fluid:after{clear:both}.alert{color:inherit;border:1px solid transparent;display:block;padding:1rem;background-color:#ecfbf2;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px}.alert>h4{color:inherit;margin-top:0}.alert>p{color:inherit;margin:0}.alert i{float:right}.alert a{text-decoration:underline}.alert a:hover{text-decoration:none}.alert .btn{margin-top:1.4rem}.alert .fa:before,.alert i:before{margin-top:3px;display:inline-block}.alert a,.alert a:hover,span.close{color:inherit;font-weight:700}span.close{float:right;cursor:pointer}.table{width:100%;max-width:100%;border-spacing:0;border-collapse:collapse;display:table;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;color:#777}.table-bordered{border:1px solid #ccc}.table-stripe>tbody>tr:nth-child(odd)>td{background-color:#f9f9f9}.table-stripe.table-bordered>thead>tr>th{background-color:#fff}.table.table-condensed>tbody>tr>td,.table.table-condensed>thead>tr>th{padding:.41666667rem .66666667rem}@media screen and (max-width:47.9375rem){.responsive-table{width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}}.table>tr{display:table-row;vertical-align:inherit;border-color:inherit}.table-bordered>tbody>tr>td,.table-bordered>thead>tr>th{border:1px solid #ccc}.table-bordered>thead>tr>th{background-color:#f9f9f9;box-shadow:inset 0 2px 0 hsla(0,0%,100%,.92)}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ccc;color:#555}.table-bordered>thead>tr>th{border-bottom-width:1px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:.75rem;line-height:1.3125;vertical-align:middle;border-top:1px solid #ccc;text-align:left}.table-hover>tbody>tr:hover,.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr>td:hover,.table-hover>tfoot>tr:hover,.table-hover>tfoot>tr:hover>td,.table-hover>tfoot>tr>td:hover,.table-hover>thead>tr:hover>td{background-color:#f9f9f9;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody>tr.is-primary>td,.table>tbody>tr:hover.is-primary>td{background-color:#eaf4fb;color:#196090}.table>tbody>tr.is-success>td,.table>tbody>tr:hover.is-success>td{background-color:#e2f8eb;color:#1b7943}.table>tbody>tr.is-info>td,.table>tbody>tr:hover.is-info>td{background-color:#d7f8f5;color:#15736b}.table>tbody>tr.is-warning>td,.table>tbody>tr:hover.is-warning>td{background-color:#fef5e8;color:#976008}.table>tbody>tr.is-danger>td,.table>tbody>tr:hover.is-danger>td{background-color:#fef5f4;color:#d62c1a}input{line-height:normal;outline:0}input[type=checkbox],input[type=radio]{padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}label{font-weight:700;font-family:inherit;display:block;margin-bottom:.5rem}input[type=checkbox],input[type=radio]{-moz-box-sizing:border-box;-o-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#ccc;font-size:inherit;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif}textarea{height:auto;resize:none}input[type=checkbox],input[type=radio]{margin-top:1px\9;*margin-top:0;line-height:normal}.form-group{vertical-align:middle;position:relative;margin-bottom:1rem}.form-element-group,.form-element-group-lg,.form-element-group-sm{display:inline-table;vertical-align:middle;position:relative;margin-bottom:1rem}.form-element-group:after,.form-element-group:before,.form-group:after,.form-group:before{clear:both;display:table;content:""}.form-element{background-color:#fff;display:block;width:100%;font-size:1rem;font-weight:400;line-height:1.3125;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;float:left;color:#777;vertical-align:middle;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;padding:.5rem .875rem;border:1px solid #ccc;outline:0;-webkit-appearance:none;-webkit-transition:border .25s linear,box-shadow .25s linear;-moz-transition:border .25s linear,box-shadow .25s linear;-o-transition:border .25s linear,box-shadow .25s linear;transition:border .25s linear,box-shadow .25s linear}.form-element.is-disabled{background-color:#eee}.form-element-group-lg>.form-element,.form-element-group-lg>.form-element-extra,.form-element-group-lg>.form-group-btn:first-child>.btn,.form-element-group-lg>.form-group-btn:last-child>.btn,.form-element-lg,.form-element-lg>.form-element,.form-element-lg>.form-element-extra{padding:.875rem 1.5rem;line-height:1.70625;font-size:1.25rem}.form-element-group-lg>.form-element-extra.btn-pill,.form-element-group-lg>.form-element.btn-pill,.form-element-group-lg>.form-group-btn:last-child>.btn.btn-pill,.form-element-lg>.form-element-extra.btn-pill,.form-element-lg>.form-element.btn-pill,.form-element-lg>.form-group-btn:first-child>.btn.btn-pill,.form-element-lg>.form-group-btn:last-child>.btn.btn-pill .form-element-group-lg>.form-group-btn:first-child>.btn.btn-pill{-webkit-border-radius:60px;-moz-border-radius:60px;-ms-border-radius:60px;-o-border-radius:60px;border-radius:60px}.form-element-group-sm>.form-element,.form-element-group-sm>.form-element-extra,.form-element-group-sm>.form-group-btn:last-child>.btn,.form-element-sm,.form-element-sm>.form-element,.form-element-sm>.form-element-extra,.form-element-sm>.form-group-btn:first-child>.btn,.form-element-sm>.form-group-btn:last-child>.btn .form-element-group-sm>.form-group-btn:first-child>.btn{padding:.22857143rem .6rem;line-height:1rem;font-size:.875rem}.form-element:focus{outline:0;outline:thin dotted\9;border-color:#24cabc;-webkit-box-shadow:0 0 8px rgba(36,202,188,.6);-moz-box-shadow:0 0 8px rgba(36,202,188,.6);box-shadow:0 0 8px rgba(36,202,188,.6)}.form-element-extra,.form-group-btn,.form-group-extra{display:table-cell}.form-element-extra{background-color:#eee;border:1px solid #ccc;padding:.5rem .875rem;font-family:Source Sans Pro,Helvetica Neue,HelveticaNeue,Helvetica,Arial,sans-serif;text-align:center;vertical-align:middle;z-index:1000;display:table-cell;white-space:nowrap;width:1%}.btn-group-lg>.btn:first-child,.btn-group-sm>.btn:first-child,.btn-group>.btn:first-child,.form-element-group-lg>.btn-group-lg>.btn:first-child,.form-element-group-lg>.btn-group>.btn:first-child,.form-element-group-lg>.form-element-extra:first-child,.form-element-group-lg>.form-group-btn:first-child>.btn,.form-element-group-sm>.form-element-extra:first-child,.form-element-group>.btn-group-lg>.btn:first-child,.form-element-group>.btn-group>.btn:first-child,.form-element-group>.form-element-extra:first-child,.form-element-group>.form-group-btn:first-child>.btn,.pagination>ul>li:first-child,.pagination>ul>li:first-child>.btn{border-top-left-radius:6px;border-bottom-left-radius:6px;margin-left:1px}.btn-group-lg>.btn:last-child,.btn-group-sm>.btn:last-child,.btn-group>.btn:last-child,.form-element-group-lg>.form-element-extra:last-child,.form-element-group-lg>.form-group-btn>.btn,.form-element-group-sm>.form-element-extra:last-child,.form-element-group-sm>.form-group-btn>.btn,.form-element-group>.form-element-extra:last-child,.form-element-group>.form-group-btn:last-child>.btn,.pagination>ul>li:last-child,.pagination>ul>li:last-child>.btn{border-top-right-radius:6px;border-bottom-right-radius:6px}.form-element-group-lg>.form-element-extra:last-child,.form-element-group-sm>.form-element-extra:last-child,.form-element-group>.form-element-extra:last-child,.pagination>ul>li:last-child,.pagination>ul>li:last-child>.btn{border-left:0}.form-element-element>.form-group-btn:last-child>.btn,.form-element-group-lg .form-element:last-child,.form-element-group-lg>.form-group-btn>.btn,.form-element-group-sm .form-element:last-child,.form-element-group-sm>.form-group-btn>.btn,.form-element-group .form-element:last-child,.form-element-group>.form-group-btn>.btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.form-element-group-btn:first-child>.btn,.form-element-group-lg .form-element:first-child,.form-element-group-sm .form-element:first-child,.form-element-group .form-element:first-child,.form-group-btn:first-child>.btn{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-1px}.form-group-btn,.form-group-extra{width:1%;vertical-align:middle;white-space:nowrap}.form-group-btn>button>i:before{margin:0}.has-icon{display:block}.has-icon>.fa{position:relative;right:0;vertical-align:middle;margin-right:1rem;margin-top:.775rem;float:right;top:-2.45rem}.dropdown,.dropdown div,.dropdown div:after,.dropdown li{-webkit-transition:all .15s ease-in-out;-moz-transition:all .15s ease-in-out;-ms-transition:all .15s ease-in-out;transition:all .15s ease-in-out}.dropdown.scrollable div:after,.dropdown .selected:after{-webkit-pointer-events:none;-moz-pointer-events:none;-ms-pointer-events:none;pointer-events:none}.dropdown{position:relative;width:160px;border:1px solid #ccc;cursor:pointer;background:#fff;color:#777;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.dropdown.open{z-index:2}.dropdown:hover{box-shadow:0 0 5px rgba(0,0,0,.15)}.dropdown.focus{box-shadow:0 0 5px rgba(51,102,248,.4)}.dropdown .carat{position:absolute;right:12px;top:50%;margin-top:-3px;border:6px solid transparent;border-top-color:#ccc}.dropdown.open .carat{margin-top:-10px;border-top:6px solid transparent;border-bottom:6px solid #ccc}.dropdown .old{height:0;width:0;overflow:hidden}.dropdown .old,.dropdown select{position:absolute;left:0;top:0}.dropdown.touch .old{width:100%;height:100%}.dropdown.touch select{width:100%;height:100%;opacity:0}.dropdown .selected,.dropdown li{display:block;font-size:16px;font-size:1rem;line-height:1;color:inherit;padding:9px 12px;overflow:hidden;white-space:nowrap}.dropdown .selected:after{content:"";position:absolute;right:0;top:0;bottom:0;width:60px}.dropdown div{position:absolute;height:0;left:-1px;right:-1px;top:100%;margin-top:-1px;background:#fff;border:1px solid #ccc;border-top-color:#eee;border-radius:0 0 6px 6px;overflow:hidden;opacity:0}.dropdown.open div{opacity:1;z-index:2}.dropdown.scrollable div:after{content:"";position:absolute;left:0;right:0;bottom:0;height:50px}.dropdown.scrollable.bottom div:after{opacity:0}.dropdown ul{position:absolute;left:0;top:0;height:100%;width:100%;list-style:none;overflow:hidden;margin:0;padding-left:0}.dropdown.scrollable.open ul{overflow-y:auto}.dropdown li{list-style:none;padding:8px 12px;color:#777}.dropdown li.focus{background:#3498db;position:relative;z-index:3;color:#fff}.dropdown li.active{font-weight:700}.panel{border:1px solid transparent;background-color:#fff;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.15);-moz-box-shadow:0 2px 5px rgba(0,0,0,.15);box-shadow:0 2px 5px rgba(0,0,0,.15)}.panel-title{padding:1.5rem .875rem;border-top-right-radius:6px;border-top-left-radius:6px;border-bottom:1px solid transparent;font-weight:700}.panel-body{padding:1.5rem .875rem;border-bottom-right-radius:6px;border-bottom-left-radius:6px}.panel-default{border-color:#ccc}.panel-default>.panel-title{background-color:#f9f9f9;color:#555;border-bottom-color:#ccc}.panel-success{border-color:#93e7b6}.panel-success>.panel-title{background-color:#d8f6e5;color:#29b765;border-bottom-color:#93e7b6}.panel-info{border-color:#84e9e1}.panel-info>.panel-title{background-color:#c3f4f0;color:#20b4a8;border-bottom-color:#84e9e1}.panel-warning{border-color:#f9cf8b}.panel-warning>.panel-title{background-color:#fdeed7;color:#e08e0b;border-bottom-color:#f9cf8b}.panel-danger{border-color:#f5b4ae}.panel-danger>.panel-title{background-color:#fef5f4;color:#e43725;border-bottom-color:#f5b4ae}.panel-primary{border-color:#5faee3}.panel-primary>.panel-title{background-color:#f5fafd;color:#217dbb;border-bottom-color:#5faee3}.panel h1,.panel h2,.panel h3,.panel h4,.panel h5,.panel h6{margin-top:0;margin-bottom:.4rem}.panel>.btn,.panel a{margin-top:.5rem;margin-bottom:0}.panel p{margin:1rem 0 0}.badge{display:inline-block;min-width:10px;min-width:.625rem;padding:.26666667rem .6rem;font-size:14px;font-size:.875rem;font-weight:400;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;-webkit-border-radius:120px;-moz-border-radius:120px;-ms-border-radius:120px;-o-border-radius:120px;border-radius:120px}.badge.success{background-color:#2ecc71}.badge.primary{background-color:#3498db}.badge.danger{background-color:#e74c3c}.badge.warning{background-color:#f39c12}.badge.info{background-color:#24cabc}.btn>.badge{margin-left:.375rem}.btn-danger>.badge,.btn-info>.badge,.btn-primary>.badge,.btn-success>.badge,.btn-warning>.badge,.list-group-element.active>.badge{background-color:#fff;text-shadow:none}.list-group-element.active>.badge{color:#24cabc}.btn-primary>.badge{color:#3498db}.btn-success>.badge{color:#2ecc71}.btn-info>.badge{color:#24cabc}.btn-warning>.badge{color:#f39c12}.btn-danger>.badge{color:#e74c3c}.btn-label{vertical-align:middle;display:inline-block;padding:.025rem .25rem;background-color:#ccc;color:#fff;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:1px solid rgba(0,0,0,.25);text-shadow:0 -1px 0 rgba(0,0,0,.15);font-size:12px;font-size:.75rem;margin:.5rem 0}.btn-label.primary{background-color:#3498db;color:#fff}.btn-label.success{background-color:#2ecc71;color:#fff}.btn-label.danger{background-color:#e74c3c;color:#fff}.btn-label.info{background-color:#24cabc;color:#fff}.btn-label.warning{background-color:#f39c12;color:#fff} /*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.no-b{border:none}.hide-text{font:0/0;color:transparent;text-shadow:none;background-color:transparent;border:0}.disabled,.is-disabled{pointer-events:none;opacity:.45;cursor:not-allowed}.left-float{float:left}.right-float{float:right}.center-float{margin:0 auto}.no-float{float:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.justified{text-align:justify}@media screen and (min-width:75rem){.desktop-hidden{visibility:hidden;display:none}}@media screen and (min-width:48rem) and (max-width:61.1875rem){.tablet-hidden{visibility:hidden;display:none}}@media screen and (max-width:47.9375rem){.mobile-hidden{visibility:hidden;display:none}.show-mobile{visibility:visible;display:block}}.show-mobile{display:none;visibility:hidden}@media screen and (max-width:47.9375rem){.show-mobile{display:block;visibility:visible}}.show-tablet{display:none;visibility:hidden}@media screen and (min-width:48rem) and (max-width:61.1875rem){.show-tablet{display:block;visibility:visible}}.show-desktop{display:none;visibility:hidden}@media screen and (min-width:75rem){.show-desktop{display:block;visibility:visible}}.hide{visibility:hidden;display:none}.fade,.hide{opacity:0;-webkit-transition:opacity .45s linear;-moz-transition:opacity .45s linear;transition:opacity .45s linear}.fade.in{opacity:1}.has-success{color:#2ecc71}.has-primary{color:#3498db}.has-info{color:#24cabc}.has-warning{color:#f39c12}.has-danger{color:#e74c3c}.f-is-success{border-color:#2ecc71}.f-is-primary{border-color:#3498db}.f-is-danger{border-color:#e74c3c}.f-is-warning{border-color:#f39c12}.f-is-info{border-color:#24cabc}.a-is-success{color:#25a25a;border-color:#2ecc71;background-color:#ecfbf2}.a-is-danger{color:#d62c1a;border-color:#e74c3c;background-color:#fef5f4}.a-is-info{color:#1c9f94;border-color:#24cabc;background-color:#f7fefd}.a-is-warning{color:#c87f0a;border-color:#f39c12;background-color:#fef6ea}.a-is-primary{color:#217dbb;border-color:#3498db;background-color:#f5fafd}.nav{position:relative;top:0;background-color:#fff}.brand>a{text-decoration:none;color:#333;padding:.5rem 0;float:left}.brand>a:hover{text-decoration:none;color:#3498db}nav a{color:#777;padding:.5rem .875rem;display:inline-block;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px}nav a,nav a:hover{text-decoration:none}nav a:hover{background-color:#f9f9f9;color:#3498db}.nav{padding-left:0}.nav>li>a{display:block;display:inline-block;padding:.5rem .875rem;position:relative;float:left}.nav>a.btn--default-outline,.nav>a.default-outline{color:#777;background-color:transparent;border-color:#777;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.nav>a.btn--default-outline:hover,.nav>a.default-outline:hover{background-color:transparent;border-color:#6a6a6a}.nav>a.btn--default-outline:active,.nav>a.default-outline:active{color:#777;background-color:transparent;border-color:#616161;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.nav>a.btn--default-outline:hover,.nav>a.default-outline:hover{border-color:#777;color:#fff;background-color:#777}.nav>a.btn--default-outline:active,.nav>a.default-outline:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav>li>a.btn--primary-outline,.nav>li>a.primary-outline{color:#3498db;background-color:transparent;border-color:#3498db;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.nav>li>a.btn--primary-outline:hover,.nav>li>a.primary-outline:hover{background-color:transparent;border-color:#258cd1}.nav>li>a.btn--primary-outline:active,.nav>li>a.primary-outline:active{color:#3498db;background-color:transparent;border-color:#2282c1;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.nav>li>a.btn--primary-outline:hover,.nav>li>a.primary-outline:hover{border-color:#3498db;color:#fff;background-color:#3498db}.nav>li>a.btn--primary-outline:active,.nav>li>a.primary-outline:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav>li>a.btn--danger-outline,.nav>li>a.danger-outline{color:#e74c3c;background-color:transparent;border-color:#e74c3c;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.nav>li>a.btn--danger-outline:hover,.nav>li>a.danger-outline:hover{background-color:transparent;border-color:#e43725}.nav>li>a.btn--danger-outline:active,.nav>li>a.danger-outline:active{color:#e74c3c;background-color:transparent;border-color:#dd2d1b;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.nav>li>a.btn--danger-outline:hover,.nav>li>a.danger-outline:hover{border-color:#e74c3c;color:#fff;background-color:#e74c3c}.nav>li>a.btn--danger-outline:active,.nav>li>a.danger-outline:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav>li>a.btn--info-outline,.nav>li>a.info-outline{color:#24cabc;background-color:transparent;border-color:#24cabc;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.nav>li>a.btn--info-outline:hover,.nav>li>a.info-outline:hover{background-color:transparent;border-color:#20b4a8}.nav>li>a.btn--info-outline:active,.nav>li>a.info-outline:active{color:#24cabc;background-color:transparent;border-color:#1da59a;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.nav>li>a.btn--info-outline:hover,.nav>li>a.info-outline:hover{border-color:#24cabc;color:#fff;background-color:#24cabc}.nav>li>a.btn--info-outline:active,.nav>li>a.info-outline:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav>li>a.btn--warning-outline,.nav>li>a.warning-outline{color:#f39c12;background-color:transparent;border-color:#f39c12;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.nav>li>a.btn--warning-outline:hover,.nav>li>a.warning-outline:hover{background-color:transparent;border-color:#e08e0b}.nav>li>a.btn--warning-outline:active,.nav>li>a.warning-outline:active{color:#f39c12;background-color:transparent;border-color:#cf830a;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.nav>li>a.btn--warning-outline:hover,.nav>li>a.warning-outline:hover{border-color:#f39c12;color:#fff;background-color:#f39c12}.nav>li>a.btn--warning-outline:active,.nav>li>a.warning-outline:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav>li>a.btn--success-outline,.nav>li>a.success-outline{color:#2ecc71;background-color:transparent;border-color:#2ecc71;-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease}.nav>li>a.btn--success-outline:hover,.nav>li>a.success-outline:hover{background-color:transparent;border-color:#29b765}.nav>li>a.btn--success-outline:active,.nav>li>a.success-outline:active{color:#2ecc71;background-color:transparent;border-color:#26a95d;-webkit-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);-moz-box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);box-shadow:inset 0 2px 4px 1px rgba(0,0,0,.15);outline:0}.nav>li>a.btn--success-outline:hover,.nav>li>a.success-outline:hover{border-color:#2ecc71;color:#fff;background-color:#2ecc71}.nav>li>a.btn--success-outline:active,.nav>li>a.success-outline:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav>li>a:hover.btn--danger,.nav>li>a:hover.btn--default,.nav>li>a:hover.btn--info,.nav>li>a:hover.btn--primary,.nav>li>a:hover.btn--success,.nav>li>a:hover.btn--warning{color:#fff}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;color:#3498db}.pill-nav>li>a{display:inline-block;float:left;padding:.5rem .875rem;-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;position:relative}.pill-nav>li>a:focus,.pill-nav>li>a:hover{text-decoration:none;background-color:#eee}.pill-nav>li+li,.pill-nav li{display:inline-block;margin-right:.25rem}.pill-nav>li>a.active{background-color:#3498db;color:#fff}.pill-nav>li>a.active:hover{background-color:#258cd1}.pill-nav>li>a.active:active{-webkit-box-shadow:inset 0 3px 6px rgba(0,0,0,.25);-moz-box-shadow:inset 0 3px 6px rgba(0,0,0,.25);box-shadow:inset 0 3px 6px rgba(0,0,0,.25);-webkit-transition:all .25s ease;-moz-transition:all .25s ease;transition:all .25s ease;outline:0}.list-group{display:block;position:relative;padding-left:0}.list-group>li,a.list-group-element{display:block;margin-bottom:-1px;border:1px solid #ddd;color:#777;text-decoration:none;background-color:#fff;padding:.875rem}a:hover.list-group-element{text-decoration:none;background-color:#eee;color:#555}.list-group-element.active,a:hover.list-group-element.active{background-color:#24cabc;color:#fff;border-color:#24cabc}.list-group-element:first-child{border-top-right-radius:6px;border-top-left-radius:6px}.list-group-element:last-child{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.btn-group,.btn-group-lg,.btn-group-sm,.pagination>ul>li,.pagination>ul>li>a{float:left;display:inline-block;position:relative;vertical-align:middle;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}.pagination>ul{padding-left:0}.pagination>ul>li>a{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:1px solid #ccc}.pagination-gradient>ul>li{background:#eee;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(1,#fff));background:-ms-linear-gradient(bottom,#eee,#fff);background:-moz-linear-gradient(center bottom,#eee 0,#fff 100%);background:-o-linear-gradient(#fff,#eee);background-image:linear-gradient(top,#eee,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#eeeeee",GradientType=0)}.pagination>ul>li>a,.pagination>ul>li>button{background-color:transparent;background:transparent}.btn-group-lg>.btn,.btn-group-sm>.btn,.btn-group>.btn,.pagination>ul>li>a{float:left;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}.btn-group-lg>.btn+.btn,.btn-group-sm>.btn+.btn,.btn-group>.btn+.btn,.pagination>ul>li>.btn,.pagination>ul>li>a{margin-left:-1px}.pagination>ul>li:first-child>.btn,.pagination>ul>li:first-child>button,.pagination>ul>li:last-child>.btn,.pagination>ul>li:last-child>button{margin-left:0}.btn-group>.btn.active,.pagination>ul>li.active,.pagination>ul>li>.active{background-color:#24cabc;color:#fff;border-color:#24cabc}.btn-group-lg>.btn,.pagination-lg>ul>li>a.btn{padding:.875rem 1.5rem}.btn-group-lg>.btn,.btn-group-sm>.btn,.pagination-lg>ul>li>a.btn,.pagination-sm>ul>li>a.btn{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;float:left;display:inline-block}.btn-group-sm>.btn,.pagination-sm>ul>li>a.btn{padding:.4rem .6rem}.btn-group-lg.no-b>.btn,.btn-group-sm.no-b>.btn,.btn-group.no-b>.btn,.list-group.no-b>a.list-group-element,.list-group.no-b>li,.list-group.no-b>li>a,.pagination.no-b>ul>li>.btn{border:transparent} \ No newline at end of file diff --git a/packages/cssnano-preset-default/src/__tests__/integrations/semantic-ui-v2.4.1.css b/packages/cssnano-preset-default/src/__tests__/integrations/semantic-ui-v2.4.1.css index da65c4698..ff07ff393 100644 --- a/packages/cssnano-preset-default/src/__tests__/integrations/semantic-ui-v2.4.1.css +++ b/packages/cssnano-preset-default/src/__tests__/integrations/semantic-ui-v2.4.1.css @@ -27,7 +27,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.button{cursor:pointer;display:inline-block;min-height:1em;outline:none;border:none;vertical-align:baseline;background:#e0e1e2 none;color:rgba(0,0,0,.6);font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;margin:0 .25em 0 0;padding:.78571429em 1.5em;text-transform:none;text-shadow:none;font-weight:700;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:opacity .1s ease,background-color .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease,-webkit-box-shadow .1s ease;will-change:"";-webkit-tap-highlight-color:transparent}.ui.button,.ui.button:hover{-webkit-box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px transparent,inset 0 0 0 0 rgba(34,36,38,.15)}.ui.button:hover{background-color:#cacbcd;background-image:none;color:rgba(0,0,0,.8)}.ui.button:hover .icon{opacity:.85}.ui.button:focus{background-color:#cacbcd;color:rgba(0,0,0,.8);background-image:""!important;-webkit-box-shadow:""!important;box-shadow:""!important}.ui.button:focus .icon{opacity:.85}.ui.active.button:active,.ui.button:active{background-color:#babbbc;background-image:"";color:rgba(0,0,0,.9);-webkit-box-shadow:0 0 0 1px transparent inset,none;box-shadow:inset 0 0 0 1px transparent,none}.ui.active.button{-webkit-box-shadow:0 0 0 1px transparent inset;box-shadow:inset 0 0 0 1px transparent}.ui.active.button,.ui.active.button:hover{color:rgba(0,0,0,.95)}.ui.active.button,.ui.active.button:active,.ui.active.button:hover{background-color:#c0c1c2;background-image:none}.ui.loading.loading.loading.loading.loading.loading.button{position:relative;cursor:default;text-shadow:none!important;color:transparent!important;opacity:1;pointer-events:auto;-webkit-transition:all 0s linear,opacity .1s ease;transition:all 0s linear,opacity .1s ease}.ui.loading.button:before{border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}.ui.loading.button:after,.ui.loading.button:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em}.ui.loading.button:after{-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid transparent;border-top-color:#fff;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent}.ui.labeled.icon.loading.button .icon{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes button-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes button-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.basic.loading.button:not(.inverted):before{border-color:rgba(0,0,0,.1)}.ui.basic.loading.button:not(.inverted):after{border-top-color:#767676}.ui.button:disabled,.ui.buttons .disabled.button,.ui.disabled.active.button,.ui.disabled.button,.ui.disabled.button:hover{cursor:default;opacity:.45!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;pointer-events:none!important}.ui.basic.buttons .ui.disabled.button{border-color:rgba(34,36,38,.5)}.ui.animated.button{position:relative;overflow:hidden;padding-right:0!important;vertical-align:middle;z-index:1}.ui.animated.button .content{will-change:transform,opacity}.ui.animated.button .visible.content{position:relative;margin-right:1.5em}.ui.animated.button .hidden.content{position:absolute;width:100%}.ui.animated.button .hidden.content,.ui.animated.button .visible.content{-webkit-transition:right .3s ease 0s;transition:right .3s ease 0s}.ui.animated.button .visible.content{left:auto;right:0}.ui.animated.button .hidden.content{top:50%;left:auto;right:-100%;margin-top:-.5em}.ui.animated.button:focus .visible.content,.ui.animated.button:hover .visible.content{left:auto;right:200%}.ui.animated.button:focus .hidden.content,.ui.animated.button:hover .hidden.content{left:auto;right:0}.ui.vertical.animated.button .hidden.content,.ui.vertical.animated.button .visible.content{-webkit-transition:top .3s ease,-webkit-transform .3s ease;transition:top .3s ease,-webkit-transform .3s ease;transition:top .3s ease,transform .3s ease;transition:top .3s ease,transform .3s ease,-webkit-transform .3s ease}.ui.vertical.animated.button .visible.content{-webkit-transform:translateY(0);transform:translateY(0);right:auto}.ui.vertical.animated.button .hidden.content{top:-50%;left:0;right:auto}.ui.vertical.animated.button:focus .visible.content,.ui.vertical.animated.button:hover .visible.content{-webkit-transform:translateY(200%);transform:translateY(200%);right:auto}.ui.vertical.animated.button:focus .hidden.content,.ui.vertical.animated.button:hover .hidden.content{top:50%;right:auto}.ui.fade.animated.button .hidden.content,.ui.fade.animated.button .visible.content{-webkit-transition:opacity .3s ease,-webkit-transform .3s ease;transition:opacity .3s ease,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease;transition:opacity .3s ease,transform .3s ease,-webkit-transform .3s ease}.ui.fade.animated.button .visible.content{left:auto;right:auto;opacity:1;-webkit-transform:scale(1);transform:scale(1)}.ui.fade.animated.button .hidden.content{opacity:0;left:0;right:auto;-webkit-transform:scale(1.5);transform:scale(1.5)}.ui.fade.animated.button:focus .visible.content,.ui.fade.animated.button:hover .visible.content{left:auto;right:auto;opacity:0;-webkit-transform:scale(.75);transform:scale(.75)}.ui.fade.animated.button:focus .hidden.content,.ui.fade.animated.button:hover .hidden.content{left:0;right:auto;opacity:1;-webkit-transform:scale(1);transform:scale(1)}.ui.inverted.button{-webkit-box-shadow:0 0 0 2px #fff inset!important;box-shadow:inset 0 0 0 2px #fff!important;background:transparent none;color:#fff;text-shadow:none!important}.ui.inverted.buttons .button{margin:0 0 0 -2px}.ui.inverted.buttons .button:first-child{margin-left:0}.ui.inverted.vertical.buttons .button{margin:0 0 -2px}.ui.inverted.vertical.buttons .button:first-child{margin-top:0}.ui.inverted.button.active,.ui.inverted.button:focus,.ui.inverted.button:hover{background:#fff;-webkit-box-shadow:0 0 0 2px #fff inset!important;box-shadow:inset 0 0 0 2px #fff!important;color:rgba(0,0,0,.8)}.ui.inverted.button.active:focus{background:#dcddde;-webkit-box-shadow:0 0 0 2px #dcddde inset!important;box-shadow:inset 0 0 0 2px #dcddde!important;color:rgba(0,0,0,.8)}.ui.labeled.button:not(.icon){display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;background:none!important;padding:0!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.labeled.button>.button{margin:0}.ui.labeled.button>.label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 0 0 -1px!important;padding:"";font-size:1em;border-color:rgba(34,36,38,.15)}.ui.labeled.button>.tag.label:before{width:1.85em;height:1.85em}.ui.labeled.button:not([class*="left labeled"])>.button{border-top-right-radius:0;border-bottom-right-radius:0}.ui.labeled.button:not([class*="left labeled"])>.label,.ui[class*="left labeled"].button>.button{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="left labeled"].button>.label{border-top-right-radius:0;border-bottom-right-radius:0}.ui.facebook.button{background-color:#3b5998;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.facebook.button:hover{background-color:#304d8a;color:#fff;text-shadow:none}.ui.facebook.button:active{background-color:#2d4373;color:#fff;text-shadow:none}.ui.twitter.button{background-color:#55acee;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.twitter.button:hover{background-color:#35a2f4;color:#fff;text-shadow:none}.ui.twitter.button:active{background-color:#2795e9;color:#fff;text-shadow:none}.ui.google.plus.button{background-color:#dd4b39;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.google.plus.button:hover{background-color:#e0321c;color:#fff;text-shadow:none}.ui.google.plus.button:active{background-color:#c23321;color:#fff;text-shadow:none}.ui.linkedin.button{background-color:#1f88be;color:#fff;text-shadow:none}.ui.linkedin.button:hover{background-color:#147baf;color:#fff;text-shadow:none}.ui.linkedin.button:active{background-color:#186992;color:#fff;text-shadow:none}.ui.youtube.button{background-color:red;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.youtube.button:hover{background-color:#e60000;color:#fff;text-shadow:none}.ui.youtube.button:active{background-color:#c00;color:#fff;text-shadow:none}.ui.instagram.button{background-color:#49769c;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.instagram.button:hover{background-color:#3d698e;color:#fff;text-shadow:none}.ui.instagram.button:active{background-color:#395c79;color:#fff;text-shadow:none}.ui.pinterest.button{background-color:#bd081c;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.pinterest.button:hover{background-color:#ac0013;color:#fff;text-shadow:none}.ui.pinterest.button:active{background-color:#8c0615;color:#fff;text-shadow:none}.ui.vk.button{background-color:#4d7198;color:#fff;background-image:none;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.vk.button:hover{background-color:#41648a;color:#fff}.ui.vk.button:active{background-color:#3c5876;color:#fff}.ui.button>.icon:not(.button){height:.85714286em;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease;vertical-align:"";color:""}.ui.button:not(.icon)>.icon:not(.button):not(.dropdown),.ui.button>.icon:not(.button){margin:0 .42857143em 0 -.21428571em}.ui.button:not(.icon)>.right.icon:not(.button):not(.dropdown){margin:0 -.21428571em 0 .42857143em}.ui[class*="left floated"].button,.ui[class*="left floated"].buttons{float:left;margin-left:0;margin-right:.25em}.ui[class*="right floated"].button,.ui[class*="right floated"].buttons{float:right;margin-right:0;margin-left:.25em}.ui.compact.button,.ui.compact.buttons .button{padding:.58928571em 1.125em}.ui.compact.icon.button,.ui.compact.icon.buttons .button{padding:.58928571em}.ui.compact.labeled.icon.button,.ui.compact.labeled.icon.buttons .button{padding:.58928571em 3.69642857em}.ui.mini.button,.ui.mini.buttons .button,.ui.mini.buttons .or{font-size:.78571429rem}.ui.tiny.button,.ui.tiny.buttons .button,.ui.tiny.buttons .or{font-size:.85714286rem}.ui.small.button,.ui.small.buttons .button,.ui.small.buttons .or{font-size:.92857143rem}.ui.button,.ui.buttons .button,.ui.buttons .or{font-size:1rem}.ui.large.button,.ui.large.buttons .button,.ui.large.buttons .or{font-size:1.14285714rem}.ui.big.button,.ui.big.buttons .button,.ui.big.buttons .or{font-size:1.28571429rem}.ui.huge.button,.ui.huge.buttons .button,.ui.huge.buttons .or{font-size:1.42857143rem}.ui.massive.button,.ui.massive.buttons .button,.ui.massive.buttons .or{font-size:1.71428571rem}.ui.icon.button,.ui.icon.buttons .button{padding:.78571429em}.ui.icon.button>.icon,.ui.icon.buttons .button>.icon{opacity:.9;margin:0!important;vertical-align:top}.ui.basic.button,.ui.basic.buttons .button{background:transparent none!important;color:rgba(0,0,0,.6)!important;font-weight:400;border-radius:.28571429rem;text-transform:none;text-shadow:none!important;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px rgba(34,36,38,.15)}.ui.basic.buttons{-webkit-box-shadow:none;box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem}.ui.basic.buttons .button{border-radius:0}.ui.basic.button:focus,.ui.basic.button:hover,.ui.basic.buttons .button:focus,.ui.basic.buttons .button:hover{background:#fff!important;color:rgba(0,0,0,.8)!important;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.35) inset,0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px rgba(34,36,38,.35),inset 0 0 0 0 rgba(34,36,38,.15)}.ui.basic.button:active,.ui.basic.buttons .button:active{background:#f8f8f8!important;color:rgba(0,0,0,.9)!important;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 1px 4px 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 1px 4px 0 rgba(34,36,38,.15)}.ui.basic.active.button,.ui.basic.buttons .active.button{background:rgba(0,0,0,.05)!important;-webkit-box-shadow:""!important;box-shadow:""!important;color:rgba(0,0,0,.95)!important}.ui.basic.active.button:hover,.ui.basic.buttons .active.button:hover{background-color:rgba(0,0,0,.05)}.ui.basic.buttons .button:hover{-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.35) inset,0 0 0 0 rgba(34,36,38,.15) inset inset;box-shadow:inset 0 0 0 1px rgba(34,36,38,.35),inset inset 0 0 0 0 rgba(34,36,38,.15)}.ui.basic.buttons .button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 1px 4px 0 rgba(34,36,38,.15) inset inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset inset 0 1px 4px 0 rgba(34,36,38,.15)}.ui.basic.buttons .active.button{-webkit-box-shadow:""!important;box-shadow:""!important}.ui.basic.inverted.button,.ui.basic.inverted.buttons .button{background-color:transparent!important;color:#f9fafb!important;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important}.ui.basic.inverted.button:focus,.ui.basic.inverted.button:hover,.ui.basic.inverted.buttons .button:focus,.ui.basic.inverted.buttons .button:hover{color:#fff!important;-webkit-box-shadow:0 0 0 2px #fff inset!important;box-shadow:inset 0 0 0 2px #fff!important}.ui.basic.inverted.button:active,.ui.basic.inverted.buttons .button:active{background-color:hsla(0,0%,100%,.08)!important;color:#fff!important;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.9) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.9)!important}.ui.basic.inverted.active.button,.ui.basic.inverted.buttons .active.button{background-color:hsla(0,0%,100%,.08);color:#fff;text-shadow:none;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.7) inset;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.7)}.ui.basic.inverted.active.button:hover,.ui.basic.inverted.buttons .active.button:hover{background-color:hsla(0,0%,100%,.15);-webkit-box-shadow:0 0 0 2px #fff inset!important;box-shadow:inset 0 0 0 2px #fff!important}.ui.basic.buttons .button{border-left:1px solid rgba(34,36,38,.15);-webkit-box-shadow:none;box-shadow:none}.ui.basic.vertical.buttons .button{border-left:none;border-left-width:0;border-top:1px solid rgba(34,36,38,.15)}.ui.basic.vertical.buttons .button:first-child{border-top-width:0}.ui.labeled.icon.button,.ui.labeled.icon.buttons .button{position:relative;padding-left:4.07142857em!important;padding-right:1.5em!important}.ui.labeled.icon.button>.icon,.ui.labeled.icon.buttons>.button>.icon{position:absolute;height:100%;line-height:1;border-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit;text-align:center;margin:0;width:2.57142857em;background-color:rgba(0,0,0,.05);color:"";-webkit-box-shadow:-1px 0 0 0 transparent inset;box-shadow:inset -1px 0 0 0 transparent;top:0;left:0}.ui[class*="right labeled"].icon.button{padding-right:4.07142857em!important;padding-left:1.5em!important}.ui[class*="right labeled"].icon.button>.icon{left:auto;right:0;border-radius:0;border-top-right-radius:inherit;border-bottom-right-radius:inherit;-webkit-box-shadow:1px 0 0 0 transparent inset;box-shadow:inset 1px 0 0 0 transparent}.ui.labeled.icon.button>.icon:after,.ui.labeled.icon.button>.icon:before,.ui.labeled.icon.buttons>.button>.icon:after,.ui.labeled.icon.buttons>.button>.icon:before{display:block;position:absolute;width:100%;top:50%;text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ui.labeled.icon.buttons .button>.icon{border-radius:0}.ui.labeled.icon.buttons .button:first-child>.icon{border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.labeled.icon.buttons .button:last-child>.icon{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:first-child>.icon{border-radius:0;border-top-left-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:last-child>.icon{border-radius:0;border-bottom-left-radius:.28571429rem}.ui.fluid[class*="left labeled"].icon.button,.ui.fluid[class*="right labeled"].icon.button{padding-left:1.5em!important;padding-right:1.5em!important}.ui.button.toggle.active,.ui.buttons .button.toggle.active,.ui.toggle.buttons .active.button{background-color:#21ba45!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none;color:#fff!important}.ui.button.toggle.active:hover{background-color:#16ab39!important;text-shadow:none;color:#fff!important}.ui.circular.button{border-radius:10em}.ui.circular.button>.icon{width:1em;vertical-align:baseline}.ui.buttons .or{position:relative;width:.3em;height:2.57142857em;z-index:3}.ui.buttons .or:before{position:absolute;text-align:center;border-radius:500rem;content:"or";top:50%;left:50%;background-color:#fff;text-shadow:none;margin-top:-.89285714em;margin-left:-.89285714em;width:1.78571429em;height:1.78571429em;line-height:1.78571429em;color:rgba(0,0,0,.4);font-style:normal;font-weight:700;-webkit-box-shadow:0 0 0 1px transparent inset;box-shadow:inset 0 0 0 1px transparent}.ui.buttons .or[data-text]:before{content:attr(data-text)}.ui.fluid.buttons .or{width:0!important}.ui.fluid.buttons .or:after{display:none}.ui.attached.button{position:relative;display:block;margin:0;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.15)!important;box-shadow:0 0 0 1px rgba(34,36,38,.15)!important}.ui.attached.top.button{border-radius:.28571429rem .28571429rem 0 0}.ui.attached.bottom.button{border-radius:0 0 .28571429rem .28571429rem}.ui.left.attached.button{display:inline-block;border-left:none;text-align:right;padding-right:.75em;border-radius:.28571429rem 0 0 .28571429rem}.ui.right.attached.button{display:inline-block;text-align:left;padding-left:.75em;border-radius:0 .28571429rem .28571429rem 0}.ui.attached.buttons{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:0;width:auto!important;z-index:2;margin-left:-1px;margin-right:-1px}.ui.attached.buttons .button{margin:0}.ui.attached.buttons .button:first-child,.ui.attached.buttons .button:last-child{border-radius:0}.ui[class*="top attached"].buttons{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0}.ui[class*="top attached"].buttons .button:first-child{border-radius:.28571429rem 0 0 0}.ui[class*="top attached"].buttons .button:last-child{border-radius:0 .28571429rem 0 0}.ui[class*="bottom attached"].buttons{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].buttons .button:first-child{border-radius:0 0 0 .28571429rem}.ui[class*="bottom attached"].buttons .button:last-child{border-radius:0 0 .28571429rem 0}.ui[class*="left attached"].buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:0;margin-left:-1px;border-radius:0 .28571429rem .28571429rem 0}.ui[class*="left attached"].buttons .button:first-child{margin-left:-1px;border-radius:0 .28571429rem 0 0}.ui[class*="left attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 .28571429rem 0}.ui[class*="right attached"].buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-left:0;margin-right:-1px;border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="right attached"].buttons .button:first-child{margin-left:-1px;border-radius:.28571429rem 0 0 0}.ui[class*="right attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 0 .28571429rem}.ui.fluid.button,.ui.fluid.buttons{width:100%}.ui.fluid.button{display:block}.ui.two.buttons{width:100%}.ui.two.buttons>.button{width:50%}.ui.three.buttons{width:100%}.ui.three.buttons>.button{width:33.333%}.ui.four.buttons{width:100%}.ui.four.buttons>.button{width:25%}.ui.five.buttons{width:100%}.ui.five.buttons>.button{width:20%}.ui.six.buttons{width:100%}.ui.six.buttons>.button{width:16.666%}.ui.seven.buttons{width:100%}.ui.seven.buttons>.button{width:14.285%}.ui.eight.buttons{width:100%}.ui.eight.buttons>.button{width:12.5%}.ui.nine.buttons{width:100%}.ui.nine.buttons>.button{width:11.11%}.ui.ten.buttons{width:100%}.ui.ten.buttons>.button{width:10%}.ui.eleven.buttons{width:100%}.ui.eleven.buttons>.button{width:9.09%}.ui.twelve.buttons{width:100%}.ui.twelve.buttons>.button{width:8.3333%}.ui.fluid.vertical.buttons,.ui.fluid.vertical.buttons>.button{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}.ui.two.vertical.buttons>.button{height:50%}.ui.three.vertical.buttons>.button{height:33.333%}.ui.four.vertical.buttons>.button{height:25%}.ui.five.vertical.buttons>.button{height:20%}.ui.six.vertical.buttons>.button{height:16.666%}.ui.seven.vertical.buttons>.button{height:14.285%}.ui.eight.vertical.buttons>.button{height:12.5%}.ui.nine.vertical.buttons>.button{height:11.11%}.ui.ten.vertical.buttons>.button{height:10%}.ui.eleven.vertical.buttons>.button{height:9.09%}.ui.twelve.vertical.buttons>.button{height:8.3333%}.ui.black.button,.ui.black.buttons .button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.black.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.black.button:hover,.ui.black.buttons .button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.black.button:focus,.ui.black.buttons .button:focus{background-color:#2f3032;color:#fff;text-shadow:none}.ui.black.button:active,.ui.black.buttons .button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.black.active.button,.ui.black.button .active.button:active,.ui.black.buttons .active.button,.ui.black.buttons .active.button:active{background-color:#0f0f10;color:#fff;text-shadow:none}.ui.basic.black.button,.ui.basic.black.buttons .button{-webkit-box-shadow:0 0 0 1px #1b1c1d inset!important;box-shadow:inset 0 0 0 1px #1b1c1d!important;color:#1b1c1d!important}.ui.basic.black.button:hover,.ui.basic.black.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #27292a inset!important;box-shadow:inset 0 0 0 1px #27292a!important;color:#27292a!important}.ui.basic.black.button:focus,.ui.basic.black.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #2f3032 inset!important;box-shadow:inset 0 0 0 1px #2f3032!important;color:#27292a!important}.ui.basic.black.active.button,.ui.basic.black.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #0f0f10 inset!important;box-shadow:inset 0 0 0 1px #0f0f10!important;color:#343637!important}.ui.basic.black.button:active,.ui.basic.black.buttons .button:active{-webkit-box-shadow:0 0 0 1px #343637 inset!important;box-shadow:inset 0 0 0 1px #343637!important;color:#343637!important}.ui.buttons:not(.vertical)>.basic.black.button:not(:first-child){margin-left:-1px}.ui.inverted.black.button,.ui.inverted.black.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #d4d4d5 inset!important;box-shadow:inset 0 0 0 2px #d4d4d5!important;color:#fff}.ui.inverted.black.button.active,.ui.inverted.black.button:active,.ui.inverted.black.button:focus,.ui.inverted.black.button:hover,.ui.inverted.black.buttons .button.active,.ui.inverted.black.buttons .button:active,.ui.inverted.black.buttons .button:focus,.ui.inverted.black.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.black.active.button,.ui.inverted.black.button:active,.ui.inverted.black.button:focus,.ui.inverted.black.button:hover,.ui.inverted.black.buttons .active.button,.ui.inverted.black.buttons .button:active,.ui.inverted.black.buttons .button:focus,.ui.inverted.black.buttons .button:hover{background-color:#000}.ui.inverted.black.basic.button,.ui.inverted.black.basic.buttons .button,.ui.inverted.black.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.black.basic.button:hover,.ui.inverted.black.basic.buttons .button:hover,.ui.inverted.black.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #000 inset!important;box-shadow:inset 0 0 0 2px #000!important;color:#fff!important}.ui.inverted.black.basic.button:focus,.ui.inverted.black.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #000 inset!important;box-shadow:inset 0 0 0 2px #000!important;color:#545454!important}.ui.inverted.black.basic.active.button,.ui.inverted.black.basic.button:active,.ui.inverted.black.basic.buttons .active.button,.ui.inverted.black.basic.buttons .button:active,.ui.inverted.black.buttons .basic.active.button,.ui.inverted.black.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #000 inset!important;box-shadow:inset 0 0 0 2px #000!important;color:#fff!important}.ui.grey.button,.ui.grey.buttons .button{background-color:#767676;color:#fff;text-shadow:none;background-image:none}.ui.grey.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.grey.button:hover,.ui.grey.buttons .button:hover{background-color:#838383;color:#fff;text-shadow:none}.ui.grey.button:focus,.ui.grey.buttons .button:focus{background-color:#8a8a8a;color:#fff;text-shadow:none}.ui.grey.button:active,.ui.grey.buttons .button:active{background-color:#909090;color:#fff;text-shadow:none}.ui.grey.active.button,.ui.grey.button .active.button:active,.ui.grey.buttons .active.button,.ui.grey.buttons .active.button:active{background-color:#696969;color:#fff;text-shadow:none}.ui.basic.grey.button,.ui.basic.grey.buttons .button{-webkit-box-shadow:0 0 0 1px #767676 inset!important;box-shadow:inset 0 0 0 1px #767676!important;color:#767676!important}.ui.basic.grey.button:hover,.ui.basic.grey.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #838383 inset!important;box-shadow:inset 0 0 0 1px #838383!important;color:#838383!important}.ui.basic.grey.button:focus,.ui.basic.grey.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #8a8a8a inset!important;box-shadow:inset 0 0 0 1px #8a8a8a!important;color:#838383!important}.ui.basic.grey.active.button,.ui.basic.grey.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #696969 inset!important;box-shadow:inset 0 0 0 1px #696969!important;color:#909090!important}.ui.basic.grey.button:active,.ui.basic.grey.buttons .button:active{-webkit-box-shadow:0 0 0 1px #909090 inset!important;box-shadow:inset 0 0 0 1px #909090!important;color:#909090!important}.ui.buttons:not(.vertical)>.basic.grey.button:not(:first-child){margin-left:-1px}.ui.inverted.grey.button,.ui.inverted.grey.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #d4d4d5 inset!important;box-shadow:inset 0 0 0 2px #d4d4d5!important;color:#fff}.ui.inverted.grey.button.active,.ui.inverted.grey.button:active,.ui.inverted.grey.button:focus,.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button.active,.ui.inverted.grey.buttons .button:active,.ui.inverted.grey.buttons .button:focus,.ui.inverted.grey.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button:hover{background-color:#cfd0d2}.ui.inverted.grey.button:focus,.ui.inverted.grey.buttons .button:focus{background-color:#c7c9cb}.ui.inverted.grey.active.button,.ui.inverted.grey.buttons .active.button{background-color:#cfd0d2}.ui.inverted.grey.button:active,.ui.inverted.grey.buttons .button:active{background-color:#c2c4c5}.ui.inverted.grey.basic.button,.ui.inverted.grey.basic.buttons .button,.ui.inverted.grey.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.grey.basic.button:hover,.ui.inverted.grey.basic.buttons .button:hover,.ui.inverted.grey.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #cfd0d2 inset!important;box-shadow:inset 0 0 0 2px #cfd0d2!important;color:#fff!important}.ui.inverted.grey.basic.button:focus,.ui.inverted.grey.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #c7c9cb inset!important;box-shadow:inset 0 0 0 2px #c7c9cb!important;color:#dcddde!important}.ui.inverted.grey.basic.active.button,.ui.inverted.grey.basic.buttons .active.button,.ui.inverted.grey.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #cfd0d2 inset!important;box-shadow:inset 0 0 0 2px #cfd0d2!important;color:#fff!important}.ui.inverted.grey.basic.button:active,.ui.inverted.grey.basic.buttons .button:active,.ui.inverted.grey.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #c2c4c5 inset!important;box-shadow:inset 0 0 0 2px #c2c4c5!important;color:#fff!important}.ui.brown.button,.ui.brown.buttons .button{background-color:#a5673f;color:#fff;text-shadow:none;background-image:none}.ui.brown.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.brown.button:hover,.ui.brown.buttons .button:hover{background-color:#975b33;color:#fff;text-shadow:none}.ui.brown.button:focus,.ui.brown.buttons .button:focus{background-color:#90532b;color:#fff;text-shadow:none}.ui.brown.button:active,.ui.brown.buttons .button:active{background-color:#805031;color:#fff;text-shadow:none}.ui.brown.active.button,.ui.brown.button .active.button:active,.ui.brown.buttons .active.button,.ui.brown.buttons .active.button:active{background-color:#995a31;color:#fff;text-shadow:none}.ui.basic.brown.button,.ui.basic.brown.buttons .button{-webkit-box-shadow:0 0 0 1px #a5673f inset!important;box-shadow:inset 0 0 0 1px #a5673f!important;color:#a5673f!important}.ui.basic.brown.button:hover,.ui.basic.brown.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #975b33 inset!important;box-shadow:inset 0 0 0 1px #975b33!important;color:#975b33!important}.ui.basic.brown.button:focus,.ui.basic.brown.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #90532b inset!important;box-shadow:inset 0 0 0 1px #90532b!important;color:#975b33!important}.ui.basic.brown.active.button,.ui.basic.brown.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #995a31 inset!important;box-shadow:inset 0 0 0 1px #995a31!important;color:#805031!important}.ui.basic.brown.button:active,.ui.basic.brown.buttons .button:active{-webkit-box-shadow:0 0 0 1px #805031 inset!important;box-shadow:inset 0 0 0 1px #805031!important;color:#805031!important}.ui.buttons:not(.vertical)>.basic.brown.button:not(:first-child){margin-left:-1px}.ui.inverted.brown.button,.ui.inverted.brown.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #d67c1c inset!important;box-shadow:inset 0 0 0 2px #d67c1c!important;color:#d67c1c}.ui.inverted.brown.button.active,.ui.inverted.brown.button:active,.ui.inverted.brown.button:focus,.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button.active,.ui.inverted.brown.buttons .button:active,.ui.inverted.brown.buttons .button:focus,.ui.inverted.brown.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button:hover{background-color:#c86f11}.ui.inverted.brown.button:focus,.ui.inverted.brown.buttons .button:focus{background-color:#c16808}.ui.inverted.brown.active.button,.ui.inverted.brown.buttons .active.button{background-color:#cc6f0d}.ui.inverted.brown.button:active,.ui.inverted.brown.buttons .button:active{background-color:#a96216}.ui.inverted.brown.basic.button,.ui.inverted.brown.basic.buttons .button,.ui.inverted.brown.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.brown.basic.button:hover,.ui.inverted.brown.basic.buttons .button:hover,.ui.inverted.brown.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #c86f11 inset!important;box-shadow:inset 0 0 0 2px #c86f11!important;color:#d67c1c!important}.ui.inverted.brown.basic.button:focus,.ui.inverted.brown.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #c16808 inset!important;box-shadow:inset 0 0 0 2px #c16808!important;color:#d67c1c!important}.ui.inverted.brown.basic.active.button,.ui.inverted.brown.basic.buttons .active.button,.ui.inverted.brown.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #cc6f0d inset!important;box-shadow:inset 0 0 0 2px #cc6f0d!important;color:#d67c1c!important}.ui.inverted.brown.basic.button:active,.ui.inverted.brown.basic.buttons .button:active,.ui.inverted.brown.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #a96216 inset!important;box-shadow:inset 0 0 0 2px #a96216!important;color:#d67c1c!important}.ui.blue.button,.ui.blue.buttons .button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.blue.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.blue.button:hover,.ui.blue.buttons .button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.blue.button:focus,.ui.blue.buttons .button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.blue.button:active,.ui.blue.buttons .button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.blue.active.button,.ui.blue.button .active.button:active,.ui.blue.buttons .active.button,.ui.blue.buttons .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.blue.button,.ui.basic.blue.buttons .button{-webkit-box-shadow:0 0 0 1px #2185d0 inset!important;box-shadow:inset 0 0 0 1px #2185d0!important;color:#2185d0!important}.ui.basic.blue.button:hover,.ui.basic.blue.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #1678c2 inset!important;box-shadow:inset 0 0 0 1px #1678c2!important;color:#1678c2!important}.ui.basic.blue.button:focus,.ui.basic.blue.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #0d71bb inset!important;box-shadow:inset 0 0 0 1px #0d71bb!important;color:#1678c2!important}.ui.basic.blue.active.button,.ui.basic.blue.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #1279c6 inset!important;box-shadow:inset 0 0 0 1px #1279c6!important;color:#1a69a4!important}.ui.basic.blue.button:active,.ui.basic.blue.buttons .button:active{-webkit-box-shadow:0 0 0 1px #1a69a4 inset!important;box-shadow:inset 0 0 0 1px #1a69a4!important;color:#1a69a4!important}.ui.buttons:not(.vertical)>.basic.blue.button:not(:first-child){margin-left:-1px}.ui.inverted.blue.button,.ui.inverted.blue.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #54c8ff inset!important;box-shadow:inset 0 0 0 2px #54c8ff!important;color:#54c8ff}.ui.inverted.blue.button.active,.ui.inverted.blue.button:active,.ui.inverted.blue.button:focus,.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button.active,.ui.inverted.blue.buttons .button:active,.ui.inverted.blue.buttons .button:focus,.ui.inverted.blue.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button:hover{background-color:#3ac0ff}.ui.inverted.blue.button:focus,.ui.inverted.blue.buttons .button:focus{background-color:#2bbbff}.ui.inverted.blue.active.button,.ui.inverted.blue.buttons .active.button{background-color:#3ac0ff}.ui.inverted.blue.button:active,.ui.inverted.blue.buttons .button:active{background-color:#21b8ff}.ui.inverted.blue.basic.button,.ui.inverted.blue.basic.buttons .button,.ui.inverted.blue.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.blue.basic.button:hover,.ui.inverted.blue.basic.buttons .button:hover,.ui.inverted.blue.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #3ac0ff inset!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.blue.basic.button:focus,.ui.inverted.blue.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #2bbbff inset!important;box-shadow:inset 0 0 0 2px #2bbbff!important;color:#54c8ff!important}.ui.inverted.blue.basic.active.button,.ui.inverted.blue.basic.buttons .active.button,.ui.inverted.blue.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #3ac0ff inset!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.blue.basic.button:active,.ui.inverted.blue.basic.buttons .button:active,.ui.inverted.blue.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #21b8ff inset!important;box-shadow:inset 0 0 0 2px #21b8ff!important;color:#54c8ff!important}.ui.green.button,.ui.green.buttons .button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.green.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.green.button:hover,.ui.green.buttons .button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.green.button:focus,.ui.green.buttons .button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.green.button:active,.ui.green.buttons .button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.green.active.button,.ui.green.button .active.button:active,.ui.green.buttons .active.button,.ui.green.buttons .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.green.button,.ui.basic.green.buttons .button{-webkit-box-shadow:0 0 0 1px #21ba45 inset!important;box-shadow:inset 0 0 0 1px #21ba45!important;color:#21ba45!important}.ui.basic.green.button:hover,.ui.basic.green.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #16ab39 inset!important;box-shadow:inset 0 0 0 1px #16ab39!important;color:#16ab39!important}.ui.basic.green.button:focus,.ui.basic.green.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #0ea432 inset!important;box-shadow:inset 0 0 0 1px #0ea432!important;color:#16ab39!important}.ui.basic.green.active.button,.ui.basic.green.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #13ae38 inset!important;box-shadow:inset 0 0 0 1px #13ae38!important;color:#198f35!important}.ui.basic.green.button:active,.ui.basic.green.buttons .button:active{-webkit-box-shadow:0 0 0 1px #198f35 inset!important;box-shadow:inset 0 0 0 1px #198f35!important;color:#198f35!important}.ui.buttons:not(.vertical)>.basic.green.button:not(:first-child){margin-left:-1px}.ui.inverted.green.button,.ui.inverted.green.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #2ecc40 inset!important;box-shadow:inset 0 0 0 2px #2ecc40!important;color:#2ecc40}.ui.inverted.green.button.active,.ui.inverted.green.button:active,.ui.inverted.green.button:focus,.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button.active,.ui.inverted.green.buttons .button:active,.ui.inverted.green.buttons .button:focus,.ui.inverted.green.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button:hover{background-color:#22be34}.ui.inverted.green.button:focus,.ui.inverted.green.buttons .button:focus{background-color:#19b82b}.ui.inverted.green.active.button,.ui.inverted.green.buttons .active.button{background-color:#1fc231}.ui.inverted.green.button:active,.ui.inverted.green.buttons .button:active{background-color:#25a233}.ui.inverted.green.basic.button,.ui.inverted.green.basic.buttons .button,.ui.inverted.green.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.green.basic.button:hover,.ui.inverted.green.basic.buttons .button:hover,.ui.inverted.green.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #22be34 inset!important;box-shadow:inset 0 0 0 2px #22be34!important;color:#2ecc40!important}.ui.inverted.green.basic.button:focus,.ui.inverted.green.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #19b82b inset!important;box-shadow:inset 0 0 0 2px #19b82b!important;color:#2ecc40!important}.ui.inverted.green.basic.active.button,.ui.inverted.green.basic.buttons .active.button,.ui.inverted.green.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #1fc231 inset!important;box-shadow:inset 0 0 0 2px #1fc231!important;color:#2ecc40!important}.ui.inverted.green.basic.button:active,.ui.inverted.green.basic.buttons .button:active,.ui.inverted.green.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #25a233 inset!important;box-shadow:inset 0 0 0 2px #25a233!important;color:#2ecc40!important}.ui.orange.button,.ui.orange.buttons .button{background-color:#f2711c;color:#fff;text-shadow:none;background-image:none}.ui.orange.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.orange.button:hover,.ui.orange.buttons .button:hover{background-color:#f26202;color:#fff;text-shadow:none}.ui.orange.button:focus,.ui.orange.buttons .button:focus{background-color:#e55b00;color:#fff;text-shadow:none}.ui.orange.button:active,.ui.orange.buttons .button:active{background-color:#cf590c;color:#fff;text-shadow:none}.ui.orange.active.button,.ui.orange.button .active.button:active,.ui.orange.buttons .active.button,.ui.orange.buttons .active.button:active{background-color:#f56100;color:#fff;text-shadow:none}.ui.basic.orange.button,.ui.basic.orange.buttons .button{-webkit-box-shadow:0 0 0 1px #f2711c inset!important;box-shadow:inset 0 0 0 1px #f2711c!important;color:#f2711c!important}.ui.basic.orange.button:hover,.ui.basic.orange.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #f26202 inset!important;box-shadow:inset 0 0 0 1px #f26202!important;color:#f26202!important}.ui.basic.orange.button:focus,.ui.basic.orange.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #e55b00 inset!important;box-shadow:inset 0 0 0 1px #e55b00!important;color:#f26202!important}.ui.basic.orange.active.button,.ui.basic.orange.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #f56100 inset!important;box-shadow:inset 0 0 0 1px #f56100!important;color:#cf590c!important}.ui.basic.orange.button:active,.ui.basic.orange.buttons .button:active{-webkit-box-shadow:0 0 0 1px #cf590c inset!important;box-shadow:inset 0 0 0 1px #cf590c!important;color:#cf590c!important}.ui.buttons:not(.vertical)>.basic.orange.button:not(:first-child){margin-left:-1px}.ui.inverted.orange.button,.ui.inverted.orange.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #ff851b inset!important;box-shadow:inset 0 0 0 2px #ff851b!important;color:#ff851b}.ui.inverted.orange.button.active,.ui.inverted.orange.button:active,.ui.inverted.orange.button:focus,.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button.active,.ui.inverted.orange.buttons .button:active,.ui.inverted.orange.buttons .button:focus,.ui.inverted.orange.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button:hover{background-color:#ff7701}.ui.inverted.orange.button:focus,.ui.inverted.orange.buttons .button:focus{background-color:#f17000}.ui.inverted.orange.active.button,.ui.inverted.orange.buttons .active.button{background-color:#ff7701}.ui.inverted.orange.button:active,.ui.inverted.orange.buttons .button:active{background-color:#e76b00}.ui.inverted.orange.basic.button,.ui.inverted.orange.basic.buttons .button,.ui.inverted.orange.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.orange.basic.button:hover,.ui.inverted.orange.basic.buttons .button:hover,.ui.inverted.orange.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #ff7701 inset!important;box-shadow:inset 0 0 0 2px #ff7701!important;color:#ff851b!important}.ui.inverted.orange.basic.button:focus,.ui.inverted.orange.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #f17000 inset!important;box-shadow:inset 0 0 0 2px #f17000!important;color:#ff851b!important}.ui.inverted.orange.basic.active.button,.ui.inverted.orange.basic.buttons .active.button,.ui.inverted.orange.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #ff7701 inset!important;box-shadow:inset 0 0 0 2px #ff7701!important;color:#ff851b!important}.ui.inverted.orange.basic.button:active,.ui.inverted.orange.basic.buttons .button:active,.ui.inverted.orange.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #e76b00 inset!important;box-shadow:inset 0 0 0 2px #e76b00!important;color:#ff851b!important}.ui.pink.button,.ui.pink.buttons .button{background-color:#e03997;color:#fff;text-shadow:none;background-image:none}.ui.pink.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.pink.button:hover,.ui.pink.buttons .button:hover{background-color:#e61a8d;color:#fff;text-shadow:none}.ui.pink.button:focus,.ui.pink.buttons .button:focus{background-color:#e10f85;color:#fff;text-shadow:none}.ui.pink.button:active,.ui.pink.buttons .button:active{background-color:#c71f7e;color:#fff;text-shadow:none}.ui.pink.active.button,.ui.pink.button .active.button:active,.ui.pink.buttons .active.button,.ui.pink.buttons .active.button:active{background-color:#ea158d;color:#fff;text-shadow:none}.ui.basic.pink.button,.ui.basic.pink.buttons .button{-webkit-box-shadow:0 0 0 1px #e03997 inset!important;box-shadow:inset 0 0 0 1px #e03997!important;color:#e03997!important}.ui.basic.pink.button:hover,.ui.basic.pink.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #e61a8d inset!important;box-shadow:inset 0 0 0 1px #e61a8d!important;color:#e61a8d!important}.ui.basic.pink.button:focus,.ui.basic.pink.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #e10f85 inset!important;box-shadow:inset 0 0 0 1px #e10f85!important;color:#e61a8d!important}.ui.basic.pink.active.button,.ui.basic.pink.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #ea158d inset!important;box-shadow:inset 0 0 0 1px #ea158d!important;color:#c71f7e!important}.ui.basic.pink.button:active,.ui.basic.pink.buttons .button:active{-webkit-box-shadow:0 0 0 1px #c71f7e inset!important;box-shadow:inset 0 0 0 1px #c71f7e!important;color:#c71f7e!important}.ui.buttons:not(.vertical)>.basic.pink.button:not(:first-child){margin-left:-1px}.ui.inverted.pink.button,.ui.inverted.pink.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #ff8edf inset!important;box-shadow:inset 0 0 0 2px #ff8edf!important;color:#ff8edf}.ui.inverted.pink.button.active,.ui.inverted.pink.button:active,.ui.inverted.pink.button:focus,.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button.active,.ui.inverted.pink.buttons .button:active,.ui.inverted.pink.buttons .button:focus,.ui.inverted.pink.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button:hover{background-color:#ff74d8}.ui.inverted.pink.button:focus,.ui.inverted.pink.buttons .button:focus{background-color:#ff65d3}.ui.inverted.pink.active.button,.ui.inverted.pink.buttons .active.button{background-color:#ff74d8}.ui.inverted.pink.button:active,.ui.inverted.pink.buttons .button:active{background-color:#ff5bd1}.ui.inverted.pink.basic.button,.ui.inverted.pink.basic.buttons .button,.ui.inverted.pink.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.pink.basic.button:hover,.ui.inverted.pink.basic.buttons .button:hover,.ui.inverted.pink.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #ff74d8 inset!important;box-shadow:inset 0 0 0 2px #ff74d8!important;color:#ff8edf!important}.ui.inverted.pink.basic.button:focus,.ui.inverted.pink.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #ff65d3 inset!important;box-shadow:inset 0 0 0 2px #ff65d3!important;color:#ff8edf!important}.ui.inverted.pink.basic.active.button,.ui.inverted.pink.basic.buttons .active.button,.ui.inverted.pink.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #ff74d8 inset!important;box-shadow:inset 0 0 0 2px #ff74d8!important;color:#ff8edf!important}.ui.inverted.pink.basic.button:active,.ui.inverted.pink.basic.buttons .button:active,.ui.inverted.pink.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #ff5bd1 inset!important;box-shadow:inset 0 0 0 2px #ff5bd1!important;color:#ff8edf!important}.ui.violet.button,.ui.violet.buttons .button{background-color:#6435c9;color:#fff;text-shadow:none;background-image:none}.ui.violet.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.violet.button:hover,.ui.violet.buttons .button:hover{background-color:#5829bb;color:#fff;text-shadow:none}.ui.violet.button:focus,.ui.violet.buttons .button:focus{background-color:#4f20b5;color:#fff;text-shadow:none}.ui.violet.button:active,.ui.violet.buttons .button:active{background-color:#502aa1;color:#fff;text-shadow:none}.ui.violet.active.button,.ui.violet.button .active.button:active,.ui.violet.buttons .active.button,.ui.violet.buttons .active.button:active{background-color:#5626bf;color:#fff;text-shadow:none}.ui.basic.violet.button,.ui.basic.violet.buttons .button{-webkit-box-shadow:0 0 0 1px #6435c9 inset!important;box-shadow:inset 0 0 0 1px #6435c9!important;color:#6435c9!important}.ui.basic.violet.button:hover,.ui.basic.violet.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #5829bb inset!important;box-shadow:inset 0 0 0 1px #5829bb!important;color:#5829bb!important}.ui.basic.violet.button:focus,.ui.basic.violet.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #4f20b5 inset!important;box-shadow:inset 0 0 0 1px #4f20b5!important;color:#5829bb!important}.ui.basic.violet.active.button,.ui.basic.violet.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #5626bf inset!important;box-shadow:inset 0 0 0 1px #5626bf!important;color:#502aa1!important}.ui.basic.violet.button:active,.ui.basic.violet.buttons .button:active{-webkit-box-shadow:0 0 0 1px #502aa1 inset!important;box-shadow:inset 0 0 0 1px #502aa1!important;color:#502aa1!important}.ui.buttons:not(.vertical)>.basic.violet.button:not(:first-child){margin-left:-1px}.ui.inverted.violet.button,.ui.inverted.violet.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #a291fb inset!important;box-shadow:inset 0 0 0 2px #a291fb!important;color:#a291fb}.ui.inverted.violet.button.active,.ui.inverted.violet.button:active,.ui.inverted.violet.button:focus,.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button.active,.ui.inverted.violet.buttons .button:active,.ui.inverted.violet.buttons .button:focus,.ui.inverted.violet.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button:hover{background-color:#8a73ff}.ui.inverted.violet.button:focus,.ui.inverted.violet.buttons .button:focus{background-color:#7d64ff}.ui.inverted.violet.active.button,.ui.inverted.violet.buttons .active.button{background-color:#8a73ff}.ui.inverted.violet.button:active,.ui.inverted.violet.buttons .button:active{background-color:#7860f9}.ui.inverted.violet.basic.button,.ui.inverted.violet.basic.buttons .button,.ui.inverted.violet.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.violet.basic.button:hover,.ui.inverted.violet.basic.buttons .button:hover,.ui.inverted.violet.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #8a73ff inset!important;box-shadow:inset 0 0 0 2px #8a73ff!important;color:#a291fb!important}.ui.inverted.violet.basic.button:focus,.ui.inverted.violet.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #7d64ff inset!important;box-shadow:inset 0 0 0 2px #7d64ff!important;color:#a291fb!important}.ui.inverted.violet.basic.active.button,.ui.inverted.violet.basic.buttons .active.button,.ui.inverted.violet.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #8a73ff inset!important;box-shadow:inset 0 0 0 2px #8a73ff!important;color:#a291fb!important}.ui.inverted.violet.basic.button:active,.ui.inverted.violet.basic.buttons .button:active,.ui.inverted.violet.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #7860f9 inset!important;box-shadow:inset 0 0 0 2px #7860f9!important;color:#a291fb!important}.ui.purple.button,.ui.purple.buttons .button{background-color:#a333c8;color:#fff;text-shadow:none;background-image:none}.ui.purple.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.purple.button:hover,.ui.purple.buttons .button:hover{background-color:#9627ba;color:#fff;text-shadow:none}.ui.purple.button:focus,.ui.purple.buttons .button:focus{background-color:#8f1eb4;color:#fff;text-shadow:none}.ui.purple.button:active,.ui.purple.buttons .button:active{background-color:#82299f;color:#fff;text-shadow:none}.ui.purple.active.button,.ui.purple.button .active.button:active,.ui.purple.buttons .active.button,.ui.purple.buttons .active.button:active{background-color:#9724be;color:#fff;text-shadow:none}.ui.basic.purple.button,.ui.basic.purple.buttons .button{-webkit-box-shadow:0 0 0 1px #a333c8 inset!important;box-shadow:inset 0 0 0 1px #a333c8!important;color:#a333c8!important}.ui.basic.purple.button:hover,.ui.basic.purple.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #9627ba inset!important;box-shadow:inset 0 0 0 1px #9627ba!important;color:#9627ba!important}.ui.basic.purple.button:focus,.ui.basic.purple.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #8f1eb4 inset!important;box-shadow:inset 0 0 0 1px #8f1eb4!important;color:#9627ba!important}.ui.basic.purple.active.button,.ui.basic.purple.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #9724be inset!important;box-shadow:inset 0 0 0 1px #9724be!important;color:#82299f!important}.ui.basic.purple.button:active,.ui.basic.purple.buttons .button:active{-webkit-box-shadow:0 0 0 1px #82299f inset!important;box-shadow:inset 0 0 0 1px #82299f!important;color:#82299f!important}.ui.buttons:not(.vertical)>.basic.purple.button:not(:first-child){margin-left:-1px}.ui.inverted.purple.button,.ui.inverted.purple.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #dc73ff inset!important;box-shadow:inset 0 0 0 2px #dc73ff!important;color:#dc73ff}.ui.inverted.purple.button.active,.ui.inverted.purple.button:active,.ui.inverted.purple.button:focus,.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button.active,.ui.inverted.purple.buttons .button:active,.ui.inverted.purple.buttons .button:focus,.ui.inverted.purple.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button:hover{background-color:#d65aff}.ui.inverted.purple.button:focus,.ui.inverted.purple.buttons .button:focus{background-color:#d24aff}.ui.inverted.purple.active.button,.ui.inverted.purple.buttons .active.button{background-color:#d65aff}.ui.inverted.purple.button:active,.ui.inverted.purple.buttons .button:active{background-color:#cf40ff}.ui.inverted.purple.basic.button,.ui.inverted.purple.basic.buttons .button,.ui.inverted.purple.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.purple.basic.button:hover,.ui.inverted.purple.basic.buttons .button:hover,.ui.inverted.purple.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #d65aff inset!important;box-shadow:inset 0 0 0 2px #d65aff!important;color:#dc73ff!important}.ui.inverted.purple.basic.button:focus,.ui.inverted.purple.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #d24aff inset!important;box-shadow:inset 0 0 0 2px #d24aff!important;color:#dc73ff!important}.ui.inverted.purple.basic.active.button,.ui.inverted.purple.basic.buttons .active.button,.ui.inverted.purple.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #d65aff inset!important;box-shadow:inset 0 0 0 2px #d65aff!important;color:#dc73ff!important}.ui.inverted.purple.basic.button:active,.ui.inverted.purple.basic.buttons .button:active,.ui.inverted.purple.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #cf40ff inset!important;box-shadow:inset 0 0 0 2px #cf40ff!important;color:#dc73ff!important}.ui.red.button,.ui.red.buttons .button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.red.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.red.button:hover,.ui.red.buttons .button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.red.button:focus,.ui.red.buttons .button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.red.button:active,.ui.red.buttons .button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.red.active.button,.ui.red.button .active.button:active,.ui.red.buttons .active.button,.ui.red.buttons .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.red.button,.ui.basic.red.buttons .button{-webkit-box-shadow:0 0 0 1px #db2828 inset!important;box-shadow:inset 0 0 0 1px #db2828!important;color:#db2828!important}.ui.basic.red.button:hover,.ui.basic.red.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #d01919 inset!important;box-shadow:inset 0 0 0 1px #d01919!important;color:#d01919!important}.ui.basic.red.button:focus,.ui.basic.red.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #ca1010 inset!important;box-shadow:inset 0 0 0 1px #ca1010!important;color:#d01919!important}.ui.basic.red.active.button,.ui.basic.red.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #d41515 inset!important;box-shadow:inset 0 0 0 1px #d41515!important;color:#b21e1e!important}.ui.basic.red.button:active,.ui.basic.red.buttons .button:active{-webkit-box-shadow:0 0 0 1px #b21e1e inset!important;box-shadow:inset 0 0 0 1px #b21e1e!important;color:#b21e1e!important}.ui.buttons:not(.vertical)>.basic.red.button:not(:first-child){margin-left:-1px}.ui.inverted.red.button,.ui.inverted.red.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #ff695e inset!important;box-shadow:inset 0 0 0 2px #ff695e!important;color:#ff695e}.ui.inverted.red.button.active,.ui.inverted.red.button:active,.ui.inverted.red.button:focus,.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button.active,.ui.inverted.red.buttons .button:active,.ui.inverted.red.buttons .button:focus,.ui.inverted.red.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button:hover{background-color:#ff5144}.ui.inverted.red.button:focus,.ui.inverted.red.buttons .button:focus{background-color:#ff4335}.ui.inverted.red.active.button,.ui.inverted.red.buttons .active.button{background-color:#ff5144}.ui.inverted.red.button:active,.ui.inverted.red.buttons .button:active{background-color:#ff392b}.ui.inverted.red.basic.button,.ui.inverted.red.basic.buttons .button,.ui.inverted.red.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.red.basic.button:hover,.ui.inverted.red.basic.buttons .button:hover,.ui.inverted.red.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #ff5144 inset!important;box-shadow:inset 0 0 0 2px #ff5144!important;color:#ff695e!important}.ui.inverted.red.basic.button:focus,.ui.inverted.red.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #ff4335 inset!important;box-shadow:inset 0 0 0 2px #ff4335!important;color:#ff695e!important}.ui.inverted.red.basic.active.button,.ui.inverted.red.basic.buttons .active.button,.ui.inverted.red.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #ff5144 inset!important;box-shadow:inset 0 0 0 2px #ff5144!important;color:#ff695e!important}.ui.inverted.red.basic.button:active,.ui.inverted.red.basic.buttons .button:active,.ui.inverted.red.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #ff392b inset!important;box-shadow:inset 0 0 0 2px #ff392b!important;color:#ff695e!important}.ui.teal.button,.ui.teal.buttons .button{background-color:#00b5ad;color:#fff;text-shadow:none;background-image:none}.ui.teal.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.teal.button:hover,.ui.teal.buttons .button:hover{background-color:#009c95;color:#fff;text-shadow:none}.ui.teal.button:focus,.ui.teal.buttons .button:focus{background-color:#008c86;color:#fff;text-shadow:none}.ui.teal.button:active,.ui.teal.buttons .button:active{background-color:#00827c;color:#fff;text-shadow:none}.ui.teal.active.button,.ui.teal.button .active.button:active,.ui.teal.buttons .active.button,.ui.teal.buttons .active.button:active{background-color:#009c95;color:#fff;text-shadow:none}.ui.basic.teal.button,.ui.basic.teal.buttons .button{-webkit-box-shadow:0 0 0 1px #00b5ad inset!important;box-shadow:inset 0 0 0 1px #00b5ad!important;color:#00b5ad!important}.ui.basic.teal.button:hover,.ui.basic.teal.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #009c95 inset!important;box-shadow:inset 0 0 0 1px #009c95!important;color:#009c95!important}.ui.basic.teal.button:focus,.ui.basic.teal.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #008c86 inset!important;box-shadow:inset 0 0 0 1px #008c86!important;color:#009c95!important}.ui.basic.teal.active.button,.ui.basic.teal.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #009c95 inset!important;box-shadow:inset 0 0 0 1px #009c95!important;color:#00827c!important}.ui.basic.teal.button:active,.ui.basic.teal.buttons .button:active{-webkit-box-shadow:0 0 0 1px #00827c inset!important;box-shadow:inset 0 0 0 1px #00827c!important;color:#00827c!important}.ui.buttons:not(.vertical)>.basic.teal.button:not(:first-child){margin-left:-1px}.ui.inverted.teal.button,.ui.inverted.teal.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #6dffff inset!important;box-shadow:inset 0 0 0 2px #6dffff!important;color:#6dffff}.ui.inverted.teal.button.active,.ui.inverted.teal.button:active,.ui.inverted.teal.button:focus,.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button.active,.ui.inverted.teal.buttons .button:active,.ui.inverted.teal.buttons .button:focus,.ui.inverted.teal.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button:hover{background-color:#54ffff}.ui.inverted.teal.button:focus,.ui.inverted.teal.buttons .button:focus{background-color:#4ff}.ui.inverted.teal.active.button,.ui.inverted.teal.buttons .active.button{background-color:#54ffff}.ui.inverted.teal.button:active,.ui.inverted.teal.buttons .button:active{background-color:#3affff}.ui.inverted.teal.basic.button,.ui.inverted.teal.basic.buttons .button,.ui.inverted.teal.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.teal.basic.button:hover,.ui.inverted.teal.basic.buttons .button:hover,.ui.inverted.teal.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #54ffff inset!important;box-shadow:inset 0 0 0 2px #54ffff!important;color:#6dffff!important}.ui.inverted.teal.basic.button:focus,.ui.inverted.teal.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #4ff inset!important;box-shadow:inset 0 0 0 2px #4ff!important;color:#6dffff!important}.ui.inverted.teal.basic.active.button,.ui.inverted.teal.basic.buttons .active.button,.ui.inverted.teal.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #54ffff inset!important;box-shadow:inset 0 0 0 2px #54ffff!important;color:#6dffff!important}.ui.inverted.teal.basic.button:active,.ui.inverted.teal.basic.buttons .button:active,.ui.inverted.teal.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #3affff inset!important;box-shadow:inset 0 0 0 2px #3affff!important;color:#6dffff!important}.ui.olive.button,.ui.olive.buttons .button{background-color:#b5cc18;color:#fff;text-shadow:none;background-image:none}.ui.olive.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.olive.button:hover,.ui.olive.buttons .button:hover{background-color:#a7bd0d;color:#fff;text-shadow:none}.ui.olive.button:focus,.ui.olive.buttons .button:focus{background-color:#a0b605;color:#fff;text-shadow:none}.ui.olive.button:active,.ui.olive.buttons .button:active{background-color:#8d9e13;color:#fff;text-shadow:none}.ui.olive.active.button,.ui.olive.button .active.button:active,.ui.olive.buttons .active.button,.ui.olive.buttons .active.button:active{background-color:#aac109;color:#fff;text-shadow:none}.ui.basic.olive.button,.ui.basic.olive.buttons .button{-webkit-box-shadow:0 0 0 1px #b5cc18 inset!important;box-shadow:inset 0 0 0 1px #b5cc18!important;color:#b5cc18!important}.ui.basic.olive.button:hover,.ui.basic.olive.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #a7bd0d inset!important;box-shadow:inset 0 0 0 1px #a7bd0d!important;color:#a7bd0d!important}.ui.basic.olive.button:focus,.ui.basic.olive.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #a0b605 inset!important;box-shadow:inset 0 0 0 1px #a0b605!important;color:#a7bd0d!important}.ui.basic.olive.active.button,.ui.basic.olive.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #aac109 inset!important;box-shadow:inset 0 0 0 1px #aac109!important;color:#8d9e13!important}.ui.basic.olive.button:active,.ui.basic.olive.buttons .button:active{-webkit-box-shadow:0 0 0 1px #8d9e13 inset!important;box-shadow:inset 0 0 0 1px #8d9e13!important;color:#8d9e13!important}.ui.buttons:not(.vertical)>.basic.olive.button:not(:first-child){margin-left:-1px}.ui.inverted.olive.button,.ui.inverted.olive.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #d9e778 inset!important;box-shadow:inset 0 0 0 2px #d9e778!important;color:#d9e778}.ui.inverted.olive.button.active,.ui.inverted.olive.button:active,.ui.inverted.olive.button:focus,.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button.active,.ui.inverted.olive.buttons .button:active,.ui.inverted.olive.buttons .button:focus,.ui.inverted.olive.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button:hover{background-color:#d8ea5c}.ui.inverted.olive.button:focus,.ui.inverted.olive.buttons .button:focus{background-color:#daef47}.ui.inverted.olive.active.button,.ui.inverted.olive.buttons .active.button{background-color:#daed59}.ui.inverted.olive.button:active,.ui.inverted.olive.buttons .button:active{background-color:#cddf4d}.ui.inverted.olive.basic.button,.ui.inverted.olive.basic.buttons .button,.ui.inverted.olive.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.olive.basic.button:hover,.ui.inverted.olive.basic.buttons .button:hover,.ui.inverted.olive.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #d8ea5c inset!important;box-shadow:inset 0 0 0 2px #d8ea5c!important;color:#d9e778!important}.ui.inverted.olive.basic.button:focus,.ui.inverted.olive.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #daef47 inset!important;box-shadow:inset 0 0 0 2px #daef47!important;color:#d9e778!important}.ui.inverted.olive.basic.active.button,.ui.inverted.olive.basic.buttons .active.button,.ui.inverted.olive.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #daed59 inset!important;box-shadow:inset 0 0 0 2px #daed59!important;color:#d9e778!important}.ui.inverted.olive.basic.button:active,.ui.inverted.olive.basic.buttons .button:active,.ui.inverted.olive.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #cddf4d inset!important;box-shadow:inset 0 0 0 2px #cddf4d!important;color:#d9e778!important}.ui.yellow.button,.ui.yellow.buttons .button{background-color:#fbbd08;color:#fff;text-shadow:none;background-image:none}.ui.yellow.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.yellow.button:hover,.ui.yellow.buttons .button:hover{background-color:#eaae00;color:#fff;text-shadow:none}.ui.yellow.button:focus,.ui.yellow.buttons .button:focus{background-color:#daa300;color:#fff;text-shadow:none}.ui.yellow.button:active,.ui.yellow.buttons .button:active{background-color:#cd9903;color:#fff;text-shadow:none}.ui.yellow.active.button,.ui.yellow.button .active.button:active,.ui.yellow.buttons .active.button,.ui.yellow.buttons .active.button:active{background-color:#eaae00;color:#fff;text-shadow:none}.ui.basic.yellow.button,.ui.basic.yellow.buttons .button{-webkit-box-shadow:0 0 0 1px #fbbd08 inset!important;box-shadow:inset 0 0 0 1px #fbbd08!important;color:#fbbd08!important}.ui.basic.yellow.button:hover,.ui.basic.yellow.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #eaae00 inset!important;box-shadow:inset 0 0 0 1px #eaae00!important;color:#eaae00!important}.ui.basic.yellow.button:focus,.ui.basic.yellow.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #daa300 inset!important;box-shadow:inset 0 0 0 1px #daa300!important;color:#eaae00!important}.ui.basic.yellow.active.button,.ui.basic.yellow.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #eaae00 inset!important;box-shadow:inset 0 0 0 1px #eaae00!important;color:#cd9903!important}.ui.basic.yellow.button:active,.ui.basic.yellow.buttons .button:active{-webkit-box-shadow:0 0 0 1px #cd9903 inset!important;box-shadow:inset 0 0 0 1px #cd9903!important;color:#cd9903!important}.ui.buttons:not(.vertical)>.basic.yellow.button:not(:first-child){margin-left:-1px}.ui.inverted.yellow.button,.ui.inverted.yellow.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #ffe21f inset!important;box-shadow:inset 0 0 0 2px #ffe21f!important;color:#ffe21f}.ui.inverted.yellow.button.active,.ui.inverted.yellow.button:active,.ui.inverted.yellow.button:focus,.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button.active,.ui.inverted.yellow.buttons .button:active,.ui.inverted.yellow.buttons .button:focus,.ui.inverted.yellow.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button:hover{background-color:#ffdf05}.ui.inverted.yellow.button:focus,.ui.inverted.yellow.buttons .button:focus{background-color:#f5d500}.ui.inverted.yellow.active.button,.ui.inverted.yellow.buttons .active.button{background-color:#ffdf05}.ui.inverted.yellow.button:active,.ui.inverted.yellow.buttons .button:active{background-color:#ebcd00}.ui.inverted.yellow.basic.button,.ui.inverted.yellow.basic.buttons .button,.ui.inverted.yellow.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.yellow.basic.button:hover,.ui.inverted.yellow.basic.buttons .button:hover,.ui.inverted.yellow.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #ffdf05 inset!important;box-shadow:inset 0 0 0 2px #ffdf05!important;color:#ffe21f!important}.ui.inverted.yellow.basic.button:focus,.ui.inverted.yellow.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #f5d500 inset!important;box-shadow:inset 0 0 0 2px #f5d500!important;color:#ffe21f!important}.ui.inverted.yellow.basic.active.button,.ui.inverted.yellow.basic.buttons .active.button,.ui.inverted.yellow.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #ffdf05 inset!important;box-shadow:inset 0 0 0 2px #ffdf05!important;color:#ffe21f!important}.ui.inverted.yellow.basic.button:active,.ui.inverted.yellow.basic.buttons .button:active,.ui.inverted.yellow.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #ebcd00 inset!important;box-shadow:inset 0 0 0 2px #ebcd00!important;color:#ffe21f!important}.ui.primary.button,.ui.primary.buttons .button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.primary.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.primary.button:hover,.ui.primary.buttons .button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.primary.button:focus,.ui.primary.buttons .button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.primary.button:active,.ui.primary.buttons .button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.primary.active.button,.ui.primary.button .active.button:active,.ui.primary.buttons .active.button,.ui.primary.buttons .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.primary.button,.ui.basic.primary.buttons .button{-webkit-box-shadow:0 0 0 1px #2185d0 inset!important;box-shadow:inset 0 0 0 1px #2185d0!important;color:#2185d0!important}.ui.basic.primary.button:hover,.ui.basic.primary.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #1678c2 inset!important;box-shadow:inset 0 0 0 1px #1678c2!important;color:#1678c2!important}.ui.basic.primary.button:focus,.ui.basic.primary.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #0d71bb inset!important;box-shadow:inset 0 0 0 1px #0d71bb!important;color:#1678c2!important}.ui.basic.primary.active.button,.ui.basic.primary.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #1279c6 inset!important;box-shadow:inset 0 0 0 1px #1279c6!important;color:#1a69a4!important}.ui.basic.primary.button:active,.ui.basic.primary.buttons .button:active{-webkit-box-shadow:0 0 0 1px #1a69a4 inset!important;box-shadow:inset 0 0 0 1px #1a69a4!important;color:#1a69a4!important}.ui.inverted.primary.button,.ui.inverted.primary.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #54c8ff inset!important;box-shadow:inset 0 0 0 2px #54c8ff!important;color:#54c8ff}.ui.inverted.primary.button.active,.ui.inverted.primary.button:active,.ui.inverted.primary.button:focus,.ui.inverted.primary.button:hover,.ui.inverted.primary.buttons .button.active,.ui.inverted.primary.buttons .button:active,.ui.inverted.primary.buttons .button:focus,.ui.inverted.primary.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.primary.button:hover,.ui.inverted.primary.buttons .button:hover{background-color:#3ac0ff}.ui.inverted.primary.button:focus,.ui.inverted.primary.buttons .button:focus{background-color:#2bbbff}.ui.inverted.primary.active.button,.ui.inverted.primary.buttons .active.button{background-color:#3ac0ff}.ui.inverted.primary.button:active,.ui.inverted.primary.buttons .button:active{background-color:#21b8ff}.ui.inverted.primary.basic.button,.ui.inverted.primary.basic.buttons .button,.ui.inverted.primary.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.primary.basic.button:hover,.ui.inverted.primary.basic.buttons .button:hover,.ui.inverted.primary.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #3ac0ff inset!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.primary.basic.button:focus,.ui.inverted.primary.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #2bbbff inset!important;box-shadow:inset 0 0 0 2px #2bbbff!important;color:#54c8ff!important}.ui.inverted.primary.basic.active.button,.ui.inverted.primary.basic.buttons .active.button,.ui.inverted.primary.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #3ac0ff inset!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.primary.basic.button:active,.ui.inverted.primary.basic.buttons .button:active,.ui.inverted.primary.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #21b8ff inset!important;box-shadow:inset 0 0 0 2px #21b8ff!important;color:#54c8ff!important}.ui.secondary.button,.ui.secondary.buttons .button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.secondary.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.secondary.button:hover,.ui.secondary.buttons .button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.secondary.button:focus,.ui.secondary.buttons .button:focus{background-color:#2e3032;color:#fff;text-shadow:none}.ui.secondary.button:active,.ui.secondary.buttons .button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.secondary.active.button,.ui.secondary.button .active.button:active,.ui.secondary.buttons .active.button,.ui.secondary.buttons .active.button:active{background-color:#27292a;color:#fff;text-shadow:none}.ui.basic.secondary.button,.ui.basic.secondary.buttons .button{-webkit-box-shadow:0 0 0 1px #1b1c1d inset!important;box-shadow:inset 0 0 0 1px #1b1c1d!important;color:#1b1c1d!important}.ui.basic.secondary.button:hover,.ui.basic.secondary.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #27292a inset!important;box-shadow:inset 0 0 0 1px #27292a!important;color:#27292a!important}.ui.basic.secondary.button:focus,.ui.basic.secondary.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #2e3032 inset!important;box-shadow:inset 0 0 0 1px #2e3032!important;color:#27292a!important}.ui.basic.secondary.active.button,.ui.basic.secondary.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #27292a inset!important;box-shadow:inset 0 0 0 1px #27292a!important;color:#343637!important}.ui.basic.secondary.button:active,.ui.basic.secondary.buttons .button:active{-webkit-box-shadow:0 0 0 1px #343637 inset!important;box-shadow:inset 0 0 0 1px #343637!important;color:#343637!important}.ui.inverted.secondary.button,.ui.inverted.secondary.buttons .button{background-color:transparent;-webkit-box-shadow:0 0 0 2px #545454 inset!important;box-shadow:inset 0 0 0 2px #545454!important;color:#545454}.ui.inverted.secondary.button.active,.ui.inverted.secondary.button:active,.ui.inverted.secondary.button:focus,.ui.inverted.secondary.button:hover,.ui.inverted.secondary.buttons .button.active,.ui.inverted.secondary.buttons .button:active,.ui.inverted.secondary.buttons .button:focus,.ui.inverted.secondary.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.secondary.button:hover,.ui.inverted.secondary.buttons .button:hover{background-color:#616161}.ui.inverted.secondary.button:focus,.ui.inverted.secondary.buttons .button:focus{background-color:#686868}.ui.inverted.secondary.active.button,.ui.inverted.secondary.buttons .active.button{background-color:#616161}.ui.inverted.secondary.button:active,.ui.inverted.secondary.buttons .button:active{background-color:#6e6e6e}.ui.inverted.secondary.basic.button,.ui.inverted.secondary.basic.buttons .button,.ui.inverted.secondary.buttons .basic.button{background-color:transparent;-webkit-box-shadow:0 0 0 2px hsla(0,0%,100%,.5) inset!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.secondary.basic.button:hover,.ui.inverted.secondary.basic.buttons .button:hover,.ui.inverted.secondary.buttons .basic.button:hover{-webkit-box-shadow:0 0 0 2px #616161 inset!important;box-shadow:inset 0 0 0 2px #616161!important;color:#545454!important}.ui.inverted.secondary.basic.button:focus,.ui.inverted.secondary.basic.buttons .button:focus{-webkit-box-shadow:0 0 0 2px #686868 inset!important;box-shadow:inset 0 0 0 2px #686868!important;color:#545454!important}.ui.inverted.secondary.basic.active.button,.ui.inverted.secondary.basic.buttons .active.button,.ui.inverted.secondary.buttons .basic.active.button{-webkit-box-shadow:0 0 0 2px #616161 inset!important;box-shadow:inset 0 0 0 2px #616161!important;color:#545454!important}.ui.inverted.secondary.basic.button:active,.ui.inverted.secondary.basic.buttons .button:active,.ui.inverted.secondary.buttons .basic.button:active{-webkit-box-shadow:0 0 0 2px #6e6e6e inset!important;box-shadow:inset 0 0 0 2px #6e6e6e!important;color:#545454!important}.ui.positive.button,.ui.positive.buttons .button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.positive.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.positive.button:hover,.ui.positive.buttons .button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.positive.button:focus,.ui.positive.buttons .button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.positive.button:active,.ui.positive.buttons .button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.positive.active.button,.ui.positive.button .active.button:active,.ui.positive.buttons .active.button,.ui.positive.buttons .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.positive.button,.ui.basic.positive.buttons .button{-webkit-box-shadow:0 0 0 1px #21ba45 inset!important;box-shadow:inset 0 0 0 1px #21ba45!important;color:#21ba45!important}.ui.basic.positive.button:hover,.ui.basic.positive.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #16ab39 inset!important;box-shadow:inset 0 0 0 1px #16ab39!important;color:#16ab39!important}.ui.basic.positive.button:focus,.ui.basic.positive.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #0ea432 inset!important;box-shadow:inset 0 0 0 1px #0ea432!important;color:#16ab39!important}.ui.basic.positive.active.button,.ui.basic.positive.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #13ae38 inset!important;box-shadow:inset 0 0 0 1px #13ae38!important;color:#198f35!important}.ui.basic.positive.button:active,.ui.basic.positive.buttons .button:active{-webkit-box-shadow:0 0 0 1px #198f35 inset!important;box-shadow:inset 0 0 0 1px #198f35!important;color:#198f35!important}.ui.negative.button,.ui.negative.buttons .button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.negative.button{-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.negative.button:hover,.ui.negative.buttons .button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.negative.button:focus,.ui.negative.buttons .button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.negative.button:active,.ui.negative.buttons .button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.negative.active.button,.ui.negative.button .active.button:active,.ui.negative.buttons .active.button,.ui.negative.buttons .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.negative.button,.ui.basic.negative.buttons .button{-webkit-box-shadow:0 0 0 1px #db2828 inset!important;box-shadow:inset 0 0 0 1px #db2828!important;color:#db2828!important}.ui.basic.negative.button:hover,.ui.basic.negative.buttons .button:hover{background:transparent!important;-webkit-box-shadow:0 0 0 1px #d01919 inset!important;box-shadow:inset 0 0 0 1px #d01919!important;color:#d01919!important}.ui.basic.negative.button:focus,.ui.basic.negative.buttons .button:focus{background:transparent!important;-webkit-box-shadow:0 0 0 1px #ca1010 inset!important;box-shadow:inset 0 0 0 1px #ca1010!important;color:#d01919!important}.ui.basic.negative.active.button,.ui.basic.negative.buttons .active.button{background:transparent!important;-webkit-box-shadow:0 0 0 1px #d41515 inset!important;box-shadow:inset 0 0 0 1px #d41515!important;color:#b21e1e!important}.ui.basic.negative.button:active,.ui.basic.negative.buttons .button:active{-webkit-box-shadow:0 0 0 1px #b21e1e inset!important;box-shadow:inset 0 0 0 1px #b21e1e!important;color:#b21e1e!important}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;font-size:0;vertical-align:baseline;margin:0 .25em 0 0}.ui.buttons:not(.basic):not(.inverted){-webkit-box-shadow:none;box-shadow:none}.ui.buttons:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.buttons .button{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;border-radius:0;margin:0}.ui.buttons:not(.basic):not(.inverted)>.button,.ui.buttons>.ui.button:not(.basic):not(.inverted){-webkit-box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px transparent,inset 0 0 0 0 rgba(34,36,38,.15)}.ui.buttons .button:first-child{border-left:none;margin-left:0;border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.buttons .button:last-child{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.vertical.buttons .button{display:block;float:none;width:100%;margin:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.ui.vertical.buttons .button:first-child{border-top-left-radius:.28571429rem;border-top-right-radius:.28571429rem}.ui.vertical.buttons .button:last-child{margin-bottom:0;border-bottom-left-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons .button:only-child{border-radius:.28571429rem} + */.ui.button{cursor:pointer;display:inline-block;min-height:1em;outline:none;border:none;vertical-align:baseline;background:#e0e1e2 none;color:rgba(0,0,0,.6);font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;margin:0 .25em 0 0;padding:.78571429em 1.5em;text-transform:none;text-shadow:none;font-weight:700;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:opacity .1s ease,background-color .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease,-webkit-box-shadow .1s ease;will-change:"";-webkit-tap-highlight-color:transparent}.ui.button,.ui.button:hover{-webkit-box-shadow:inset 0 0 0 1px transparent,inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px transparent,inset 0 0 0 0 rgba(34,36,38,.15)}.ui.button:hover{background-color:#cacbcd;background-image:none;color:rgba(0,0,0,.8)}.ui.button:hover .icon{opacity:.85}.ui.button:focus{background-color:#cacbcd;color:rgba(0,0,0,.8);background-image:""!important;-webkit-box-shadow:""!important;box-shadow:""!important}.ui.button:focus .icon{opacity:.85}.ui.active.button:active,.ui.button:active{background-color:#babbbc;background-image:"";color:rgba(0,0,0,.9);-webkit-box-shadow:inset 0 0 0 1px transparent,none;box-shadow:inset 0 0 0 1px transparent,none}.ui.active.button{-webkit-box-shadow:inset 0 0 0 1px transparent;box-shadow:inset 0 0 0 1px transparent}.ui.active.button,.ui.active.button:hover{color:rgba(0,0,0,.95)}.ui.active.button,.ui.active.button:active,.ui.active.button:hover{background-color:#c0c1c2;background-image:none}.ui.loading.loading.loading.loading.loading.loading.button{position:relative;cursor:default;text-shadow:none!important;color:transparent!important;opacity:1;pointer-events:auto;-webkit-transition:all 0s linear,opacity .1s ease;transition:all 0s linear,opacity .1s ease}.ui.loading.button:before{border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}.ui.loading.button:after,.ui.loading.button:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em}.ui.loading.button:after{-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid transparent;border-top-color:#fff;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent}.ui.labeled.icon.loading.button .icon{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}@-webkit-keyframes button-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes button-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.basic.loading.button:not(.inverted):before{border-color:rgba(0,0,0,.1)}.ui.basic.loading.button:not(.inverted):after{border-top-color:#767676}.ui.button:disabled,.ui.buttons .disabled.button,.ui.disabled.active.button,.ui.disabled.button,.ui.disabled.button:hover{cursor:default;opacity:.45!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;pointer-events:none!important}.ui.basic.buttons .ui.disabled.button{border-color:rgba(34,36,38,.5)}.ui.animated.button{position:relative;overflow:hidden;padding-right:0!important;vertical-align:middle;z-index:1}.ui.animated.button .content{will-change:transform,opacity}.ui.animated.button .visible.content{position:relative;margin-right:1.5em}.ui.animated.button .hidden.content{position:absolute;width:100%}.ui.animated.button .hidden.content,.ui.animated.button .visible.content{-webkit-transition:right .3s ease 0s;transition:right .3s ease 0s}.ui.animated.button .visible.content{left:auto;right:0}.ui.animated.button .hidden.content{top:50%;left:auto;right:-100%;margin-top:-.5em}.ui.animated.button:focus .visible.content,.ui.animated.button:hover .visible.content{left:auto;right:200%}.ui.animated.button:focus .hidden.content,.ui.animated.button:hover .hidden.content{left:auto;right:0}.ui.vertical.animated.button .hidden.content,.ui.vertical.animated.button .visible.content{-webkit-transition:top .3s ease,-webkit-transform .3s ease;transition:top .3s ease,-webkit-transform .3s ease;transition:top .3s ease,transform .3s ease;transition:top .3s ease,transform .3s ease,-webkit-transform .3s ease}.ui.vertical.animated.button .visible.content{-webkit-transform:translateY(0);transform:translateY(0);right:auto}.ui.vertical.animated.button .hidden.content{top:-50%;left:0;right:auto}.ui.vertical.animated.button:focus .visible.content,.ui.vertical.animated.button:hover .visible.content{-webkit-transform:translateY(200%);transform:translateY(200%);right:auto}.ui.vertical.animated.button:focus .hidden.content,.ui.vertical.animated.button:hover .hidden.content{top:50%;right:auto}.ui.fade.animated.button .hidden.content,.ui.fade.animated.button .visible.content{-webkit-transition:opacity .3s ease,-webkit-transform .3s ease;transition:opacity .3s ease,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease;transition:opacity .3s ease,transform .3s ease,-webkit-transform .3s ease}.ui.fade.animated.button .visible.content{left:auto;right:auto;opacity:1;-webkit-transform:scale(1);transform:scale(1)}.ui.fade.animated.button .hidden.content{opacity:0;left:0;right:auto;-webkit-transform:scale(1.5);transform:scale(1.5)}.ui.fade.animated.button:focus .visible.content,.ui.fade.animated.button:hover .visible.content{left:auto;right:auto;opacity:0;-webkit-transform:scale(.75);transform:scale(.75)}.ui.fade.animated.button:focus .hidden.content,.ui.fade.animated.button:hover .hidden.content{left:0;right:auto;opacity:1;-webkit-transform:scale(1);transform:scale(1)}.ui.inverted.button{-webkit-box-shadow:inset 0 0 0 2px #fff!important;box-shadow:inset 0 0 0 2px #fff!important;background:transparent none;color:#fff;text-shadow:none!important}.ui.inverted.buttons .button{margin:0 0 0 -2px}.ui.inverted.buttons .button:first-child{margin-left:0}.ui.inverted.vertical.buttons .button{margin:0 0 -2px}.ui.inverted.vertical.buttons .button:first-child{margin-top:0}.ui.inverted.button.active,.ui.inverted.button:focus,.ui.inverted.button:hover{background:#fff;-webkit-box-shadow:inset 0 0 0 2px #fff!important;box-shadow:inset 0 0 0 2px #fff!important;color:rgba(0,0,0,.8)}.ui.inverted.button.active:focus{background:#dcddde;-webkit-box-shadow:inset 0 0 0 2px #dcddde!important;box-shadow:inset 0 0 0 2px #dcddde!important;color:rgba(0,0,0,.8)}.ui.labeled.button:not(.icon){display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;background:none!important;padding:0!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.labeled.button>.button{margin:0}.ui.labeled.button>.label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 0 0 -1px!important;padding:"";font-size:1em;border-color:rgba(34,36,38,.15)}.ui.labeled.button>.tag.label:before{width:1.85em;height:1.85em}.ui.labeled.button:not([class*="left labeled"])>.button{border-top-right-radius:0;border-bottom-right-radius:0}.ui.labeled.button:not([class*="left labeled"])>.label,.ui[class*="left labeled"].button>.button{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="left labeled"].button>.label{border-top-right-radius:0;border-bottom-right-radius:0}.ui.facebook.button{background-color:#3b5998;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.facebook.button:hover{background-color:#304d8a;color:#fff;text-shadow:none}.ui.facebook.button:active{background-color:#2d4373;color:#fff;text-shadow:none}.ui.twitter.button{background-color:#55acee;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.twitter.button:hover{background-color:#35a2f4;color:#fff;text-shadow:none}.ui.twitter.button:active{background-color:#2795e9;color:#fff;text-shadow:none}.ui.google.plus.button{background-color:#dd4b39;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.google.plus.button:hover{background-color:#e0321c;color:#fff;text-shadow:none}.ui.google.plus.button:active{background-color:#c23321;color:#fff;text-shadow:none}.ui.linkedin.button{background-color:#1f88be;color:#fff;text-shadow:none}.ui.linkedin.button:hover{background-color:#147baf;color:#fff;text-shadow:none}.ui.linkedin.button:active{background-color:#186992;color:#fff;text-shadow:none}.ui.youtube.button{background-color:red;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.youtube.button:hover{background-color:#e60000;color:#fff;text-shadow:none}.ui.youtube.button:active{background-color:#c00;color:#fff;text-shadow:none}.ui.instagram.button{background-color:#49769c;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.instagram.button:hover{background-color:#3d698e;color:#fff;text-shadow:none}.ui.instagram.button:active{background-color:#395c79;color:#fff;text-shadow:none}.ui.pinterest.button{background-color:#bd081c;color:#fff;text-shadow:none;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.pinterest.button:hover{background-color:#ac0013;color:#fff;text-shadow:none}.ui.pinterest.button:active{background-color:#8c0615;color:#fff;text-shadow:none}.ui.vk.button{background-color:#4d7198;color:#fff;background-image:none;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.vk.button:hover{background-color:#41648a;color:#fff}.ui.vk.button:active{background-color:#3c5876;color:#fff}.ui.button>.icon:not(.button){height:.85714286em;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease;vertical-align:"";color:""}.ui.button:not(.icon)>.icon:not(.button):not(.dropdown),.ui.button>.icon:not(.button){margin:0 .42857143em 0 -.21428571em}.ui.button:not(.icon)>.right.icon:not(.button):not(.dropdown){margin:0 -.21428571em 0 .42857143em}.ui[class*="left floated"].button,.ui[class*="left floated"].buttons{float:left;margin-left:0;margin-right:.25em}.ui[class*="right floated"].button,.ui[class*="right floated"].buttons{float:right;margin-right:0;margin-left:.25em}.ui.compact.button,.ui.compact.buttons .button{padding:.58928571em 1.125em}.ui.compact.icon.button,.ui.compact.icon.buttons .button{padding:.58928571em}.ui.compact.labeled.icon.button,.ui.compact.labeled.icon.buttons .button{padding:.58928571em 3.69642857em}.ui.mini.button,.ui.mini.buttons .button,.ui.mini.buttons .or{font-size:.78571429rem}.ui.tiny.button,.ui.tiny.buttons .button,.ui.tiny.buttons .or{font-size:.85714286rem}.ui.small.button,.ui.small.buttons .button,.ui.small.buttons .or{font-size:.92857143rem}.ui.button,.ui.buttons .button,.ui.buttons .or{font-size:1rem}.ui.large.button,.ui.large.buttons .button,.ui.large.buttons .or{font-size:1.14285714rem}.ui.big.button,.ui.big.buttons .button,.ui.big.buttons .or{font-size:1.28571429rem}.ui.huge.button,.ui.huge.buttons .button,.ui.huge.buttons .or{font-size:1.42857143rem}.ui.massive.button,.ui.massive.buttons .button,.ui.massive.buttons .or{font-size:1.71428571rem}.ui.icon.button,.ui.icon.buttons .button{padding:.78571429em}.ui.icon.button>.icon,.ui.icon.buttons .button>.icon{opacity:.9;margin:0!important;vertical-align:top}.ui.basic.button,.ui.basic.buttons .button{background:transparent none!important;color:rgba(0,0,0,.6)!important;font-weight:400;border-radius:.28571429rem;text-transform:none;text-shadow:none!important;-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.15)}.ui.basic.buttons{-webkit-box-shadow:none;box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem}.ui.basic.buttons .button{border-radius:0}.ui.basic.button:focus,.ui.basic.button:hover,.ui.basic.buttons .button:focus,.ui.basic.buttons .button:hover{background:#fff!important;color:rgba(0,0,0,.8)!important;-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.35),inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.35),inset 0 0 0 0 rgba(34,36,38,.15)}.ui.basic.button:active,.ui.basic.buttons .button:active{background:#f8f8f8!important;color:rgba(0,0,0,.9)!important;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 1px 4px 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset 0 1px 4px 0 rgba(34,36,38,.15)}.ui.basic.active.button,.ui.basic.buttons .active.button{background:rgba(0,0,0,.05)!important;-webkit-box-shadow:""!important;box-shadow:""!important;color:rgba(0,0,0,.95)!important}.ui.basic.active.button:hover,.ui.basic.buttons .active.button:hover{background-color:rgba(0,0,0,.05)}.ui.basic.buttons .button:hover{-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.35),inset inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.35),inset inset 0 0 0 0 rgba(34,36,38,.15)}.ui.basic.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset inset 0 1px 4px 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15),inset inset 0 1px 4px 0 rgba(34,36,38,.15)}.ui.basic.buttons .active.button{-webkit-box-shadow:""!important;box-shadow:""!important}.ui.basic.inverted.button,.ui.basic.inverted.buttons .button{background-color:transparent!important;color:#f9fafb!important;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important}.ui.basic.inverted.button:focus,.ui.basic.inverted.button:hover,.ui.basic.inverted.buttons .button:focus,.ui.basic.inverted.buttons .button:hover{color:#fff!important;-webkit-box-shadow:inset 0 0 0 2px #fff!important;box-shadow:inset 0 0 0 2px #fff!important}.ui.basic.inverted.button:active,.ui.basic.inverted.buttons .button:active{background-color:hsla(0,0%,100%,.08)!important;color:#fff!important;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.9)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.9)!important}.ui.basic.inverted.active.button,.ui.basic.inverted.buttons .active.button{background-color:hsla(0,0%,100%,.08);color:#fff;text-shadow:none;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.7);box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.7)}.ui.basic.inverted.active.button:hover,.ui.basic.inverted.buttons .active.button:hover{background-color:hsla(0,0%,100%,.15);-webkit-box-shadow:inset 0 0 0 2px #fff!important;box-shadow:inset 0 0 0 2px #fff!important}.ui.basic.buttons .button{border-left:1px solid rgba(34,36,38,.15);-webkit-box-shadow:none;box-shadow:none}.ui.basic.vertical.buttons .button{border-left:none;border-left-width:0;border-top:1px solid rgba(34,36,38,.15)}.ui.basic.vertical.buttons .button:first-child{border-top-width:0}.ui.labeled.icon.button,.ui.labeled.icon.buttons .button{position:relative;padding-left:4.07142857em!important;padding-right:1.5em!important}.ui.labeled.icon.button>.icon,.ui.labeled.icon.buttons>.button>.icon{position:absolute;height:100%;line-height:1;border-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit;text-align:center;margin:0;width:2.57142857em;background-color:rgba(0,0,0,.05);color:"";-webkit-box-shadow:inset -1px 0 0 0 transparent;box-shadow:inset -1px 0 0 0 transparent;top:0;left:0}.ui[class*="right labeled"].icon.button{padding-right:4.07142857em!important;padding-left:1.5em!important}.ui[class*="right labeled"].icon.button>.icon{left:auto;right:0;border-radius:0;border-top-right-radius:inherit;border-bottom-right-radius:inherit;-webkit-box-shadow:inset 1px 0 0 0 transparent;box-shadow:inset 1px 0 0 0 transparent}.ui.labeled.icon.button>.icon:after,.ui.labeled.icon.button>.icon:before,.ui.labeled.icon.buttons>.button>.icon:after,.ui.labeled.icon.buttons>.button>.icon:before{display:block;position:absolute;width:100%;top:50%;text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ui.labeled.icon.buttons .button>.icon{border-radius:0}.ui.labeled.icon.buttons .button:first-child>.icon{border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.labeled.icon.buttons .button:last-child>.icon{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:first-child>.icon{border-radius:0;border-top-left-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:last-child>.icon{border-radius:0;border-bottom-left-radius:.28571429rem}.ui.fluid[class*="left labeled"].icon.button,.ui.fluid[class*="right labeled"].icon.button{padding-left:1.5em!important;padding-right:1.5em!important}.ui.button.toggle.active,.ui.buttons .button.toggle.active,.ui.toggle.buttons .active.button{background-color:#21ba45!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none;color:#fff!important}.ui.button.toggle.active:hover{background-color:#16ab39!important;text-shadow:none;color:#fff!important}.ui.circular.button{border-radius:10em}.ui.circular.button>.icon{width:1em;vertical-align:baseline}.ui.buttons .or{position:relative;width:.3em;height:2.57142857em;z-index:3}.ui.buttons .or:before{position:absolute;text-align:center;border-radius:500rem;content:"or";top:50%;left:50%;background-color:#fff;text-shadow:none;margin-top:-.89285714em;margin-left:-.89285714em;width:1.78571429em;height:1.78571429em;line-height:1.78571429em;color:rgba(0,0,0,.4);font-style:normal;font-weight:700;-webkit-box-shadow:inset 0 0 0 1px transparent;box-shadow:inset 0 0 0 1px transparent}.ui.buttons .or[data-text]:before{content:attr(data-text)}.ui.fluid.buttons .or{width:0!important}.ui.fluid.buttons .or:after{display:none}.ui.attached.button{position:relative;display:block;margin:0;border-radius:0;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.15)!important;box-shadow:0 0 0 1px rgba(34,36,38,.15)!important}.ui.attached.top.button{border-radius:.28571429rem .28571429rem 0 0}.ui.attached.bottom.button{border-radius:0 0 .28571429rem .28571429rem}.ui.left.attached.button{display:inline-block;border-left:none;text-align:right;padding-right:.75em;border-radius:.28571429rem 0 0 .28571429rem}.ui.right.attached.button{display:inline-block;text-align:left;padding-left:.75em;border-radius:0 .28571429rem .28571429rem 0}.ui.attached.buttons{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:0;width:auto!important;z-index:2;margin-left:-1px;margin-right:-1px}.ui.attached.buttons .button{margin:0}.ui.attached.buttons .button:first-child,.ui.attached.buttons .button:last-child{border-radius:0}.ui[class*="top attached"].buttons{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0}.ui[class*="top attached"].buttons .button:first-child{border-radius:.28571429rem 0 0 0}.ui[class*="top attached"].buttons .button:last-child{border-radius:0 .28571429rem 0 0}.ui[class*="bottom attached"].buttons{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].buttons .button:first-child{border-radius:0 0 0 .28571429rem}.ui[class*="bottom attached"].buttons .button:last-child{border-radius:0 0 .28571429rem 0}.ui[class*="left attached"].buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:0;margin-left:-1px;border-radius:0 .28571429rem .28571429rem 0}.ui[class*="left attached"].buttons .button:first-child{margin-left:-1px;border-radius:0 .28571429rem 0 0}.ui[class*="left attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 .28571429rem 0}.ui[class*="right attached"].buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-left:0;margin-right:-1px;border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="right attached"].buttons .button:first-child{margin-left:-1px;border-radius:.28571429rem 0 0 0}.ui[class*="right attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 0 .28571429rem}.ui.fluid.button,.ui.fluid.buttons{width:100%}.ui.fluid.button{display:block}.ui.two.buttons{width:100%}.ui.two.buttons>.button{width:50%}.ui.three.buttons{width:100%}.ui.three.buttons>.button{width:33.333%}.ui.four.buttons{width:100%}.ui.four.buttons>.button{width:25%}.ui.five.buttons{width:100%}.ui.five.buttons>.button{width:20%}.ui.six.buttons{width:100%}.ui.six.buttons>.button{width:16.666%}.ui.seven.buttons{width:100%}.ui.seven.buttons>.button{width:14.285%}.ui.eight.buttons{width:100%}.ui.eight.buttons>.button{width:12.5%}.ui.nine.buttons{width:100%}.ui.nine.buttons>.button{width:11.11%}.ui.ten.buttons{width:100%}.ui.ten.buttons>.button{width:10%}.ui.eleven.buttons{width:100%}.ui.eleven.buttons>.button{width:9.09%}.ui.twelve.buttons{width:100%}.ui.twelve.buttons>.button{width:8.3333%}.ui.fluid.vertical.buttons,.ui.fluid.vertical.buttons>.button{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}.ui.two.vertical.buttons>.button{height:50%}.ui.three.vertical.buttons>.button{height:33.333%}.ui.four.vertical.buttons>.button{height:25%}.ui.five.vertical.buttons>.button{height:20%}.ui.six.vertical.buttons>.button{height:16.666%}.ui.seven.vertical.buttons>.button{height:14.285%}.ui.eight.vertical.buttons>.button{height:12.5%}.ui.nine.vertical.buttons>.button{height:11.11%}.ui.ten.vertical.buttons>.button{height:10%}.ui.eleven.vertical.buttons>.button{height:9.09%}.ui.twelve.vertical.buttons>.button{height:8.3333%}.ui.black.button,.ui.black.buttons .button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.black.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.black.button:hover,.ui.black.buttons .button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.black.button:focus,.ui.black.buttons .button:focus{background-color:#2f3032;color:#fff;text-shadow:none}.ui.black.button:active,.ui.black.buttons .button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.black.active.button,.ui.black.button .active.button:active,.ui.black.buttons .active.button,.ui.black.buttons .active.button:active{background-color:#0f0f10;color:#fff;text-shadow:none}.ui.basic.black.button,.ui.basic.black.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #1b1c1d!important;box-shadow:inset 0 0 0 1px #1b1c1d!important;color:#1b1c1d!important}.ui.basic.black.button:hover,.ui.basic.black.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #27292a!important;box-shadow:inset 0 0 0 1px #27292a!important;color:#27292a!important}.ui.basic.black.button:focus,.ui.basic.black.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #2f3032!important;box-shadow:inset 0 0 0 1px #2f3032!important;color:#27292a!important}.ui.basic.black.active.button,.ui.basic.black.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #0f0f10!important;box-shadow:inset 0 0 0 1px #0f0f10!important;color:#343637!important}.ui.basic.black.button:active,.ui.basic.black.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #343637!important;box-shadow:inset 0 0 0 1px #343637!important;color:#343637!important}.ui.buttons:not(.vertical)>.basic.black.button:not(:first-child){margin-left:-1px}.ui.inverted.black.button,.ui.inverted.black.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #d4d4d5!important;box-shadow:inset 0 0 0 2px #d4d4d5!important;color:#fff}.ui.inverted.black.button.active,.ui.inverted.black.button:active,.ui.inverted.black.button:focus,.ui.inverted.black.button:hover,.ui.inverted.black.buttons .button.active,.ui.inverted.black.buttons .button:active,.ui.inverted.black.buttons .button:focus,.ui.inverted.black.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.black.active.button,.ui.inverted.black.button:active,.ui.inverted.black.button:focus,.ui.inverted.black.button:hover,.ui.inverted.black.buttons .active.button,.ui.inverted.black.buttons .button:active,.ui.inverted.black.buttons .button:focus,.ui.inverted.black.buttons .button:hover{background-color:#000}.ui.inverted.black.basic.button,.ui.inverted.black.basic.buttons .button,.ui.inverted.black.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.black.basic.button:hover,.ui.inverted.black.basic.buttons .button:hover,.ui.inverted.black.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #000!important;box-shadow:inset 0 0 0 2px #000!important;color:#fff!important}.ui.inverted.black.basic.button:focus,.ui.inverted.black.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #000!important;box-shadow:inset 0 0 0 2px #000!important;color:#545454!important}.ui.inverted.black.basic.active.button,.ui.inverted.black.basic.button:active,.ui.inverted.black.basic.buttons .active.button,.ui.inverted.black.basic.buttons .button:active,.ui.inverted.black.buttons .basic.active.button,.ui.inverted.black.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #000!important;box-shadow:inset 0 0 0 2px #000!important;color:#fff!important}.ui.grey.button,.ui.grey.buttons .button{background-color:#767676;color:#fff;text-shadow:none;background-image:none}.ui.grey.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.grey.button:hover,.ui.grey.buttons .button:hover{background-color:#838383;color:#fff;text-shadow:none}.ui.grey.button:focus,.ui.grey.buttons .button:focus{background-color:#8a8a8a;color:#fff;text-shadow:none}.ui.grey.button:active,.ui.grey.buttons .button:active{background-color:#909090;color:#fff;text-shadow:none}.ui.grey.active.button,.ui.grey.button .active.button:active,.ui.grey.buttons .active.button,.ui.grey.buttons .active.button:active{background-color:#696969;color:#fff;text-shadow:none}.ui.basic.grey.button,.ui.basic.grey.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #767676!important;box-shadow:inset 0 0 0 1px #767676!important;color:#767676!important}.ui.basic.grey.button:hover,.ui.basic.grey.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #838383!important;box-shadow:inset 0 0 0 1px #838383!important;color:#838383!important}.ui.basic.grey.button:focus,.ui.basic.grey.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #8a8a8a!important;box-shadow:inset 0 0 0 1px #8a8a8a!important;color:#838383!important}.ui.basic.grey.active.button,.ui.basic.grey.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #696969!important;box-shadow:inset 0 0 0 1px #696969!important;color:#909090!important}.ui.basic.grey.button:active,.ui.basic.grey.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #909090!important;box-shadow:inset 0 0 0 1px #909090!important;color:#909090!important}.ui.buttons:not(.vertical)>.basic.grey.button:not(:first-child){margin-left:-1px}.ui.inverted.grey.button,.ui.inverted.grey.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #d4d4d5!important;box-shadow:inset 0 0 0 2px #d4d4d5!important;color:#fff}.ui.inverted.grey.button.active,.ui.inverted.grey.button:active,.ui.inverted.grey.button:focus,.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button.active,.ui.inverted.grey.buttons .button:active,.ui.inverted.grey.buttons .button:focus,.ui.inverted.grey.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button:hover{background-color:#cfd0d2}.ui.inverted.grey.button:focus,.ui.inverted.grey.buttons .button:focus{background-color:#c7c9cb}.ui.inverted.grey.active.button,.ui.inverted.grey.buttons .active.button{background-color:#cfd0d2}.ui.inverted.grey.button:active,.ui.inverted.grey.buttons .button:active{background-color:#c2c4c5}.ui.inverted.grey.basic.button,.ui.inverted.grey.basic.buttons .button,.ui.inverted.grey.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.grey.basic.button:hover,.ui.inverted.grey.basic.buttons .button:hover,.ui.inverted.grey.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #cfd0d2!important;box-shadow:inset 0 0 0 2px #cfd0d2!important;color:#fff!important}.ui.inverted.grey.basic.button:focus,.ui.inverted.grey.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #c7c9cb!important;box-shadow:inset 0 0 0 2px #c7c9cb!important;color:#dcddde!important}.ui.inverted.grey.basic.active.button,.ui.inverted.grey.basic.buttons .active.button,.ui.inverted.grey.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #cfd0d2!important;box-shadow:inset 0 0 0 2px #cfd0d2!important;color:#fff!important}.ui.inverted.grey.basic.button:active,.ui.inverted.grey.basic.buttons .button:active,.ui.inverted.grey.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #c2c4c5!important;box-shadow:inset 0 0 0 2px #c2c4c5!important;color:#fff!important}.ui.brown.button,.ui.brown.buttons .button{background-color:#a5673f;color:#fff;text-shadow:none;background-image:none}.ui.brown.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.brown.button:hover,.ui.brown.buttons .button:hover{background-color:#975b33;color:#fff;text-shadow:none}.ui.brown.button:focus,.ui.brown.buttons .button:focus{background-color:#90532b;color:#fff;text-shadow:none}.ui.brown.button:active,.ui.brown.buttons .button:active{background-color:#805031;color:#fff;text-shadow:none}.ui.brown.active.button,.ui.brown.button .active.button:active,.ui.brown.buttons .active.button,.ui.brown.buttons .active.button:active{background-color:#995a31;color:#fff;text-shadow:none}.ui.basic.brown.button,.ui.basic.brown.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #a5673f!important;box-shadow:inset 0 0 0 1px #a5673f!important;color:#a5673f!important}.ui.basic.brown.button:hover,.ui.basic.brown.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #975b33!important;box-shadow:inset 0 0 0 1px #975b33!important;color:#975b33!important}.ui.basic.brown.button:focus,.ui.basic.brown.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #90532b!important;box-shadow:inset 0 0 0 1px #90532b!important;color:#975b33!important}.ui.basic.brown.active.button,.ui.basic.brown.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #995a31!important;box-shadow:inset 0 0 0 1px #995a31!important;color:#805031!important}.ui.basic.brown.button:active,.ui.basic.brown.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #805031!important;box-shadow:inset 0 0 0 1px #805031!important;color:#805031!important}.ui.buttons:not(.vertical)>.basic.brown.button:not(:first-child){margin-left:-1px}.ui.inverted.brown.button,.ui.inverted.brown.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #d67c1c!important;box-shadow:inset 0 0 0 2px #d67c1c!important;color:#d67c1c}.ui.inverted.brown.button.active,.ui.inverted.brown.button:active,.ui.inverted.brown.button:focus,.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button.active,.ui.inverted.brown.buttons .button:active,.ui.inverted.brown.buttons .button:focus,.ui.inverted.brown.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button:hover{background-color:#c86f11}.ui.inverted.brown.button:focus,.ui.inverted.brown.buttons .button:focus{background-color:#c16808}.ui.inverted.brown.active.button,.ui.inverted.brown.buttons .active.button{background-color:#cc6f0d}.ui.inverted.brown.button:active,.ui.inverted.brown.buttons .button:active{background-color:#a96216}.ui.inverted.brown.basic.button,.ui.inverted.brown.basic.buttons .button,.ui.inverted.brown.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.brown.basic.button:hover,.ui.inverted.brown.basic.buttons .button:hover,.ui.inverted.brown.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #c86f11!important;box-shadow:inset 0 0 0 2px #c86f11!important;color:#d67c1c!important}.ui.inverted.brown.basic.button:focus,.ui.inverted.brown.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #c16808!important;box-shadow:inset 0 0 0 2px #c16808!important;color:#d67c1c!important}.ui.inverted.brown.basic.active.button,.ui.inverted.brown.basic.buttons .active.button,.ui.inverted.brown.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #cc6f0d!important;box-shadow:inset 0 0 0 2px #cc6f0d!important;color:#d67c1c!important}.ui.inverted.brown.basic.button:active,.ui.inverted.brown.basic.buttons .button:active,.ui.inverted.brown.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #a96216!important;box-shadow:inset 0 0 0 2px #a96216!important;color:#d67c1c!important}.ui.blue.button,.ui.blue.buttons .button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.blue.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.blue.button:hover,.ui.blue.buttons .button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.blue.button:focus,.ui.blue.buttons .button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.blue.button:active,.ui.blue.buttons .button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.blue.active.button,.ui.blue.button .active.button:active,.ui.blue.buttons .active.button,.ui.blue.buttons .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.blue.button,.ui.basic.blue.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #2185d0!important;box-shadow:inset 0 0 0 1px #2185d0!important;color:#2185d0!important}.ui.basic.blue.button:hover,.ui.basic.blue.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #1678c2!important;box-shadow:inset 0 0 0 1px #1678c2!important;color:#1678c2!important}.ui.basic.blue.button:focus,.ui.basic.blue.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #0d71bb!important;box-shadow:inset 0 0 0 1px #0d71bb!important;color:#1678c2!important}.ui.basic.blue.active.button,.ui.basic.blue.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #1279c6!important;box-shadow:inset 0 0 0 1px #1279c6!important;color:#1a69a4!important}.ui.basic.blue.button:active,.ui.basic.blue.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #1a69a4!important;box-shadow:inset 0 0 0 1px #1a69a4!important;color:#1a69a4!important}.ui.buttons:not(.vertical)>.basic.blue.button:not(:first-child){margin-left:-1px}.ui.inverted.blue.button,.ui.inverted.blue.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #54c8ff!important;box-shadow:inset 0 0 0 2px #54c8ff!important;color:#54c8ff}.ui.inverted.blue.button.active,.ui.inverted.blue.button:active,.ui.inverted.blue.button:focus,.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button.active,.ui.inverted.blue.buttons .button:active,.ui.inverted.blue.buttons .button:focus,.ui.inverted.blue.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button:hover{background-color:#3ac0ff}.ui.inverted.blue.button:focus,.ui.inverted.blue.buttons .button:focus{background-color:#2bbbff}.ui.inverted.blue.active.button,.ui.inverted.blue.buttons .active.button{background-color:#3ac0ff}.ui.inverted.blue.button:active,.ui.inverted.blue.buttons .button:active{background-color:#21b8ff}.ui.inverted.blue.basic.button,.ui.inverted.blue.basic.buttons .button,.ui.inverted.blue.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.blue.basic.button:hover,.ui.inverted.blue.basic.buttons .button:hover,.ui.inverted.blue.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #3ac0ff!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.blue.basic.button:focus,.ui.inverted.blue.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #2bbbff!important;box-shadow:inset 0 0 0 2px #2bbbff!important;color:#54c8ff!important}.ui.inverted.blue.basic.active.button,.ui.inverted.blue.basic.buttons .active.button,.ui.inverted.blue.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #3ac0ff!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.blue.basic.button:active,.ui.inverted.blue.basic.buttons .button:active,.ui.inverted.blue.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #21b8ff!important;box-shadow:inset 0 0 0 2px #21b8ff!important;color:#54c8ff!important}.ui.green.button,.ui.green.buttons .button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.green.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.green.button:hover,.ui.green.buttons .button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.green.button:focus,.ui.green.buttons .button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.green.button:active,.ui.green.buttons .button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.green.active.button,.ui.green.button .active.button:active,.ui.green.buttons .active.button,.ui.green.buttons .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.green.button,.ui.basic.green.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #21ba45!important;box-shadow:inset 0 0 0 1px #21ba45!important;color:#21ba45!important}.ui.basic.green.button:hover,.ui.basic.green.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #16ab39!important;box-shadow:inset 0 0 0 1px #16ab39!important;color:#16ab39!important}.ui.basic.green.button:focus,.ui.basic.green.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #0ea432!important;box-shadow:inset 0 0 0 1px #0ea432!important;color:#16ab39!important}.ui.basic.green.active.button,.ui.basic.green.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #13ae38!important;box-shadow:inset 0 0 0 1px #13ae38!important;color:#198f35!important}.ui.basic.green.button:active,.ui.basic.green.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #198f35!important;box-shadow:inset 0 0 0 1px #198f35!important;color:#198f35!important}.ui.buttons:not(.vertical)>.basic.green.button:not(:first-child){margin-left:-1px}.ui.inverted.green.button,.ui.inverted.green.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #2ecc40!important;box-shadow:inset 0 0 0 2px #2ecc40!important;color:#2ecc40}.ui.inverted.green.button.active,.ui.inverted.green.button:active,.ui.inverted.green.button:focus,.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button.active,.ui.inverted.green.buttons .button:active,.ui.inverted.green.buttons .button:focus,.ui.inverted.green.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button:hover{background-color:#22be34}.ui.inverted.green.button:focus,.ui.inverted.green.buttons .button:focus{background-color:#19b82b}.ui.inverted.green.active.button,.ui.inverted.green.buttons .active.button{background-color:#1fc231}.ui.inverted.green.button:active,.ui.inverted.green.buttons .button:active{background-color:#25a233}.ui.inverted.green.basic.button,.ui.inverted.green.basic.buttons .button,.ui.inverted.green.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.green.basic.button:hover,.ui.inverted.green.basic.buttons .button:hover,.ui.inverted.green.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #22be34!important;box-shadow:inset 0 0 0 2px #22be34!important;color:#2ecc40!important}.ui.inverted.green.basic.button:focus,.ui.inverted.green.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #19b82b!important;box-shadow:inset 0 0 0 2px #19b82b!important;color:#2ecc40!important}.ui.inverted.green.basic.active.button,.ui.inverted.green.basic.buttons .active.button,.ui.inverted.green.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #1fc231!important;box-shadow:inset 0 0 0 2px #1fc231!important;color:#2ecc40!important}.ui.inverted.green.basic.button:active,.ui.inverted.green.basic.buttons .button:active,.ui.inverted.green.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #25a233!important;box-shadow:inset 0 0 0 2px #25a233!important;color:#2ecc40!important}.ui.orange.button,.ui.orange.buttons .button{background-color:#f2711c;color:#fff;text-shadow:none;background-image:none}.ui.orange.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.orange.button:hover,.ui.orange.buttons .button:hover{background-color:#f26202;color:#fff;text-shadow:none}.ui.orange.button:focus,.ui.orange.buttons .button:focus{background-color:#e55b00;color:#fff;text-shadow:none}.ui.orange.button:active,.ui.orange.buttons .button:active{background-color:#cf590c;color:#fff;text-shadow:none}.ui.orange.active.button,.ui.orange.button .active.button:active,.ui.orange.buttons .active.button,.ui.orange.buttons .active.button:active{background-color:#f56100;color:#fff;text-shadow:none}.ui.basic.orange.button,.ui.basic.orange.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #f2711c!important;box-shadow:inset 0 0 0 1px #f2711c!important;color:#f2711c!important}.ui.basic.orange.button:hover,.ui.basic.orange.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #f26202!important;box-shadow:inset 0 0 0 1px #f26202!important;color:#f26202!important}.ui.basic.orange.button:focus,.ui.basic.orange.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #e55b00!important;box-shadow:inset 0 0 0 1px #e55b00!important;color:#f26202!important}.ui.basic.orange.active.button,.ui.basic.orange.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #f56100!important;box-shadow:inset 0 0 0 1px #f56100!important;color:#cf590c!important}.ui.basic.orange.button:active,.ui.basic.orange.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #cf590c!important;box-shadow:inset 0 0 0 1px #cf590c!important;color:#cf590c!important}.ui.buttons:not(.vertical)>.basic.orange.button:not(:first-child){margin-left:-1px}.ui.inverted.orange.button,.ui.inverted.orange.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #ff851b!important;box-shadow:inset 0 0 0 2px #ff851b!important;color:#ff851b}.ui.inverted.orange.button.active,.ui.inverted.orange.button:active,.ui.inverted.orange.button:focus,.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button.active,.ui.inverted.orange.buttons .button:active,.ui.inverted.orange.buttons .button:focus,.ui.inverted.orange.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button:hover{background-color:#ff7701}.ui.inverted.orange.button:focus,.ui.inverted.orange.buttons .button:focus{background-color:#f17000}.ui.inverted.orange.active.button,.ui.inverted.orange.buttons .active.button{background-color:#ff7701}.ui.inverted.orange.button:active,.ui.inverted.orange.buttons .button:active{background-color:#e76b00}.ui.inverted.orange.basic.button,.ui.inverted.orange.basic.buttons .button,.ui.inverted.orange.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.orange.basic.button:hover,.ui.inverted.orange.basic.buttons .button:hover,.ui.inverted.orange.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #ff7701!important;box-shadow:inset 0 0 0 2px #ff7701!important;color:#ff851b!important}.ui.inverted.orange.basic.button:focus,.ui.inverted.orange.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #f17000!important;box-shadow:inset 0 0 0 2px #f17000!important;color:#ff851b!important}.ui.inverted.orange.basic.active.button,.ui.inverted.orange.basic.buttons .active.button,.ui.inverted.orange.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #ff7701!important;box-shadow:inset 0 0 0 2px #ff7701!important;color:#ff851b!important}.ui.inverted.orange.basic.button:active,.ui.inverted.orange.basic.buttons .button:active,.ui.inverted.orange.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #e76b00!important;box-shadow:inset 0 0 0 2px #e76b00!important;color:#ff851b!important}.ui.pink.button,.ui.pink.buttons .button{background-color:#e03997;color:#fff;text-shadow:none;background-image:none}.ui.pink.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.pink.button:hover,.ui.pink.buttons .button:hover{background-color:#e61a8d;color:#fff;text-shadow:none}.ui.pink.button:focus,.ui.pink.buttons .button:focus{background-color:#e10f85;color:#fff;text-shadow:none}.ui.pink.button:active,.ui.pink.buttons .button:active{background-color:#c71f7e;color:#fff;text-shadow:none}.ui.pink.active.button,.ui.pink.button .active.button:active,.ui.pink.buttons .active.button,.ui.pink.buttons .active.button:active{background-color:#ea158d;color:#fff;text-shadow:none}.ui.basic.pink.button,.ui.basic.pink.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #e03997!important;box-shadow:inset 0 0 0 1px #e03997!important;color:#e03997!important}.ui.basic.pink.button:hover,.ui.basic.pink.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #e61a8d!important;box-shadow:inset 0 0 0 1px #e61a8d!important;color:#e61a8d!important}.ui.basic.pink.button:focus,.ui.basic.pink.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #e10f85!important;box-shadow:inset 0 0 0 1px #e10f85!important;color:#e61a8d!important}.ui.basic.pink.active.button,.ui.basic.pink.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #ea158d!important;box-shadow:inset 0 0 0 1px #ea158d!important;color:#c71f7e!important}.ui.basic.pink.button:active,.ui.basic.pink.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #c71f7e!important;box-shadow:inset 0 0 0 1px #c71f7e!important;color:#c71f7e!important}.ui.buttons:not(.vertical)>.basic.pink.button:not(:first-child){margin-left:-1px}.ui.inverted.pink.button,.ui.inverted.pink.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #ff8edf!important;box-shadow:inset 0 0 0 2px #ff8edf!important;color:#ff8edf}.ui.inverted.pink.button.active,.ui.inverted.pink.button:active,.ui.inverted.pink.button:focus,.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button.active,.ui.inverted.pink.buttons .button:active,.ui.inverted.pink.buttons .button:focus,.ui.inverted.pink.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button:hover{background-color:#ff74d8}.ui.inverted.pink.button:focus,.ui.inverted.pink.buttons .button:focus{background-color:#ff65d3}.ui.inverted.pink.active.button,.ui.inverted.pink.buttons .active.button{background-color:#ff74d8}.ui.inverted.pink.button:active,.ui.inverted.pink.buttons .button:active{background-color:#ff5bd1}.ui.inverted.pink.basic.button,.ui.inverted.pink.basic.buttons .button,.ui.inverted.pink.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.pink.basic.button:hover,.ui.inverted.pink.basic.buttons .button:hover,.ui.inverted.pink.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #ff74d8!important;box-shadow:inset 0 0 0 2px #ff74d8!important;color:#ff8edf!important}.ui.inverted.pink.basic.button:focus,.ui.inverted.pink.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #ff65d3!important;box-shadow:inset 0 0 0 2px #ff65d3!important;color:#ff8edf!important}.ui.inverted.pink.basic.active.button,.ui.inverted.pink.basic.buttons .active.button,.ui.inverted.pink.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #ff74d8!important;box-shadow:inset 0 0 0 2px #ff74d8!important;color:#ff8edf!important}.ui.inverted.pink.basic.button:active,.ui.inverted.pink.basic.buttons .button:active,.ui.inverted.pink.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #ff5bd1!important;box-shadow:inset 0 0 0 2px #ff5bd1!important;color:#ff8edf!important}.ui.violet.button,.ui.violet.buttons .button{background-color:#6435c9;color:#fff;text-shadow:none;background-image:none}.ui.violet.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.violet.button:hover,.ui.violet.buttons .button:hover{background-color:#5829bb;color:#fff;text-shadow:none}.ui.violet.button:focus,.ui.violet.buttons .button:focus{background-color:#4f20b5;color:#fff;text-shadow:none}.ui.violet.button:active,.ui.violet.buttons .button:active{background-color:#502aa1;color:#fff;text-shadow:none}.ui.violet.active.button,.ui.violet.button .active.button:active,.ui.violet.buttons .active.button,.ui.violet.buttons .active.button:active{background-color:#5626bf;color:#fff;text-shadow:none}.ui.basic.violet.button,.ui.basic.violet.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #6435c9!important;box-shadow:inset 0 0 0 1px #6435c9!important;color:#6435c9!important}.ui.basic.violet.button:hover,.ui.basic.violet.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #5829bb!important;box-shadow:inset 0 0 0 1px #5829bb!important;color:#5829bb!important}.ui.basic.violet.button:focus,.ui.basic.violet.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #4f20b5!important;box-shadow:inset 0 0 0 1px #4f20b5!important;color:#5829bb!important}.ui.basic.violet.active.button,.ui.basic.violet.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #5626bf!important;box-shadow:inset 0 0 0 1px #5626bf!important;color:#502aa1!important}.ui.basic.violet.button:active,.ui.basic.violet.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #502aa1!important;box-shadow:inset 0 0 0 1px #502aa1!important;color:#502aa1!important}.ui.buttons:not(.vertical)>.basic.violet.button:not(:first-child){margin-left:-1px}.ui.inverted.violet.button,.ui.inverted.violet.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #a291fb!important;box-shadow:inset 0 0 0 2px #a291fb!important;color:#a291fb}.ui.inverted.violet.button.active,.ui.inverted.violet.button:active,.ui.inverted.violet.button:focus,.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button.active,.ui.inverted.violet.buttons .button:active,.ui.inverted.violet.buttons .button:focus,.ui.inverted.violet.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button:hover{background-color:#8a73ff}.ui.inverted.violet.button:focus,.ui.inverted.violet.buttons .button:focus{background-color:#7d64ff}.ui.inverted.violet.active.button,.ui.inverted.violet.buttons .active.button{background-color:#8a73ff}.ui.inverted.violet.button:active,.ui.inverted.violet.buttons .button:active{background-color:#7860f9}.ui.inverted.violet.basic.button,.ui.inverted.violet.basic.buttons .button,.ui.inverted.violet.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.violet.basic.button:hover,.ui.inverted.violet.basic.buttons .button:hover,.ui.inverted.violet.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #8a73ff!important;box-shadow:inset 0 0 0 2px #8a73ff!important;color:#a291fb!important}.ui.inverted.violet.basic.button:focus,.ui.inverted.violet.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #7d64ff!important;box-shadow:inset 0 0 0 2px #7d64ff!important;color:#a291fb!important}.ui.inverted.violet.basic.active.button,.ui.inverted.violet.basic.buttons .active.button,.ui.inverted.violet.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #8a73ff!important;box-shadow:inset 0 0 0 2px #8a73ff!important;color:#a291fb!important}.ui.inverted.violet.basic.button:active,.ui.inverted.violet.basic.buttons .button:active,.ui.inverted.violet.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #7860f9!important;box-shadow:inset 0 0 0 2px #7860f9!important;color:#a291fb!important}.ui.purple.button,.ui.purple.buttons .button{background-color:#a333c8;color:#fff;text-shadow:none;background-image:none}.ui.purple.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.purple.button:hover,.ui.purple.buttons .button:hover{background-color:#9627ba;color:#fff;text-shadow:none}.ui.purple.button:focus,.ui.purple.buttons .button:focus{background-color:#8f1eb4;color:#fff;text-shadow:none}.ui.purple.button:active,.ui.purple.buttons .button:active{background-color:#82299f;color:#fff;text-shadow:none}.ui.purple.active.button,.ui.purple.button .active.button:active,.ui.purple.buttons .active.button,.ui.purple.buttons .active.button:active{background-color:#9724be;color:#fff;text-shadow:none}.ui.basic.purple.button,.ui.basic.purple.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #a333c8!important;box-shadow:inset 0 0 0 1px #a333c8!important;color:#a333c8!important}.ui.basic.purple.button:hover,.ui.basic.purple.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #9627ba!important;box-shadow:inset 0 0 0 1px #9627ba!important;color:#9627ba!important}.ui.basic.purple.button:focus,.ui.basic.purple.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #8f1eb4!important;box-shadow:inset 0 0 0 1px #8f1eb4!important;color:#9627ba!important}.ui.basic.purple.active.button,.ui.basic.purple.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #9724be!important;box-shadow:inset 0 0 0 1px #9724be!important;color:#82299f!important}.ui.basic.purple.button:active,.ui.basic.purple.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #82299f!important;box-shadow:inset 0 0 0 1px #82299f!important;color:#82299f!important}.ui.buttons:not(.vertical)>.basic.purple.button:not(:first-child){margin-left:-1px}.ui.inverted.purple.button,.ui.inverted.purple.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #dc73ff!important;box-shadow:inset 0 0 0 2px #dc73ff!important;color:#dc73ff}.ui.inverted.purple.button.active,.ui.inverted.purple.button:active,.ui.inverted.purple.button:focus,.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button.active,.ui.inverted.purple.buttons .button:active,.ui.inverted.purple.buttons .button:focus,.ui.inverted.purple.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button:hover{background-color:#d65aff}.ui.inverted.purple.button:focus,.ui.inverted.purple.buttons .button:focus{background-color:#d24aff}.ui.inverted.purple.active.button,.ui.inverted.purple.buttons .active.button{background-color:#d65aff}.ui.inverted.purple.button:active,.ui.inverted.purple.buttons .button:active{background-color:#cf40ff}.ui.inverted.purple.basic.button,.ui.inverted.purple.basic.buttons .button,.ui.inverted.purple.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.purple.basic.button:hover,.ui.inverted.purple.basic.buttons .button:hover,.ui.inverted.purple.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #d65aff!important;box-shadow:inset 0 0 0 2px #d65aff!important;color:#dc73ff!important}.ui.inverted.purple.basic.button:focus,.ui.inverted.purple.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #d24aff!important;box-shadow:inset 0 0 0 2px #d24aff!important;color:#dc73ff!important}.ui.inverted.purple.basic.active.button,.ui.inverted.purple.basic.buttons .active.button,.ui.inverted.purple.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #d65aff!important;box-shadow:inset 0 0 0 2px #d65aff!important;color:#dc73ff!important}.ui.inverted.purple.basic.button:active,.ui.inverted.purple.basic.buttons .button:active,.ui.inverted.purple.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #cf40ff!important;box-shadow:inset 0 0 0 2px #cf40ff!important;color:#dc73ff!important}.ui.red.button,.ui.red.buttons .button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.red.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.red.button:hover,.ui.red.buttons .button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.red.button:focus,.ui.red.buttons .button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.red.button:active,.ui.red.buttons .button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.red.active.button,.ui.red.button .active.button:active,.ui.red.buttons .active.button,.ui.red.buttons .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.red.button,.ui.basic.red.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #db2828!important;box-shadow:inset 0 0 0 1px #db2828!important;color:#db2828!important}.ui.basic.red.button:hover,.ui.basic.red.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #d01919!important;box-shadow:inset 0 0 0 1px #d01919!important;color:#d01919!important}.ui.basic.red.button:focus,.ui.basic.red.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #ca1010!important;box-shadow:inset 0 0 0 1px #ca1010!important;color:#d01919!important}.ui.basic.red.active.button,.ui.basic.red.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #d41515!important;box-shadow:inset 0 0 0 1px #d41515!important;color:#b21e1e!important}.ui.basic.red.button:active,.ui.basic.red.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #b21e1e!important;box-shadow:inset 0 0 0 1px #b21e1e!important;color:#b21e1e!important}.ui.buttons:not(.vertical)>.basic.red.button:not(:first-child){margin-left:-1px}.ui.inverted.red.button,.ui.inverted.red.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #ff695e!important;box-shadow:inset 0 0 0 2px #ff695e!important;color:#ff695e}.ui.inverted.red.button.active,.ui.inverted.red.button:active,.ui.inverted.red.button:focus,.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button.active,.ui.inverted.red.buttons .button:active,.ui.inverted.red.buttons .button:focus,.ui.inverted.red.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button:hover{background-color:#ff5144}.ui.inverted.red.button:focus,.ui.inverted.red.buttons .button:focus{background-color:#ff4335}.ui.inverted.red.active.button,.ui.inverted.red.buttons .active.button{background-color:#ff5144}.ui.inverted.red.button:active,.ui.inverted.red.buttons .button:active{background-color:#ff392b}.ui.inverted.red.basic.button,.ui.inverted.red.basic.buttons .button,.ui.inverted.red.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.red.basic.button:hover,.ui.inverted.red.basic.buttons .button:hover,.ui.inverted.red.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #ff5144!important;box-shadow:inset 0 0 0 2px #ff5144!important;color:#ff695e!important}.ui.inverted.red.basic.button:focus,.ui.inverted.red.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #ff4335!important;box-shadow:inset 0 0 0 2px #ff4335!important;color:#ff695e!important}.ui.inverted.red.basic.active.button,.ui.inverted.red.basic.buttons .active.button,.ui.inverted.red.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #ff5144!important;box-shadow:inset 0 0 0 2px #ff5144!important;color:#ff695e!important}.ui.inverted.red.basic.button:active,.ui.inverted.red.basic.buttons .button:active,.ui.inverted.red.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #ff392b!important;box-shadow:inset 0 0 0 2px #ff392b!important;color:#ff695e!important}.ui.teal.button,.ui.teal.buttons .button{background-color:#00b5ad;color:#fff;text-shadow:none;background-image:none}.ui.teal.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.teal.button:hover,.ui.teal.buttons .button:hover{background-color:#009c95;color:#fff;text-shadow:none}.ui.teal.button:focus,.ui.teal.buttons .button:focus{background-color:#008c86;color:#fff;text-shadow:none}.ui.teal.button:active,.ui.teal.buttons .button:active{background-color:#00827c;color:#fff;text-shadow:none}.ui.teal.active.button,.ui.teal.button .active.button:active,.ui.teal.buttons .active.button,.ui.teal.buttons .active.button:active{background-color:#009c95;color:#fff;text-shadow:none}.ui.basic.teal.button,.ui.basic.teal.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #00b5ad!important;box-shadow:inset 0 0 0 1px #00b5ad!important;color:#00b5ad!important}.ui.basic.teal.button:hover,.ui.basic.teal.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #009c95!important;box-shadow:inset 0 0 0 1px #009c95!important;color:#009c95!important}.ui.basic.teal.button:focus,.ui.basic.teal.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #008c86!important;box-shadow:inset 0 0 0 1px #008c86!important;color:#009c95!important}.ui.basic.teal.active.button,.ui.basic.teal.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #009c95!important;box-shadow:inset 0 0 0 1px #009c95!important;color:#00827c!important}.ui.basic.teal.button:active,.ui.basic.teal.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #00827c!important;box-shadow:inset 0 0 0 1px #00827c!important;color:#00827c!important}.ui.buttons:not(.vertical)>.basic.teal.button:not(:first-child){margin-left:-1px}.ui.inverted.teal.button,.ui.inverted.teal.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #6dffff!important;box-shadow:inset 0 0 0 2px #6dffff!important;color:#6dffff}.ui.inverted.teal.button.active,.ui.inverted.teal.button:active,.ui.inverted.teal.button:focus,.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button.active,.ui.inverted.teal.buttons .button:active,.ui.inverted.teal.buttons .button:focus,.ui.inverted.teal.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button:hover{background-color:#54ffff}.ui.inverted.teal.button:focus,.ui.inverted.teal.buttons .button:focus{background-color:#4ff}.ui.inverted.teal.active.button,.ui.inverted.teal.buttons .active.button{background-color:#54ffff}.ui.inverted.teal.button:active,.ui.inverted.teal.buttons .button:active{background-color:#3affff}.ui.inverted.teal.basic.button,.ui.inverted.teal.basic.buttons .button,.ui.inverted.teal.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.teal.basic.button:hover,.ui.inverted.teal.basic.buttons .button:hover,.ui.inverted.teal.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #54ffff!important;box-shadow:inset 0 0 0 2px #54ffff!important;color:#6dffff!important}.ui.inverted.teal.basic.button:focus,.ui.inverted.teal.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #4ff!important;box-shadow:inset 0 0 0 2px #4ff!important;color:#6dffff!important}.ui.inverted.teal.basic.active.button,.ui.inverted.teal.basic.buttons .active.button,.ui.inverted.teal.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #54ffff!important;box-shadow:inset 0 0 0 2px #54ffff!important;color:#6dffff!important}.ui.inverted.teal.basic.button:active,.ui.inverted.teal.basic.buttons .button:active,.ui.inverted.teal.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #3affff!important;box-shadow:inset 0 0 0 2px #3affff!important;color:#6dffff!important}.ui.olive.button,.ui.olive.buttons .button{background-color:#b5cc18;color:#fff;text-shadow:none;background-image:none}.ui.olive.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.olive.button:hover,.ui.olive.buttons .button:hover{background-color:#a7bd0d;color:#fff;text-shadow:none}.ui.olive.button:focus,.ui.olive.buttons .button:focus{background-color:#a0b605;color:#fff;text-shadow:none}.ui.olive.button:active,.ui.olive.buttons .button:active{background-color:#8d9e13;color:#fff;text-shadow:none}.ui.olive.active.button,.ui.olive.button .active.button:active,.ui.olive.buttons .active.button,.ui.olive.buttons .active.button:active{background-color:#aac109;color:#fff;text-shadow:none}.ui.basic.olive.button,.ui.basic.olive.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #b5cc18!important;box-shadow:inset 0 0 0 1px #b5cc18!important;color:#b5cc18!important}.ui.basic.olive.button:hover,.ui.basic.olive.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #a7bd0d!important;box-shadow:inset 0 0 0 1px #a7bd0d!important;color:#a7bd0d!important}.ui.basic.olive.button:focus,.ui.basic.olive.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #a0b605!important;box-shadow:inset 0 0 0 1px #a0b605!important;color:#a7bd0d!important}.ui.basic.olive.active.button,.ui.basic.olive.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #aac109!important;box-shadow:inset 0 0 0 1px #aac109!important;color:#8d9e13!important}.ui.basic.olive.button:active,.ui.basic.olive.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #8d9e13!important;box-shadow:inset 0 0 0 1px #8d9e13!important;color:#8d9e13!important}.ui.buttons:not(.vertical)>.basic.olive.button:not(:first-child){margin-left:-1px}.ui.inverted.olive.button,.ui.inverted.olive.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #d9e778!important;box-shadow:inset 0 0 0 2px #d9e778!important;color:#d9e778}.ui.inverted.olive.button.active,.ui.inverted.olive.button:active,.ui.inverted.olive.button:focus,.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button.active,.ui.inverted.olive.buttons .button:active,.ui.inverted.olive.buttons .button:focus,.ui.inverted.olive.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button:hover{background-color:#d8ea5c}.ui.inverted.olive.button:focus,.ui.inverted.olive.buttons .button:focus{background-color:#daef47}.ui.inverted.olive.active.button,.ui.inverted.olive.buttons .active.button{background-color:#daed59}.ui.inverted.olive.button:active,.ui.inverted.olive.buttons .button:active{background-color:#cddf4d}.ui.inverted.olive.basic.button,.ui.inverted.olive.basic.buttons .button,.ui.inverted.olive.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.olive.basic.button:hover,.ui.inverted.olive.basic.buttons .button:hover,.ui.inverted.olive.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #d8ea5c!important;box-shadow:inset 0 0 0 2px #d8ea5c!important;color:#d9e778!important}.ui.inverted.olive.basic.button:focus,.ui.inverted.olive.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #daef47!important;box-shadow:inset 0 0 0 2px #daef47!important;color:#d9e778!important}.ui.inverted.olive.basic.active.button,.ui.inverted.olive.basic.buttons .active.button,.ui.inverted.olive.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #daed59!important;box-shadow:inset 0 0 0 2px #daed59!important;color:#d9e778!important}.ui.inverted.olive.basic.button:active,.ui.inverted.olive.basic.buttons .button:active,.ui.inverted.olive.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #cddf4d!important;box-shadow:inset 0 0 0 2px #cddf4d!important;color:#d9e778!important}.ui.yellow.button,.ui.yellow.buttons .button{background-color:#fbbd08;color:#fff;text-shadow:none;background-image:none}.ui.yellow.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.yellow.button:hover,.ui.yellow.buttons .button:hover{background-color:#eaae00;color:#fff;text-shadow:none}.ui.yellow.button:focus,.ui.yellow.buttons .button:focus{background-color:#daa300;color:#fff;text-shadow:none}.ui.yellow.button:active,.ui.yellow.buttons .button:active{background-color:#cd9903;color:#fff;text-shadow:none}.ui.yellow.active.button,.ui.yellow.button .active.button:active,.ui.yellow.buttons .active.button,.ui.yellow.buttons .active.button:active{background-color:#eaae00;color:#fff;text-shadow:none}.ui.basic.yellow.button,.ui.basic.yellow.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #fbbd08!important;box-shadow:inset 0 0 0 1px #fbbd08!important;color:#fbbd08!important}.ui.basic.yellow.button:hover,.ui.basic.yellow.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #eaae00!important;box-shadow:inset 0 0 0 1px #eaae00!important;color:#eaae00!important}.ui.basic.yellow.button:focus,.ui.basic.yellow.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #daa300!important;box-shadow:inset 0 0 0 1px #daa300!important;color:#eaae00!important}.ui.basic.yellow.active.button,.ui.basic.yellow.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #eaae00!important;box-shadow:inset 0 0 0 1px #eaae00!important;color:#cd9903!important}.ui.basic.yellow.button:active,.ui.basic.yellow.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #cd9903!important;box-shadow:inset 0 0 0 1px #cd9903!important;color:#cd9903!important}.ui.buttons:not(.vertical)>.basic.yellow.button:not(:first-child){margin-left:-1px}.ui.inverted.yellow.button,.ui.inverted.yellow.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #ffe21f!important;box-shadow:inset 0 0 0 2px #ffe21f!important;color:#ffe21f}.ui.inverted.yellow.button.active,.ui.inverted.yellow.button:active,.ui.inverted.yellow.button:focus,.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button.active,.ui.inverted.yellow.buttons .button:active,.ui.inverted.yellow.buttons .button:focus,.ui.inverted.yellow.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button:hover{background-color:#ffdf05}.ui.inverted.yellow.button:focus,.ui.inverted.yellow.buttons .button:focus{background-color:#f5d500}.ui.inverted.yellow.active.button,.ui.inverted.yellow.buttons .active.button{background-color:#ffdf05}.ui.inverted.yellow.button:active,.ui.inverted.yellow.buttons .button:active{background-color:#ebcd00}.ui.inverted.yellow.basic.button,.ui.inverted.yellow.basic.buttons .button,.ui.inverted.yellow.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.yellow.basic.button:hover,.ui.inverted.yellow.basic.buttons .button:hover,.ui.inverted.yellow.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #ffdf05!important;box-shadow:inset 0 0 0 2px #ffdf05!important;color:#ffe21f!important}.ui.inverted.yellow.basic.button:focus,.ui.inverted.yellow.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #f5d500!important;box-shadow:inset 0 0 0 2px #f5d500!important;color:#ffe21f!important}.ui.inverted.yellow.basic.active.button,.ui.inverted.yellow.basic.buttons .active.button,.ui.inverted.yellow.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #ffdf05!important;box-shadow:inset 0 0 0 2px #ffdf05!important;color:#ffe21f!important}.ui.inverted.yellow.basic.button:active,.ui.inverted.yellow.basic.buttons .button:active,.ui.inverted.yellow.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #ebcd00!important;box-shadow:inset 0 0 0 2px #ebcd00!important;color:#ffe21f!important}.ui.primary.button,.ui.primary.buttons .button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.primary.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.primary.button:hover,.ui.primary.buttons .button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.primary.button:focus,.ui.primary.buttons .button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.primary.button:active,.ui.primary.buttons .button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.primary.active.button,.ui.primary.button .active.button:active,.ui.primary.buttons .active.button,.ui.primary.buttons .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.primary.button,.ui.basic.primary.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #2185d0!important;box-shadow:inset 0 0 0 1px #2185d0!important;color:#2185d0!important}.ui.basic.primary.button:hover,.ui.basic.primary.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #1678c2!important;box-shadow:inset 0 0 0 1px #1678c2!important;color:#1678c2!important}.ui.basic.primary.button:focus,.ui.basic.primary.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #0d71bb!important;box-shadow:inset 0 0 0 1px #0d71bb!important;color:#1678c2!important}.ui.basic.primary.active.button,.ui.basic.primary.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #1279c6!important;box-shadow:inset 0 0 0 1px #1279c6!important;color:#1a69a4!important}.ui.basic.primary.button:active,.ui.basic.primary.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #1a69a4!important;box-shadow:inset 0 0 0 1px #1a69a4!important;color:#1a69a4!important}.ui.inverted.primary.button,.ui.inverted.primary.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #54c8ff!important;box-shadow:inset 0 0 0 2px #54c8ff!important;color:#54c8ff}.ui.inverted.primary.button.active,.ui.inverted.primary.button:active,.ui.inverted.primary.button:focus,.ui.inverted.primary.button:hover,.ui.inverted.primary.buttons .button.active,.ui.inverted.primary.buttons .button:active,.ui.inverted.primary.buttons .button:focus,.ui.inverted.primary.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.primary.button:hover,.ui.inverted.primary.buttons .button:hover{background-color:#3ac0ff}.ui.inverted.primary.button:focus,.ui.inverted.primary.buttons .button:focus{background-color:#2bbbff}.ui.inverted.primary.active.button,.ui.inverted.primary.buttons .active.button{background-color:#3ac0ff}.ui.inverted.primary.button:active,.ui.inverted.primary.buttons .button:active{background-color:#21b8ff}.ui.inverted.primary.basic.button,.ui.inverted.primary.basic.buttons .button,.ui.inverted.primary.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.primary.basic.button:hover,.ui.inverted.primary.basic.buttons .button:hover,.ui.inverted.primary.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #3ac0ff!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.primary.basic.button:focus,.ui.inverted.primary.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #2bbbff!important;box-shadow:inset 0 0 0 2px #2bbbff!important;color:#54c8ff!important}.ui.inverted.primary.basic.active.button,.ui.inverted.primary.basic.buttons .active.button,.ui.inverted.primary.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #3ac0ff!important;box-shadow:inset 0 0 0 2px #3ac0ff!important;color:#54c8ff!important}.ui.inverted.primary.basic.button:active,.ui.inverted.primary.basic.buttons .button:active,.ui.inverted.primary.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #21b8ff!important;box-shadow:inset 0 0 0 2px #21b8ff!important;color:#54c8ff!important}.ui.secondary.button,.ui.secondary.buttons .button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.secondary.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.secondary.button:hover,.ui.secondary.buttons .button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.secondary.button:focus,.ui.secondary.buttons .button:focus{background-color:#2e3032;color:#fff;text-shadow:none}.ui.secondary.button:active,.ui.secondary.buttons .button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.secondary.active.button,.ui.secondary.button .active.button:active,.ui.secondary.buttons .active.button,.ui.secondary.buttons .active.button:active{background-color:#27292a;color:#fff;text-shadow:none}.ui.basic.secondary.button,.ui.basic.secondary.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #1b1c1d!important;box-shadow:inset 0 0 0 1px #1b1c1d!important;color:#1b1c1d!important}.ui.basic.secondary.button:hover,.ui.basic.secondary.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #27292a!important;box-shadow:inset 0 0 0 1px #27292a!important;color:#27292a!important}.ui.basic.secondary.button:focus,.ui.basic.secondary.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #2e3032!important;box-shadow:inset 0 0 0 1px #2e3032!important;color:#27292a!important}.ui.basic.secondary.active.button,.ui.basic.secondary.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #27292a!important;box-shadow:inset 0 0 0 1px #27292a!important;color:#343637!important}.ui.basic.secondary.button:active,.ui.basic.secondary.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #343637!important;box-shadow:inset 0 0 0 1px #343637!important;color:#343637!important}.ui.inverted.secondary.button,.ui.inverted.secondary.buttons .button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px #545454!important;box-shadow:inset 0 0 0 2px #545454!important;color:#545454}.ui.inverted.secondary.button.active,.ui.inverted.secondary.button:active,.ui.inverted.secondary.button:focus,.ui.inverted.secondary.button:hover,.ui.inverted.secondary.buttons .button.active,.ui.inverted.secondary.buttons .button:active,.ui.inverted.secondary.buttons .button:focus,.ui.inverted.secondary.buttons .button:hover{-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff}.ui.inverted.secondary.button:hover,.ui.inverted.secondary.buttons .button:hover{background-color:#616161}.ui.inverted.secondary.button:focus,.ui.inverted.secondary.buttons .button:focus{background-color:#686868}.ui.inverted.secondary.active.button,.ui.inverted.secondary.buttons .active.button{background-color:#616161}.ui.inverted.secondary.button:active,.ui.inverted.secondary.buttons .button:active{background-color:#6e6e6e}.ui.inverted.secondary.basic.button,.ui.inverted.secondary.basic.buttons .button,.ui.inverted.secondary.buttons .basic.button{background-color:transparent;-webkit-box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;box-shadow:inset 0 0 0 2px hsla(0,0%,100%,.5)!important;color:#fff!important}.ui.inverted.secondary.basic.button:hover,.ui.inverted.secondary.basic.buttons .button:hover,.ui.inverted.secondary.buttons .basic.button:hover{-webkit-box-shadow:inset 0 0 0 2px #616161!important;box-shadow:inset 0 0 0 2px #616161!important;color:#545454!important}.ui.inverted.secondary.basic.button:focus,.ui.inverted.secondary.basic.buttons .button:focus{-webkit-box-shadow:inset 0 0 0 2px #686868!important;box-shadow:inset 0 0 0 2px #686868!important;color:#545454!important}.ui.inverted.secondary.basic.active.button,.ui.inverted.secondary.basic.buttons .active.button,.ui.inverted.secondary.buttons .basic.active.button{-webkit-box-shadow:inset 0 0 0 2px #616161!important;box-shadow:inset 0 0 0 2px #616161!important;color:#545454!important}.ui.inverted.secondary.basic.button:active,.ui.inverted.secondary.basic.buttons .button:active,.ui.inverted.secondary.buttons .basic.button:active{-webkit-box-shadow:inset 0 0 0 2px #6e6e6e!important;box-shadow:inset 0 0 0 2px #6e6e6e!important;color:#545454!important}.ui.positive.button,.ui.positive.buttons .button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.positive.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.positive.button:hover,.ui.positive.buttons .button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.positive.button:focus,.ui.positive.buttons .button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.positive.button:active,.ui.positive.buttons .button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.positive.active.button,.ui.positive.button .active.button:active,.ui.positive.buttons .active.button,.ui.positive.buttons .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.positive.button,.ui.basic.positive.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #21ba45!important;box-shadow:inset 0 0 0 1px #21ba45!important;color:#21ba45!important}.ui.basic.positive.button:hover,.ui.basic.positive.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #16ab39!important;box-shadow:inset 0 0 0 1px #16ab39!important;color:#16ab39!important}.ui.basic.positive.button:focus,.ui.basic.positive.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #0ea432!important;box-shadow:inset 0 0 0 1px #0ea432!important;color:#16ab39!important}.ui.basic.positive.active.button,.ui.basic.positive.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #13ae38!important;box-shadow:inset 0 0 0 1px #13ae38!important;color:#198f35!important}.ui.basic.positive.button:active,.ui.basic.positive.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #198f35!important;box-shadow:inset 0 0 0 1px #198f35!important;color:#198f35!important}.ui.negative.button,.ui.negative.buttons .button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.negative.button{-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 0 rgba(34,36,38,.15)}.ui.negative.button:hover,.ui.negative.buttons .button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.negative.button:focus,.ui.negative.buttons .button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.negative.button:active,.ui.negative.buttons .button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.negative.active.button,.ui.negative.button .active.button:active,.ui.negative.buttons .active.button,.ui.negative.buttons .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.negative.button,.ui.basic.negative.buttons .button{-webkit-box-shadow:inset 0 0 0 1px #db2828!important;box-shadow:inset 0 0 0 1px #db2828!important;color:#db2828!important}.ui.basic.negative.button:hover,.ui.basic.negative.buttons .button:hover{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #d01919!important;box-shadow:inset 0 0 0 1px #d01919!important;color:#d01919!important}.ui.basic.negative.button:focus,.ui.basic.negative.buttons .button:focus{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #ca1010!important;box-shadow:inset 0 0 0 1px #ca1010!important;color:#d01919!important}.ui.basic.negative.active.button,.ui.basic.negative.buttons .active.button{background:transparent!important;-webkit-box-shadow:inset 0 0 0 1px #d41515!important;box-shadow:inset 0 0 0 1px #d41515!important;color:#b21e1e!important}.ui.basic.negative.button:active,.ui.basic.negative.buttons .button:active{-webkit-box-shadow:inset 0 0 0 1px #b21e1e!important;box-shadow:inset 0 0 0 1px #b21e1e!important;color:#b21e1e!important}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;font-size:0;vertical-align:baseline;margin:0 .25em 0 0}.ui.buttons:not(.basic):not(.inverted){-webkit-box-shadow:none;box-shadow:none}.ui.buttons:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.buttons .button{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;border-radius:0;margin:0}.ui.buttons:not(.basic):not(.inverted)>.button,.ui.buttons>.ui.button:not(.basic):not(.inverted){-webkit-box-shadow:inset 0 0 0 1px transparent,inset 0 0 0 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px transparent,inset 0 0 0 0 rgba(34,36,38,.15)}.ui.buttons .button:first-child{border-left:none;margin-left:0;border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.buttons .button:last-child{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.vertical.buttons .button{display:block;float:none;width:100%;margin:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.ui.vertical.buttons .button:first-child{border-top-left-radius:.28571429rem;border-top-right-radius:.28571429rem}.ui.vertical.buttons .button:last-child{margin-bottom:0;border-bottom-left-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons .button:only-child{border-radius:.28571429rem} /*! * # Semantic UI 2.4.0 - Container * http://github.com/semantic-org/semantic-ui/ @@ -72,7 +72,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */@font-face{font-family:Icons;src:url(themes/default/assets/fonts/icons.eot);src:url(themes/default/assets/fonts/icons.eot?#iefix) format("embedded-opentype"),url(themes/default/assets/fonts/icons.woff2) format("woff2"),url(themes/default/assets/fonts/icons.woff) format("woff"),url(themes/default/assets/fonts/icons.ttf) format("truetype"),url(themes/default/assets/fonts/icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon{display:inline-block;opacity:1;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:400;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.icon:before{background:none!important}i.icon.loading{height:1em;line-height:1;-webkit-animation:icon-loading 2s linear infinite;animation:icon-loading 2s linear infinite}@-webkit-keyframes icon-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes icon-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}i.emphasized.icon,i.icon.active,i.icon.hover{opacity:1!important}i.disabled.icon{opacity:.45!important}i.fitted.icon{width:auto;margin:0!important}i.link.icon,i.link.icons{cursor:pointer;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}i.link.icon:hover,i.link.icons:hover{opacity:1!important}i.circular.icon{border-radius:500em!important;line-height:1!important;padding:.5em 0!important;-webkit-box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 .1em rgba(0,0,0,.1);width:2em!important;height:2em!important}i.circular.inverted.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.flipped.icon,i.horizontally.flipped.icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}i.vertically.flipped.icon{-webkit-transform:scaleY(-1);transform:scaleY(-1)}i.clockwise.rotated.icon,i.right.rotated.icon,i.rotated.icon{-webkit-transform:rotate(90deg);transform:rotate(90deg)}i.counterclockwise.rotated.icon,i.left.rotated.icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}i.bordered.icon{line-height:1;vertical-align:baseline;width:2em;height:2em;padding:.5em 0!important;-webkit-box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 .1em rgba(0,0,0,.1)}i.bordered.inverted.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.inverted.bordered.icon,i.inverted.circular.icon{background-color:#1b1c1d!important;color:#fff!important}i.inverted.icon{color:#fff}i.red.icon{color:#db2828!important}i.inverted.red.icon{color:#ff695e!important}i.inverted.bordered.red.icon,i.inverted.circular.red.icon{background-color:#db2828!important;color:#fff!important}i.orange.icon{color:#f2711c!important}i.inverted.orange.icon{color:#ff851b!important}i.inverted.bordered.orange.icon,i.inverted.circular.orange.icon{background-color:#f2711c!important;color:#fff!important}i.yellow.icon{color:#fbbd08!important}i.inverted.yellow.icon{color:#ffe21f!important}i.inverted.bordered.yellow.icon,i.inverted.circular.yellow.icon{background-color:#fbbd08!important;color:#fff!important}i.olive.icon{color:#b5cc18!important}i.inverted.olive.icon{color:#d9e778!important}i.inverted.bordered.olive.icon,i.inverted.circular.olive.icon{background-color:#b5cc18!important;color:#fff!important}i.green.icon{color:#21ba45!important}i.inverted.green.icon{color:#2ecc40!important}i.inverted.bordered.green.icon,i.inverted.circular.green.icon{background-color:#21ba45!important;color:#fff!important}i.teal.icon{color:#00b5ad!important}i.inverted.teal.icon{color:#6dffff!important}i.inverted.bordered.teal.icon,i.inverted.circular.teal.icon{background-color:#00b5ad!important;color:#fff!important}i.blue.icon{color:#2185d0!important}i.inverted.blue.icon{color:#54c8ff!important}i.inverted.bordered.blue.icon,i.inverted.circular.blue.icon{background-color:#2185d0!important;color:#fff!important}i.violet.icon{color:#6435c9!important}i.inverted.violet.icon{color:#a291fb!important}i.inverted.bordered.violet.icon,i.inverted.circular.violet.icon{background-color:#6435c9!important;color:#fff!important}i.purple.icon{color:#a333c8!important}i.inverted.purple.icon{color:#dc73ff!important}i.inverted.bordered.purple.icon,i.inverted.circular.purple.icon{background-color:#a333c8!important;color:#fff!important}i.pink.icon{color:#e03997!important}i.inverted.pink.icon{color:#ff8edf!important}i.inverted.bordered.pink.icon,i.inverted.circular.pink.icon{background-color:#e03997!important;color:#fff!important}i.brown.icon{color:#a5673f!important}i.inverted.brown.icon{color:#d67c1c!important}i.inverted.bordered.brown.icon,i.inverted.circular.brown.icon{background-color:#a5673f!important;color:#fff!important}i.grey.icon{color:#767676!important}i.inverted.grey.icon{color:#dcddde!important}i.inverted.bordered.grey.icon,i.inverted.circular.grey.icon{background-color:#767676!important;color:#fff!important}i.black.icon{color:#1b1c1d!important}i.inverted.black.icon{color:#545454!important}i.inverted.bordered.black.icon,i.inverted.circular.black.icon{background-color:#1b1c1d!important;color:#fff!important}i.mini.icon,i.mini.icons{line-height:1;font-size:.4em}i.tiny.icon,i.tiny.icons{line-height:1;font-size:.5em}i.small.icon,i.small.icons{line-height:1;font-size:.75em}i.icon,i.icons{font-size:1em}i.large.icon,i.large.icons{line-height:1;vertical-align:middle;font-size:1.5em}i.big.icon,i.big.icons{line-height:1;vertical-align:middle;font-size:2em}i.huge.icon,i.huge.icons{line-height:1;vertical-align:middle;font-size:4em}i.massive.icon,i.massive.icons{line-height:1;vertical-align:middle;font-size:8em}i.icons{display:inline-block;position:relative;line-height:1}i.icons .icon{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);margin:0}i.icons .icon:first-child{position:static;width:auto;height:auto;vertical-align:top;-webkit-transform:none;transform:none;margin-right:.25rem}i.icons .corner.icon{top:auto;left:auto;right:0;bottom:0;-webkit-transform:none;transform:none;font-size:.45em;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}i.icons .top.right.corner.icon{top:0;left:auto;right:0;bottom:auto}i.icons .top.left.corner.icon{top:0;left:0;right:auto;bottom:auto}i.icons .bottom.left.corner.icon{top:auto;left:0;right:auto;bottom:0}i.icons .bottom.right.corner.icon{top:auto;left:auto;right:0;bottom:0}i.icons .inverted.corner.icon{text-shadow:-1px -1px 0 #1b1c1d,1px -1px 0 #1b1c1d,-1px 1px 0 #1b1c1d,1px 1px 0 #1b1c1d}i.icon.linkedin.in:before{content:"\f0e1"}i.icon.zoom.in:before{content:"\f00e"}i.icon.zoom.out:before{content:"\f010"}i.icon.sign.in:before{content:"\f2f6"}i.icon.in.cart:before{content:"\f218"}i.icon.log.out:before,i.icon.sign.out:before{content:"\f2f5"}i.icon.\35 00px:before{content:"\f26e"}i.icon.accessible.icon:before{content:"\f368"}i.icon.accusoft:before{content:"\f369"}i.icon.address.book:before{content:"\f2b9"}i.icon.address.card:before{content:"\f2bb"}i.icon.adjust:before{content:"\f042"}i.icon.adn:before{content:"\f170"}i.icon.adversal:before{content:"\f36a"}i.icon.affiliatetheme:before{content:"\f36b"}i.icon.algolia:before{content:"\f36c"}i.icon.align.center:before{content:"\f037"}i.icon.align.justify:before{content:"\f039"}i.icon.align.left:before{content:"\f036"}i.icon.align.right:before{content:"\f038"}i.icon.amazon:before{content:"\f270"}i.icon.amazon.pay:before{content:"\f42c"}i.icon.ambulance:before{content:"\f0f9"}i.icon.american.sign.language.interpreting:before{content:"\f2a3"}i.icon.amilia:before{content:"\f36d"}i.icon.anchor:before{content:"\f13d"}i.icon.android:before{content:"\f17b"}i.icon.angellist:before{content:"\f209"}i.icon.angle.double.down:before{content:"\f103"}i.icon.angle.double.left:before{content:"\f100"}i.icon.angle.double.right:before{content:"\f101"}i.icon.angle.double.up:before{content:"\f102"}i.icon.angle.down:before{content:"\f107"}i.icon.angle.left:before{content:"\f104"}i.icon.angle.right:before{content:"\f105"}i.icon.angle.up:before{content:"\f106"}i.icon.angrycreative:before{content:"\f36e"}i.icon.angular:before{content:"\f420"}i.icon.app.store:before{content:"\f36f"}i.icon.app.store.ios:before{content:"\f370"}i.icon.apper:before{content:"\f371"}i.icon.apple:before{content:"\f179"}i.icon.apple.pay:before{content:"\f415"}i.icon.archive:before{content:"\f187"}i.icon.arrow.alternate.circle.down:before{content:"\f358"}i.icon.arrow.alternate.circle.left:before{content:"\f359"}i.icon.arrow.alternate.circle.right:before{content:"\f35a"}i.icon.arrow.alternate.circle.up:before{content:"\f35b"}i.icon.arrow.circle.down:before{content:"\f0ab"}i.icon.arrow.circle.left:before{content:"\f0a8"}i.icon.arrow.circle.right:before{content:"\f0a9"}i.icon.arrow.circle.up:before{content:"\f0aa"}i.icon.arrow.down:before{content:"\f063"}i.icon.arrow.left:before{content:"\f060"}i.icon.arrow.right:before{content:"\f061"}i.icon.arrow.up:before{content:"\f062"}i.icon.arrows.alternate:before{content:"\f0b2"}i.icon.arrows.alternate.horizontal:before{content:"\f337"}i.icon.arrows.alternate.vertical:before{content:"\f338"}i.icon.assistive.listening.systems:before{content:"\f2a2"}i.icon.asterisk:before{content:"\f069"}i.icon.asymmetrik:before{content:"\f372"}i.icon.at:before{content:"\f1fa"}i.icon.audible:before{content:"\f373"}i.icon.audio.description:before{content:"\f29e"}i.icon.autoprefixer:before{content:"\f41c"}i.icon.avianex:before{content:"\f374"}i.icon.aviato:before{content:"\f421"}i.icon.aws:before{content:"\f375"}i.icon.backward:before{content:"\f04a"}i.icon.balance.scale:before{content:"\f24e"}i.icon.ban:before{content:"\f05e"}i.icon.band.aid:before{content:"\f462"}i.icon.bandcamp:before{content:"\f2d5"}i.icon.barcode:before{content:"\f02a"}i.icon.bars:before{content:"\f0c9"}i.icon.baseball.ball:before{content:"\f433"}i.icon.basketball.ball:before{content:"\f434"}i.icon.bath:before{content:"\f2cd"}i.icon.battery.empty:before{content:"\f244"}i.icon.battery.full:before{content:"\f240"}i.icon.battery.half:before{content:"\f242"}i.icon.battery.quarter:before{content:"\f243"}i.icon.battery.three.quarters:before{content:"\f241"}i.icon.bed:before{content:"\f236"}i.icon.beer:before{content:"\f0fc"}i.icon.behance:before{content:"\f1b4"}i.icon.behance.square:before{content:"\f1b5"}i.icon.bell:before{content:"\f0f3"}i.icon.bell.slash:before{content:"\f1f6"}i.icon.bicycle:before{content:"\f206"}i.icon.bimobject:before{content:"\f378"}i.icon.binoculars:before{content:"\f1e5"}i.icon.birthday.cake:before{content:"\f1fd"}i.icon.bitbucket:before{content:"\f171"}i.icon.bitcoin:before{content:"\f379"}i.icon.bity:before{content:"\f37a"}i.icon.black.tie:before{content:"\f27e"}i.icon.blackberry:before{content:"\f37b"}i.icon.blind:before{content:"\f29d"}i.icon.blogger:before{content:"\f37c"}i.icon.blogger.b:before{content:"\f37d"}i.icon.bluetooth:before{content:"\f293"}i.icon.bluetooth.b:before{content:"\f294"}i.icon.bold:before{content:"\f032"}i.icon.bolt:before{content:"\f0e7"}i.icon.bomb:before{content:"\f1e2"}i.icon.book:before{content:"\f02d"}i.icon.bookmark:before{content:"\f02e"}i.icon.bowling.ball:before{content:"\f436"}i.icon.box:before{content:"\f466"}i.icon.boxes:before{content:"\f468"}i.icon.braille:before{content:"\f2a1"}i.icon.briefcase:before{content:"\f0b1"}i.icon.btc:before{content:"\f15a"}i.icon.bug:before{content:"\f188"}i.icon.building:before{content:"\f1ad"}i.icon.bullhorn:before{content:"\f0a1"}i.icon.bullseye:before{content:"\f140"}i.icon.buromobelexperte:before{content:"\f37f"}i.icon.bus:before{content:"\f207"}i.icon.buysellads:before{content:"\f20d"}i.icon.calculator:before{content:"\f1ec"}i.icon.calendar:before{content:"\f133"}i.icon.calendar.alternate:before{content:"\f073"}i.icon.calendar.check:before{content:"\f274"}i.icon.calendar.minus:before{content:"\f272"}i.icon.calendar.plus:before{content:"\f271"}i.icon.calendar.times:before{content:"\f273"}i.icon.camera:before{content:"\f030"}i.icon.camera.retro:before{content:"\f083"}i.icon.car:before{content:"\f1b9"}i.icon.caret.down:before{content:"\f0d7"}i.icon.caret.left:before{content:"\f0d9"}i.icon.caret.right:before{content:"\f0da"}i.icon.caret.square.down:before{content:"\f150"}i.icon.caret.square.left:before{content:"\f191"}i.icon.caret.square.right:before{content:"\f152"}i.icon.caret.square.up:before{content:"\f151"}i.icon.caret.up:before{content:"\f0d8"}i.icon.cart.arrow.down:before{content:"\f218"}i.icon.cart.plus:before{content:"\f217"}i.icon.cc.amazon.pay:before{content:"\f42d"}i.icon.cc.amex:before{content:"\f1f3"}i.icon.cc.apple.pay:before{content:"\f416"}i.icon.cc.diners.club:before{content:"\f24c"}i.icon.cc.discover:before{content:"\f1f2"}i.icon.cc.jcb:before{content:"\f24b"}i.icon.cc.mastercard:before{content:"\f1f1"}i.icon.cc.paypal:before{content:"\f1f4"}i.icon.cc.stripe:before{content:"\f1f5"}i.icon.cc.visa:before{content:"\f1f0"}i.icon.centercode:before{content:"\f380"}i.icon.certificate:before{content:"\f0a3"}i.icon.chart.area:before{content:"\f1fe"}i.icon.chart.bar:before{content:"\f080"}i.icon.chart.line:before{content:"\f201"}i.icon.chart.pie:before{content:"\f200"}i.icon.check:before{content:"\f00c"}i.icon.check.circle:before{content:"\f058"}i.icon.check.square:before{content:"\f14a"}i.icon.chess:before{content:"\f439"}i.icon.chess.bishop:before{content:"\f43a"}i.icon.chess.board:before{content:"\f43c"}i.icon.chess.king:before{content:"\f43f"}i.icon.chess.knight:before{content:"\f441"}i.icon.chess.pawn:before{content:"\f443"}i.icon.chess.queen:before{content:"\f445"}i.icon.chess.rook:before{content:"\f447"}i.icon.chevron.circle.down:before{content:"\f13a"}i.icon.chevron.circle.left:before{content:"\f137"}i.icon.chevron.circle.right:before{content:"\f138"}i.icon.chevron.circle.up:before{content:"\f139"}i.icon.chevron.down:before{content:"\f078"}i.icon.chevron.left:before{content:"\f053"}i.icon.chevron.right:before{content:"\f054"}i.icon.chevron.up:before{content:"\f077"}i.icon.child:before{content:"\f1ae"}i.icon.chrome:before{content:"\f268"}i.icon.circle:before{content:"\f111"}i.icon.circle.notch:before{content:"\f1ce"}i.icon.clipboard:before{content:"\f328"}i.icon.clipboard.check:before{content:"\f46c"}i.icon.clipboard.list:before{content:"\f46d"}i.icon.clock:before{content:"\f017"}i.icon.clone:before{content:"\f24d"}i.icon.closed.captioning:before{content:"\f20a"}i.icon.cloud:before{content:"\f0c2"}i.icon.cloudscale:before{content:"\f383"}i.icon.cloudsmith:before{content:"\f384"}i.icon.cloudversify:before{content:"\f385"}i.icon.code:before{content:"\f121"}i.icon.code.branch:before{content:"\f126"}i.icon.codepen:before{content:"\f1cb"}i.icon.codiepie:before{content:"\f284"}i.icon.coffee:before{content:"\f0f4"}i.icon.cog:before{content:"\f013"}i.icon.cogs:before{content:"\f085"}i.icon.columns:before{content:"\f0db"}i.icon.comment:before{content:"\f075"}i.icon.comment.alternate:before{content:"\f27a"}i.icon.comments:before{content:"\f086"}i.icon.compass:before{content:"\f14e"}i.icon.compress:before{content:"\f066"}i.icon.connectdevelop:before{content:"\f20e"}i.icon.contao:before{content:"\f26d"}i.icon.copy:before{content:"\f0c5"}i.icon.copyright:before{content:"\f1f9"}i.icon.cpanel:before{content:"\f388"}i.icon.creative.commons:before{content:"\f25e"}i.icon.credit.card:before{content:"\f09d"}i.icon.crop:before{content:"\f125"}i.icon.crosshairs:before{content:"\f05b"}i.icon.css3:before{content:"\f13c"}i.icon.css3.alternate:before{content:"\f38b"}i.icon.cube:before{content:"\f1b2"}i.icon.cubes:before{content:"\f1b3"}i.icon.cut:before{content:"\f0c4"}i.icon.cuttlefish:before{content:"\f38c"}i.icon.d.and.d:before{content:"\f38d"}i.icon.dashcube:before{content:"\f210"}i.icon.database:before{content:"\f1c0"}i.icon.deaf:before{content:"\f2a4"}i.icon.delicious:before{content:"\f1a5"}i.icon.deploydog:before{content:"\f38e"}i.icon.deskpro:before{content:"\f38f"}i.icon.desktop:before{content:"\f108"}i.icon.deviantart:before{content:"\f1bd"}i.icon.digg:before{content:"\f1a6"}i.icon.digital.ocean:before{content:"\f391"}i.icon.discord:before{content:"\f392"}i.icon.discourse:before{content:"\f393"}i.icon.dna:before{content:"\f471"}i.icon.dochub:before{content:"\f394"}i.icon.docker:before{content:"\f395"}i.icon.dollar.sign:before{content:"\f155"}i.icon.dolly:before{content:"\f472"}i.icon.dolly.flatbed:before{content:"\f474"}i.icon.dot.circle:before{content:"\f192"}i.icon.download:before{content:"\f019"}i.icon.draft2digital:before{content:"\f396"}i.icon.dribbble:before{content:"\f17d"}i.icon.dribbble.square:before{content:"\f397"}i.icon.dropbox:before{content:"\f16b"}i.icon.drupal:before{content:"\f1a9"}i.icon.dyalog:before{content:"\f399"}i.icon.earlybirds:before{content:"\f39a"}i.icon.edge:before{content:"\f282"}i.icon.edit:before{content:"\f044"}i.icon.eject:before{content:"\f052"}i.icon.elementor:before{content:"\f430"}i.icon.ellipsis.horizontal:before{content:"\f141"}i.icon.ellipsis.vertical:before{content:"\f142"}i.icon.ember:before{content:"\f423"}i.icon.empire:before{content:"\f1d1"}i.icon.envelope:before{content:"\f0e0"}i.icon.envelope.open:before{content:"\f2b6"}i.icon.envelope.square:before{content:"\f199"}i.icon.envira:before{content:"\f299"}i.icon.eraser:before{content:"\f12d"}i.icon.erlang:before{content:"\f39d"}i.icon.ethereum:before{content:"\f42e"}i.icon.etsy:before{content:"\f2d7"}i.icon.euro.sign:before{content:"\f153"}i.icon.exchange.alternate:before{content:"\f362"}i.icon.exclamation:before{content:"\f12a"}i.icon.exclamation.circle:before{content:"\f06a"}i.icon.exclamation.triangle:before{content:"\f071"}i.icon.expand:before{content:"\f065"}i.icon.expand.arrows.alternate:before{content:"\f31e"}i.icon.expeditedssl:before{content:"\f23e"}i.icon.external.alternate:before{content:"\f35d"}i.icon.external.square.alternate:before{content:"\f360"}i.icon.eye:before{content:"\f06e"}i.icon.eye.dropper:before{content:"\f1fb"}i.icon.eye.slash:before{content:"\f070"}i.icon.facebook:before{content:"\f09a"}i.icon.facebook.f:before{content:"\f39e"}i.icon.facebook.messenger:before{content:"\f39f"}i.icon.facebook.square:before{content:"\f082"}i.icon.fast.backward:before{content:"\f049"}i.icon.fast.forward:before{content:"\f050"}i.icon.fax:before{content:"\f1ac"}i.icon.female:before{content:"\f182"}i.icon.fighter.jet:before{content:"\f0fb"}i.icon.file:before{content:"\f15b"}i.icon.file.alternate:before{content:"\f15c"}i.icon.file.archive:before{content:"\f1c6"}i.icon.file.audio:before{content:"\f1c7"}i.icon.file.code:before{content:"\f1c9"}i.icon.file.excel:before{content:"\f1c3"}i.icon.file.image:before{content:"\f1c5"}i.icon.file.pdf:before{content:"\f1c1"}i.icon.file.powerpoint:before{content:"\f1c4"}i.icon.file.video:before{content:"\f1c8"}i.icon.file.word:before{content:"\f1c2"}i.icon.film:before{content:"\f008"}i.icon.filter:before{content:"\f0b0"}i.icon.fire:before{content:"\f06d"}i.icon.fire.extinguisher:before{content:"\f134"}i.icon.firefox:before{content:"\f269"}i.icon.first.aid:before{content:"\f479"}i.icon.first.order:before{content:"\f2b0"}i.icon.firstdraft:before{content:"\f3a1"}i.icon.flag:before{content:"\f024"}i.icon.flag.checkered:before{content:"\f11e"}i.icon.flask:before{content:"\f0c3"}i.icon.flickr:before{content:"\f16e"}i.icon.flipboard:before{content:"\f44d"}i.icon.fly:before{content:"\f417"}i.icon.folder:before{content:"\f07b"}i.icon.folder.open:before{content:"\f07c"}i.icon.font:before{content:"\f031"}i.icon.font.awesome:before{content:"\f2b4"}i.icon.font.awesome.alternate:before{content:"\f35c"}i.icon.font.awesome.flag:before{content:"\f425"}i.icon.fonticons:before{content:"\f280"}i.icon.fonticons.fi:before{content:"\f3a2"}i.icon.football.ball:before{content:"\f44e"}i.icon.fort.awesome:before{content:"\f286"}i.icon.fort.awesome.alternate:before{content:"\f3a3"}i.icon.forumbee:before{content:"\f211"}i.icon.forward:before{content:"\f04e"}i.icon.foursquare:before{content:"\f180"}i.icon.free.code.camp:before{content:"\f2c5"}i.icon.freebsd:before{content:"\f3a4"}i.icon.frown:before{content:"\f119"}i.icon.futbol:before{content:"\f1e3"}i.icon.gamepad:before{content:"\f11b"}i.icon.gavel:before{content:"\f0e3"}i.icon.gem:before{content:"\f3a5"}i.icon.genderless:before{content:"\f22d"}i.icon.get.pocket:before{content:"\f265"}i.icon.gg:before{content:"\f260"}i.icon.gg.circle:before{content:"\f261"}i.icon.gift:before{content:"\f06b"}i.icon.git:before{content:"\f1d3"}i.icon.git.square:before{content:"\f1d2"}i.icon.github:before{content:"\f09b"}i.icon.github.alternate:before{content:"\f113"}i.icon.github.square:before{content:"\f092"}i.icon.gitkraken:before{content:"\f3a6"}i.icon.gitlab:before{content:"\f296"}i.icon.gitter:before{content:"\f426"}i.icon.glass.martini:before{content:"\f000"}i.icon.glide:before{content:"\f2a5"}i.icon.glide.g:before{content:"\f2a6"}i.icon.globe:before{content:"\f0ac"}i.icon.gofore:before{content:"\f3a7"}i.icon.golf.ball:before{content:"\f450"}i.icon.goodreads:before{content:"\f3a8"}i.icon.goodreads.g:before{content:"\f3a9"}i.icon.google:before{content:"\f1a0"}i.icon.google.drive:before{content:"\f3aa"}i.icon.google.play:before{content:"\f3ab"}i.icon.google.plus:before{content:"\f2b3"}i.icon.google.plus.g:before{content:"\f0d5"}i.icon.google.plus.square:before{content:"\f0d4"}i.icon.google.wallet:before{content:"\f1ee"}i.icon.graduation.cap:before{content:"\f19d"}i.icon.gratipay:before{content:"\f184"}i.icon.grav:before{content:"\f2d6"}i.icon.gripfire:before{content:"\f3ac"}i.icon.grunt:before{content:"\f3ad"}i.icon.gulp:before{content:"\f3ae"}i.icon.h.square:before{content:"\f0fd"}i.icon.hacker.news:before{content:"\f1d4"}i.icon.hacker.news.square:before{content:"\f3af"}i.icon.hand.lizard:before{content:"\f258"}i.icon.hand.paper:before{content:"\f256"}i.icon.hand.peace:before{content:"\f25b"}i.icon.hand.point.down:before{content:"\f0a7"}i.icon.hand.point.left:before{content:"\f0a5"}i.icon.hand.point.right:before{content:"\f0a4"}i.icon.hand.point.up:before{content:"\f0a6"}i.icon.hand.pointer:before{content:"\f25a"}i.icon.hand.rock:before{content:"\f255"}i.icon.hand.scissors:before{content:"\f257"}i.icon.hand.spock:before{content:"\f259"}i.icon.handshake:before{content:"\f2b5"}i.icon.hashtag:before{content:"\f292"}i.icon.hdd:before{content:"\f0a0"}i.icon.heading:before{content:"\f1dc"}i.icon.headphones:before{content:"\f025"}i.icon.heart:before{content:"\f004"}i.icon.heartbeat:before{content:"\f21e"}i.icon.hips:before{content:"\f452"}i.icon.hire.a.helper:before{content:"\f3b0"}i.icon.history:before{content:"\f1da"}i.icon.hockey.puck:before{content:"\f453"}i.icon.home:before{content:"\f015"}i.icon.hooli:before{content:"\f427"}i.icon.hospital:before{content:"\f0f8"}i.icon.hospital.symbol:before{content:"\f47e"}i.icon.hotjar:before{content:"\f3b1"}i.icon.hourglass:before{content:"\f254"}i.icon.hourglass.end:before{content:"\f253"}i.icon.hourglass.half:before{content:"\f252"}i.icon.hourglass.start:before{content:"\f251"}i.icon.houzz:before{content:"\f27c"}i.icon.html5:before{content:"\f13b"}i.icon.hubspot:before{content:"\f3b2"}i.icon.i.cursor:before{content:"\f246"}i.icon.id.badge:before{content:"\f2c1"}i.icon.id.card:before{content:"\f2c2"}i.icon.image:before{content:"\f03e"}i.icon.images:before{content:"\f302"}i.icon.imdb:before{content:"\f2d8"}i.icon.inbox:before{content:"\f01c"}i.icon.indent:before{content:"\f03c"}i.icon.industry:before{content:"\f275"}i.icon.info:before{content:"\f129"}i.icon.info.circle:before{content:"\f05a"}i.icon.instagram:before{content:"\f16d"}i.icon.internet.explorer:before{content:"\f26b"}i.icon.ioxhost:before{content:"\f208"}i.icon.italic:before{content:"\f033"}i.icon.itunes:before{content:"\f3b4"}i.icon.itunes.note:before{content:"\f3b5"}i.icon.jenkins:before{content:"\f3b6"}i.icon.joget:before{content:"\f3b7"}i.icon.joomla:before{content:"\f1aa"}i.icon.js:before{content:"\f3b8"}i.icon.js.square:before{content:"\f3b9"}i.icon.jsfiddle:before{content:"\f1cc"}i.icon.key:before{content:"\f084"}i.icon.keyboard:before{content:"\f11c"}i.icon.keycdn:before{content:"\f3ba"}i.icon.kickstarter:before{content:"\f3bb"}i.icon.kickstarter.k:before{content:"\f3bc"}i.icon.korvue:before{content:"\f42f"}i.icon.language:before{content:"\f1ab"}i.icon.laptop:before{content:"\f109"}i.icon.laravel:before{content:"\f3bd"}i.icon.lastfm:before{content:"\f202"}i.icon.lastfm.square:before{content:"\f203"}i.icon.leaf:before{content:"\f06c"}i.icon.leanpub:before{content:"\f212"}i.icon.lemon:before{content:"\f094"}i.icon.less:before{content:"\f41d"}i.icon.level.down.alternate:before{content:"\f3be"}i.icon.level.up.alternate:before{content:"\f3bf"}i.icon.life.ring:before{content:"\f1cd"}i.icon.lightbulb:before{content:"\f0eb"}i.icon.linechat:before{content:"\f3c0"}i.icon.linkedin:before{content:"\f08c"}i.icon.linkedin.alt:before{content:"\f0e1"}i.icon.linode:before{content:"\f2b8"}i.icon.linux:before{content:"\f17c"}i.icon.lira.sign:before{content:"\f195"}i.icon.list:before{content:"\f03a"}i.icon.list.alternate:before{content:"\f022"}i.icon.list.ol:before{content:"\f0cb"}i.icon.list.ul:before{content:"\f0ca"}i.icon.location.arrow:before{content:"\f124"}i.icon.lock:before{content:"\f023"}i.icon.lock.open:before{content:"\f3c1"}i.icon.long.arrow.alternate.down:before{content:"\f309"}i.icon.long.arrow.alternate.left:before{content:"\f30a"}i.icon.long.arrow.alternate.right:before{content:"\f30b"}i.icon.long.arrow.alternate.up:before{content:"\f30c"}i.icon.low.vision:before{content:"\f2a8"}i.icon.lyft:before{content:"\f3c3"}i.icon.magento:before{content:"\f3c4"}i.icon.magic:before{content:"\f0d0"}i.icon.magnet:before{content:"\f076"}i.icon.male:before{content:"\f183"}i.icon.map:before{content:"\f279"}i.icon.map.marker:before{content:"\f041"}i.icon.map.marker.alternate:before{content:"\f3c5"}i.icon.map.pin:before{content:"\f276"}i.icon.map.signs:before{content:"\f277"}i.icon.mars:before{content:"\f222"}i.icon.mars.double:before{content:"\f227"}i.icon.mars.stroke:before{content:"\f229"}i.icon.mars.stroke.horizontal:before{content:"\f22b"}i.icon.mars.stroke.vertical:before{content:"\f22a"}i.icon.maxcdn:before{content:"\f136"}i.icon.medapps:before{content:"\f3c6"}i.icon.medium:before{content:"\f23a"}i.icon.medium.m:before{content:"\f3c7"}i.icon.medkit:before{content:"\f0fa"}i.icon.medrt:before{content:"\f3c8"}i.icon.meetup:before{content:"\f2e0"}i.icon.meh:before{content:"\f11a"}i.icon.mercury:before{content:"\f223"}i.icon.microchip:before{content:"\f2db"}i.icon.microphone:before{content:"\f130"}i.icon.microphone.slash:before{content:"\f131"}i.icon.microsoft:before{content:"\f3ca"}i.icon.minus:before{content:"\f068"}i.icon.minus.circle:before{content:"\f056"}i.icon.minus.square:before{content:"\f146"}i.icon.mix:before{content:"\f3cb"}i.icon.mixcloud:before{content:"\f289"}i.icon.mizuni:before{content:"\f3cc"}i.icon.mobile:before{content:"\f10b"}i.icon.mobile.alternate:before{content:"\f3cd"}i.icon.modx:before{content:"\f285"}i.icon.monero:before{content:"\f3d0"}i.icon.money.bill.alternate:before{content:"\f3d1"}i.icon.moon:before{content:"\f186"}i.icon.motorcycle:before{content:"\f21c"}i.icon.mouse.pointer:before{content:"\f245"}i.icon.music:before{content:"\f001"}i.icon.napster:before{content:"\f3d2"}i.icon.neuter:before{content:"\f22c"}i.icon.newspaper:before{content:"\f1ea"}i.icon.nintendo.switch:before{content:"\f418"}i.icon.node:before{content:"\f419"}i.icon.node.js:before{content:"\f3d3"}i.icon.npm:before{content:"\f3d4"}i.icon.ns8:before{content:"\f3d5"}i.icon.nutritionix:before{content:"\f3d6"}i.icon.object.group:before{content:"\f247"}i.icon.object.ungroup:before{content:"\f248"}i.icon.odnoklassniki:before{content:"\f263"}i.icon.odnoklassniki.square:before{content:"\f264"}i.icon.opencart:before{content:"\f23d"}i.icon.openid:before{content:"\f19b"}i.icon.opera:before{content:"\f26a"}i.icon.optin.monster:before{content:"\f23c"}i.icon.osi:before{content:"\f41a"}i.icon.outdent:before{content:"\f03b"}i.icon.page4:before{content:"\f3d7"}i.icon.pagelines:before{content:"\f18c"}i.icon.paint.brush:before{content:"\f1fc"}i.icon.palfed:before{content:"\f3d8"}i.icon.pallet:before{content:"\f482"}i.icon.paper.plane:before{content:"\f1d8"}i.icon.paperclip:before{content:"\f0c6"}i.icon.paragraph:before{content:"\f1dd"}i.icon.paste:before{content:"\f0ea"}i.icon.patreon:before{content:"\f3d9"}i.icon.pause:before{content:"\f04c"}i.icon.pause.circle:before{content:"\f28b"}i.icon.paw:before{content:"\f1b0"}i.icon.paypal:before{content:"\f1ed"}i.icon.pen.square:before{content:"\f14b"}i.icon.pencil.alternate:before{content:"\f303"}i.icon.percent:before{content:"\f295"}i.icon.periscope:before{content:"\f3da"}i.icon.phabricator:before{content:"\f3db"}i.icon.phoenix.framework:before{content:"\f3dc"}i.icon.phone:before{content:"\f095"}i.icon.phone.square:before{content:"\f098"}i.icon.phone.volume:before{content:"\f2a0"}i.icon.php:before{content:"\f457"}i.icon.pied.piper:before{content:"\f2ae"}i.icon.pied.piper.alternate:before{content:"\f1a8"}i.icon.pied.piper.pp:before{content:"\f1a7"}i.icon.pills:before{content:"\f484"}i.icon.pinterest:before{content:"\f0d2"}i.icon.pinterest.p:before{content:"\f231"}i.icon.pinterest.square:before{content:"\f0d3"}i.icon.plane:before{content:"\f072"}i.icon.play:before{content:"\f04b"}i.icon.play.circle:before{content:"\f144"}i.icon.playstation:before{content:"\f3df"}i.icon.plug:before{content:"\f1e6"}i.icon.plus:before{content:"\f067"}i.icon.plus.circle:before{content:"\f055"}i.icon.plus.square:before{content:"\f0fe"}i.icon.podcast:before{content:"\f2ce"}i.icon.pound.sign:before{content:"\f154"}i.icon.power.off:before{content:"\f011"}i.icon.print:before{content:"\f02f"}i.icon.product.hunt:before{content:"\f288"}i.icon.pushed:before{content:"\f3e1"}i.icon.puzzle.piece:before{content:"\f12e"}i.icon.python:before{content:"\f3e2"}i.icon.qq:before{content:"\f1d6"}i.icon.qrcode:before{content:"\f029"}i.icon.question:before{content:"\f128"}i.icon.question.circle:before{content:"\f059"}i.icon.quidditch:before{content:"\f458"}i.icon.quinscape:before{content:"\f459"}i.icon.quora:before{content:"\f2c4"}i.icon.quote.left:before{content:"\f10d"}i.icon.quote.right:before{content:"\f10e"}i.icon.random:before{content:"\f074"}i.icon.ravelry:before{content:"\f2d9"}i.icon.react:before{content:"\f41b"}i.icon.rebel:before{content:"\f1d0"}i.icon.recycle:before{content:"\f1b8"}i.icon.redriver:before{content:"\f3e3"}i.icon.reddit:before{content:"\f1a1"}i.icon.reddit.alien:before{content:"\f281"}i.icon.reddit.square:before{content:"\f1a2"}i.icon.redo:before{content:"\f01e"}i.icon.redo.alternate:before{content:"\f2f9"}i.icon.registered:before{content:"\f25d"}i.icon.rendact:before{content:"\f3e4"}i.icon.renren:before{content:"\f18b"}i.icon.reply:before{content:"\f3e5"}i.icon.reply.all:before{content:"\f122"}i.icon.replyd:before{content:"\f3e6"}i.icon.resolving:before{content:"\f3e7"}i.icon.retweet:before{content:"\f079"}i.icon.road:before{content:"\f018"}i.icon.rocket:before{content:"\f135"}i.icon.rocketchat:before{content:"\f3e8"}i.icon.rockrms:before{content:"\f3e9"}i.icon.rss:before{content:"\f09e"}i.icon.rss.square:before{content:"\f143"}i.icon.ruble.sign:before{content:"\f158"}i.icon.rupee.sign:before{content:"\f156"}i.icon.safari:before{content:"\f267"}i.icon.sass:before{content:"\f41e"}i.icon.save:before{content:"\f0c7"}i.icon.schlix:before{content:"\f3ea"}i.icon.scribd:before{content:"\f28a"}i.icon.search:before{content:"\f002"}i.icon.search.minus:before{content:"\f010"}i.icon.search.plus:before{content:"\f00e"}i.icon.searchengin:before{content:"\f3eb"}i.icon.sellcast:before{content:"\f2da"}i.icon.sellsy:before{content:"\f213"}i.icon.server:before{content:"\f233"}i.icon.servicestack:before{content:"\f3ec"}i.icon.share:before{content:"\f064"}i.icon.share.alternate:before{content:"\f1e0"}i.icon.share.alternate.square:before{content:"\f1e1"}i.icon.share.square:before{content:"\f14d"}i.icon.shekel.sign:before{content:"\f20b"}i.icon.shield.alternate:before{content:"\f3ed"}i.icon.ship:before{content:"\f21a"}i.icon.shipping.fast:before{content:"\f48b"}i.icon.shirtsinbulk:before{content:"\f214"}i.icon.shopping.bag:before{content:"\f290"}i.icon.shopping.basket:before{content:"\f291"}i.icon.shopping.cart:before{content:"\f07a"}i.icon.shower:before{content:"\f2cc"}i.icon.sign.language:before{content:"\f2a7"}i.icon.signal:before{content:"\f012"}i.icon.simplybuilt:before{content:"\f215"}i.icon.sistrix:before{content:"\f3ee"}i.icon.sitemap:before{content:"\f0e8"}i.icon.skyatlas:before{content:"\f216"}i.icon.skype:before{content:"\f17e"}i.icon.slack:before{content:"\f198"}i.icon.slack.hash:before{content:"\f3ef"}i.icon.sliders.horizontal:before{content:"\f1de"}i.icon.slideshare:before{content:"\f1e7"}i.icon.smile:before{content:"\f118"}i.icon.snapchat:before{content:"\f2ab"}i.icon.snapchat.ghost:before{content:"\f2ac"}i.icon.snapchat.square:before{content:"\f2ad"}i.icon.snowflake:before{content:"\f2dc"}i.icon.sort:before{content:"\f0dc"}i.icon.sort.alphabet.down:before{content:"\f15d"}i.icon.sort.alphabet.up:before{content:"\f15e"}i.icon.sort.amount.down:before{content:"\f160"}i.icon.sort.amount.up:before{content:"\f161"}i.icon.sort.down:before{content:"\f0dd"}i.icon.sort.numeric.down:before{content:"\f162"}i.icon.sort.numeric.up:before{content:"\f163"}i.icon.sort.up:before{content:"\f0de"}i.icon.soundcloud:before{content:"\f1be"}i.icon.space.shuttle:before{content:"\f197"}i.icon.speakap:before{content:"\f3f3"}i.icon.spinner:before{content:"\f110"}i.icon.spotify:before{content:"\f1bc"}i.icon.square:before{content:"\f0c8"}i.icon.square.full:before{content:"\f45c"}i.icon.stack.exchange:before{content:"\f18d"}i.icon.stack.overflow:before{content:"\f16c"}i.icon.star:before{content:"\f005"}i.icon.star.half:before{content:"\f089"}i.icon.staylinked:before{content:"\f3f5"}i.icon.steam:before{content:"\f1b6"}i.icon.steam.square:before{content:"\f1b7"}i.icon.steam.symbol:before{content:"\f3f6"}i.icon.step.backward:before{content:"\f048"}i.icon.step.forward:before{content:"\f051"}i.icon.stethoscope:before{content:"\f0f1"}i.icon.sticker.mule:before{content:"\f3f7"}i.icon.sticky.note:before{content:"\f249"}i.icon.stop:before{content:"\f04d"}i.icon.stop.circle:before{content:"\f28d"}i.icon.stopwatch:before{content:"\f2f2"}i.icon.strava:before{content:"\f428"}i.icon.street.view:before{content:"\f21d"}i.icon.strikethrough:before{content:"\f0cc"}i.icon.stripe:before{content:"\f429"}i.icon.stripe.s:before{content:"\f42a"}i.icon.studiovinari:before{content:"\f3f8"}i.icon.stumbleupon:before{content:"\f1a4"}i.icon.stumbleupon.circle:before{content:"\f1a3"}i.icon.subscript:before{content:"\f12c"}i.icon.subway:before{content:"\f239"}i.icon.suitcase:before{content:"\f0f2"}i.icon.sun:before{content:"\f185"}i.icon.superpowers:before{content:"\f2dd"}i.icon.superscript:before{content:"\f12b"}i.icon.supple:before{content:"\f3f9"}i.icon.sync:before{content:"\f021"}i.icon.sync.alternate:before{content:"\f2f1"}i.icon.syringe:before{content:"\f48e"}i.icon.table:before{content:"\f0ce"}i.icon.table.tennis:before{content:"\f45d"}i.icon.tablet:before{content:"\f10a"}i.icon.tablet.alternate:before{content:"\f3fa"}i.icon.tachometer.alternate:before{content:"\f3fd"}i.icon.tag:before{content:"\f02b"}i.icon.tags:before{content:"\f02c"}i.icon.tasks:before{content:"\f0ae"}i.icon.taxi:before{content:"\f1ba"}i.icon.telegram:before{content:"\f2c6"}i.icon.telegram.plane:before{content:"\f3fe"}i.icon.tencent.weibo:before{content:"\f1d5"}i.icon.terminal:before{content:"\f120"}i.icon.text.height:before{content:"\f034"}i.icon.text.width:before{content:"\f035"}i.icon.th:before{content:"\f00a"}i.icon.th.large:before{content:"\f009"}i.icon.th.list:before{content:"\f00b"}i.icon.themeisle:before{content:"\f2b2"}i.icon.thermometer:before{content:"\f491"}i.icon.thermometer.empty:before{content:"\f2cb"}i.icon.thermometer.full:before{content:"\f2c7"}i.icon.thermometer.half:before{content:"\f2c9"}i.icon.thermometer.quarter:before{content:"\f2ca"}i.icon.thermometer.three.quarters:before{content:"\f2c8"}i.icon.thumbs.down:before{content:"\f165"}i.icon.thumbs.up:before{content:"\f164"}i.icon.thumbtack:before{content:"\f08d"}i.icon.ticket.alternate:before{content:"\f3ff"}i.icon.times:before{content:"\f00d"}i.icon.times.circle:before{content:"\f057"}i.icon.tint:before{content:"\f043"}i.icon.toggle.off:before{content:"\f204"}i.icon.toggle.on:before{content:"\f205"}i.icon.trademark:before{content:"\f25c"}i.icon.train:before{content:"\f238"}i.icon.transgender:before{content:"\f224"}i.icon.transgender.alternate:before{content:"\f225"}i.icon.trash:before{content:"\f1f8"}i.icon.trash.alternate:before{content:"\f2ed"}i.icon.tree:before{content:"\f1bb"}i.icon.trello:before{content:"\f181"}i.icon.tripadvisor:before{content:"\f262"}i.icon.trophy:before{content:"\f091"}i.icon.truck:before{content:"\f0d1"}i.icon.tty:before{content:"\f1e4"}i.icon.tumblr:before{content:"\f173"}i.icon.tumblr.square:before{content:"\f174"}i.icon.tv:before{content:"\f26c"}i.icon.twitch:before{content:"\f1e8"}i.icon.twitter:before{content:"\f099"}i.icon.twitter.square:before{content:"\f081"}i.icon.typo3:before{content:"\f42b"}i.icon.uber:before{content:"\f402"}i.icon.uikit:before{content:"\f403"}i.icon.umbrella:before{content:"\f0e9"}i.icon.underline:before{content:"\f0cd"}i.icon.undo:before{content:"\f0e2"}i.icon.undo.alternate:before{content:"\f2ea"}i.icon.uniregistry:before{content:"\f404"}i.icon.universal.access:before{content:"\f29a"}i.icon.university:before{content:"\f19c"}i.icon.unlink:before{content:"\f127"}i.icon.unlock:before{content:"\f09c"}i.icon.unlock.alternate:before{content:"\f13e"}i.icon.untappd:before{content:"\f405"}i.icon.upload:before{content:"\f093"}i.icon.usb:before{content:"\f287"}i.icon.user:before{content:"\f007"}i.icon.user.circle:before{content:"\f2bd"}i.icon.user.md:before{content:"\f0f0"}i.icon.user.plus:before{content:"\f234"}i.icon.user.secret:before{content:"\f21b"}i.icon.user.times:before{content:"\f235"}i.icon.users:before{content:"\f0c0"}i.icon.ussunnah:before{content:"\f407"}i.icon.utensil.spoon:before{content:"\f2e5"}i.icon.utensils:before{content:"\f2e7"}i.icon.vaadin:before{content:"\f408"}i.icon.venus:before{content:"\f221"}i.icon.venus.double:before{content:"\f226"}i.icon.venus.mars:before{content:"\f228"}i.icon.viacoin:before{content:"\f237"}i.icon.viadeo:before{content:"\f2a9"}i.icon.viadeo.square:before{content:"\f2aa"}i.icon.viber:before{content:"\f409"}i.icon.video:before{content:"\f03d"}i.icon.vimeo:before{content:"\f40a"}i.icon.vimeo.square:before{content:"\f194"}i.icon.vimeo.v:before{content:"\f27d"}i.icon.vine:before{content:"\f1ca"}i.icon.vk:before{content:"\f189"}i.icon.vnv:before{content:"\f40b"}i.icon.volleyball.ball:before{content:"\f45f"}i.icon.volume.down:before{content:"\f027"}i.icon.volume.off:before{content:"\f026"}i.icon.volume.up:before{content:"\f028"}i.icon.vuejs:before{content:"\f41f"}i.icon.warehouse:before{content:"\f494"}i.icon.weibo:before{content:"\f18a"}i.icon.weight:before{content:"\f496"}i.icon.weixin:before{content:"\f1d7"}i.icon.whatsapp:before{content:"\f232"}i.icon.whatsapp.square:before{content:"\f40c"}i.icon.wheelchair:before{content:"\f193"}i.icon.whmcs:before{content:"\f40d"}i.icon.wifi:before{content:"\f1eb"}i.icon.wikipedia.w:before{content:"\f266"}i.icon.window.close:before{content:"\f410"}i.icon.window.maximize:before{content:"\f2d0"}i.icon.window.minimize:before{content:"\f2d1"}i.icon.window.restore:before{content:"\f2d2"}i.icon.windows:before{content:"\f17a"}i.icon.won.sign:before{content:"\f159"}i.icon.wordpress:before{content:"\f19a"}i.icon.wordpress.simple:before{content:"\f411"}i.icon.wpbeginner:before{content:"\f297"}i.icon.wpexplorer:before{content:"\f2de"}i.icon.wpforms:before{content:"\f298"}i.icon.wrench:before{content:"\f0ad"}i.icon.xbox:before{content:"\f412"}i.icon.xing:before{content:"\f168"}i.icon.xing.square:before{content:"\f169"}i.icon.y.combinator:before{content:"\f23b"}i.icon.yahoo:before{content:"\f19e"}i.icon.yandex:before{content:"\f413"}i.icon.yandex.international:before{content:"\f414"}i.icon.yelp:before{content:"\f1e9"}i.icon.yen.sign:before{content:"\f157"}i.icon.yoast:before{content:"\f2b1"}i.icon.youtube:before{content:"\f167"}i.icon.youtube.square:before{content:"\f431"}i.icon.chess.rock:before{content:"\f447"}i.icon.ordered.list:before{content:"\f0cb"}i.icon.unordered.list:before{content:"\f0ca"}i.icon.user.doctor:before{content:"\f0f0"}i.icon.shield:before{content:"\f3ed"}i.icon.puzzle:before{content:"\f12e"}i.icon.credit.card.amazon.pay:before{content:"\f42d"}i.icon.credit.card.american.express:before{content:"\f1f3"}i.icon.credit.card.diners.club:before{content:"\f24c"}i.icon.credit.card.discover:before{content:"\f1f2"}i.icon.credit.card.jcb:before{content:"\f24b"}i.icon.credit.card.mastercard:before{content:"\f1f1"}i.icon.credit.card.paypal:before{content:"\f1f4"}i.icon.credit.card.stripe:before{content:"\f1f5"}i.icon.credit.card.visa:before{content:"\f1f0"}i.icon.add.circle:before{content:"\f055"}i.icon.add.square:before{content:"\f0fe"}i.icon.add.to.calendar:before{content:"\f271"}i.icon.add.to.cart:before{content:"\f217"}i.icon.add.user:before{content:"\f234"}i.icon.add:before{content:"\f067"}i.icon.alarm.mute:before{content:"\f1f6"}i.icon.alarm:before{content:"\f0f3"}i.icon.ald:before,i.icon.als:before{content:"\f2a2"}i.icon.american.express.card:before,i.icon.american.express:before,i.icon.amex:before{content:"\f1f3"}i.icon.announcement:before{content:"\f0a1"}i.icon.area.chart:before,i.icon.area.graph:before{content:"\f1fe"}i.icon.arrow.down.cart:before{content:"\f218"}i.icon.asexual:before{content:"\f22d"}i.icon.asl.interpreting:before,i.icon.asl:before{content:"\f2a3"}i.icon.assistive.listening.devices:before{content:"\f2a2"}i.icon.attach:before{content:"\f0c6"}i.icon.attention:before{content:"\f06a"}i.icon.balance:before{content:"\f24e"}i.icon.bar:before{content:"\f0fc"}i.icon.bathtub:before{content:"\f2cd"}i.icon.battery.four:before{content:"\f240"}i.icon.battery.high:before{content:"\f241"}i.icon.battery.low:before{content:"\f243"}i.icon.battery.medium:before{content:"\f242"}i.icon.battery.one:before{content:"\f243"}i.icon.battery.three:before{content:"\f241"}i.icon.battery.two:before{content:"\f242"}i.icon.battery.zero:before{content:"\f244"}i.icon.birthday:before{content:"\f1fd"}i.icon.block.layout:before{content:"\f009"}i.icon.bluetooth.alternative:before{content:"\f294"}i.icon.broken.chain:before{content:"\f127"}i.icon.browser:before{content:"\f022"}i.icon.call.square:before{content:"\f098"}i.icon.call:before{content:"\f095"}i.icon.cancel:before{content:"\f00d"}i.icon.cart:before{content:"\f07a"}i.icon.cc:before{content:"\f20a"}i.icon.chain:before{content:"\f0c1"}i.icon.chat:before{content:"\f075"}i.icon.checked.calendar:before{content:"\f274"}i.icon.checkmark:before{content:"\f00c"}i.icon.circle.notched:before{content:"\f1ce"}i.icon.close:before{content:"\f00d"}i.icon.cny:before{content:"\f157"}i.icon.cocktail:before{content:"\f000"}i.icon.commenting:before{content:"\f27a"}i.icon.computer:before{content:"\f108"}i.icon.configure:before{content:"\f0ad"}i.icon.content:before{content:"\f0c9"}i.icon.deafness:before{content:"\f2a4"}i.icon.delete.calendar:before{content:"\f273"}i.icon.delete:before{content:"\f00d"}i.icon.detective:before{content:"\f21b"}i.icon.diners.club.card:before,i.icon.diners.club:before{content:"\f24c"}i.icon.discover.card:before,i.icon.discover:before{content:"\f1f2"}i.icon.discussions:before{content:"\f086"}i.icon.doctor:before{content:"\f0f0"}i.icon.dollar:before{content:"\f155"}i.icon.dont:before{content:"\f05e"}i.icon.dribble:before{content:"\f17d"}i.icon.drivers.license:before{content:"\f2c2"}i.icon.dropdown:before{content:"\f0d7"}i.icon.eercast:before{content:"\f2da"}i.icon.emergency:before{content:"\f0f9"}i.icon.envira.gallery:before{content:"\f299"}i.icon.erase:before{content:"\f12d"}i.icon.eur:before,i.icon.euro:before{content:"\f153"}i.icon.eyedropper:before{content:"\f1fb"}i.icon.fa:before{content:"\f2b4"}i.icon.factory:before{content:"\f275"}i.icon.favorite:before{content:"\f005"}i.icon.feed:before{content:"\f09e"}i.icon.female.homosexual:before{content:"\f226"}i.icon.file.text:before{content:"\f15c"}i.icon.find:before{content:"\f1e5"}i.icon.first.aid:before{content:"\f0fa"}i.icon.five.hundred.pixels:before{content:"\f26e"}i.icon.fork:before{content:"\f126"}i.icon.game:before{content:"\f11b"}i.icon.gay:before{content:"\f227"}i.icon.gbp:before{content:"\f154"}i.icon.gittip:before{content:"\f184"}i.icon.google.plus.circle:before,i.icon.google.plus.official:before{content:"\f2b3"}i.icon.grab:before{content:"\f255"}i.icon.graduation:before{content:"\f19d"}i.icon.grid.layout:before{content:"\f00a"}i.icon.group:before{content:"\f0c0"}i.icon.h:before{content:"\f0fd"}i.icon.hand.victory:before{content:"\f25b"}i.icon.handicap:before{content:"\f193"}i.icon.hard.of.hearing:before{content:"\f2a4"}i.icon.header:before{content:"\f1dc"}i.icon.help.circle:before{content:"\f059"}i.icon.help:before{content:"\f128"}i.icon.heterosexual:before{content:"\f228"}i.icon.hide:before{content:"\f070"}i.icon.hotel:before{content:"\f236"}i.icon.hourglass.four:before,i.icon.hourglass.full:before{content:"\f254"}i.icon.hourglass.one:before{content:"\f251"}i.icon.hourglass.three:before{content:"\f253"}i.icon.hourglass.two:before{content:"\f252"}i.icon.idea:before{content:"\f0eb"}i.icon.ils:before{content:"\f20b"}i.icon.in-cart:before{content:"\f218"}i.icon.inr:before{content:"\f156"}i.icon.intergender:before,i.icon.intersex:before{content:"\f224"}i.icon.japan.credit.bureau.card:before,i.icon.japan.credit.bureau:before,i.icon.jcb:before{content:"\f24b"}i.icon.jpy:before{content:"\f157"}i.icon.krw:before{content:"\f159"}i.icon.lab:before{content:"\f0c3"}i.icon.law:before{content:"\f24e"}i.icon.legal:before{content:"\f0e3"}i.icon.lesbian:before{content:"\f226"}i.icon.lightning:before{content:"\f0e7"}i.icon.like:before{content:"\f004"}i.icon.line.graph:before{content:"\f201"}i.icon.linkedin.square:before{content:"\f08c"}i.icon.linkify:before{content:"\f0c1"}i.icon.lira:before{content:"\f195"}i.icon.list.layout:before{content:"\f00b"}i.icon.magnify:before{content:"\f00e"}i.icon.mail.forward:before{content:"\f064"}i.icon.mail.square:before{content:"\f199"}i.icon.mail:before{content:"\f0e0"}i.icon.male.homosexual:before{content:"\f227"}i.icon.man:before{content:"\f222"}i.icon.marker:before{content:"\f041"}i.icon.mars.alternate:before{content:"\f229"}i.icon.mars.horizontal:before{content:"\f22b"}i.icon.mars.vertical:before{content:"\f22a"}i.icon.mastercard.card:before,i.icon.mastercard:before{content:"\f1f1"}i.icon.microsoft.edge:before{content:"\f282"}i.icon.military:before{content:"\f0fb"}i.icon.ms.edge:before{content:"\f282"}i.icon.mute:before{content:"\f131"}i.icon.new.pied.piper:before{content:"\f2ae"}i.icon.non.binary.transgender:before{content:"\f223"}i.icon.numbered.list:before{content:"\f0cb"}i.icon.optinmonster:before{content:"\f23c"}i.icon.options:before{content:"\f1de"}i.icon.other.gender.horizontal:before{content:"\f22b"}i.icon.other.gender.vertical:before{content:"\f22a"}i.icon.other.gender:before{content:"\f229"}i.icon.payment:before{content:"\f09d"}i.icon.paypal.card:before{content:"\f1f4"}i.icon.pencil.square:before{content:"\f14b"}i.icon.photo:before{content:"\f030"}i.icon.picture:before{content:"\f03e"}i.icon.pie.chart:before,i.icon.pie.graph:before{content:"\f200"}i.icon.pied.piper.hat:before{content:"\f2ae"}i.icon.pin:before{content:"\f08d"}i.icon.plus.cart:before{content:"\f217"}i.icon.pocket:before{content:"\f265"}i.icon.point:before{content:"\f041"}i.icon.pointing.down:before{content:"\f0a7"}i.icon.pointing.left:before{content:"\f0a5"}i.icon.pointing.right:before{content:"\f0a4"}i.icon.pointing.up:before{content:"\f0a6"}i.icon.pound:before{content:"\f154"}i.icon.power.cord:before{content:"\f1e6"}i.icon.power:before{content:"\f011"}i.icon.privacy:before{content:"\f084"}i.icon.r.circle:before{content:"\f25d"}i.icon.rain:before{content:"\f0e9"}i.icon.record:before{content:"\f03d"}i.icon.refresh:before{content:"\f021"}i.icon.remove.circle:before{content:"\f057"}i.icon.remove.from.calendar:before{content:"\f272"}i.icon.remove.user:before{content:"\f235"}i.icon.remove:before{content:"\f00d"}i.icon.repeat:before{content:"\f01e"}i.icon.rmb:before{content:"\f157"}i.icon.rouble:before,i.icon.rub:before,i.icon.ruble:before{content:"\f158"}i.icon.rupee:before{content:"\f156"}i.icon.s15:before{content:"\f2cd"}i.icon.selected.radio:before{content:"\f192"}i.icon.send:before{content:"\f1d8"}i.icon.setting:before{content:"\f013"}i.icon.settings:before{content:"\f085"}i.icon.shekel:before,i.icon.sheqel:before{content:"\f20b"}i.icon.shipping:before{content:"\f0d1"}i.icon.shop:before{content:"\f07a"}i.icon.shuffle:before{content:"\f074"}i.icon.shutdown:before{content:"\f011"}i.icon.sidebar:before{content:"\f0c9"}i.icon.signing:before{content:"\f2a7"}i.icon.signup:before{content:"\f044"}i.icon.sliders:before{content:"\f1de"}i.icon.soccer:before{content:"\f1e3"}i.icon.sort.alphabet.ascending:before{content:"\f15d"}i.icon.sort.alphabet.descending:before{content:"\f15e"}i.icon.sort.ascending:before{content:"\f0de"}i.icon.sort.content.ascending:before{content:"\f160"}i.icon.sort.content.descending:before{content:"\f161"}i.icon.sort.descending:before{content:"\f0dd"}i.icon.sort.numeric.ascending:before{content:"\f162"}i.icon.sort.numeric.descending:before{content:"\f163"}i.icon.sound:before{content:"\f025"}i.icon.spy:before{content:"\f21b"}i.icon.stripe.card:before{content:"\f1f5"}i.icon.student:before{content:"\f19d"}i.icon.talk:before{content:"\f27a"}i.icon.target:before{content:"\f140"}i.icon.teletype:before{content:"\f1e4"}i.icon.television:before{content:"\f26c"}i.icon.text.cursor:before{content:"\f246"}i.icon.text.telephone:before{content:"\f1e4"}i.icon.theme.isle:before{content:"\f2b2"}i.icon.theme:before{content:"\f043"}i.icon.thermometer:before{content:"\f2c7"}i.icon.thumb.tack:before{content:"\f08d"}i.icon.time:before{content:"\f017"}i.icon.tm:before{content:"\f25c"}i.icon.toggle.down:before{content:"\f150"}i.icon.toggle.left:before{content:"\f191"}i.icon.toggle.right:before{content:"\f152"}i.icon.toggle.up:before{content:"\f151"}i.icon.translate:before{content:"\f1ab"}i.icon.travel:before{content:"\f0b1"}i.icon.treatment:before{content:"\f0f1"}i.icon.triangle.down:before{content:"\f0d7"}i.icon.triangle.left:before{content:"\f0d9"}i.icon.triangle.right:before{content:"\f0da"}i.icon.triangle.up:before{content:"\f0d8"}i.icon.try:before{content:"\f195"}i.icon.unhide:before{content:"\f06e"}i.icon.unlinkify:before{content:"\f127"}i.icon.unmute:before{content:"\f130"}i.icon.usd:before{content:"\f155"}i.icon.user.cancel:before,i.icon.user.close:before,i.icon.user.delete:before,i.icon.user.x:before{content:"\f235"}i.icon.vcard:before{content:"\f2bb"}i.icon.video.camera:before{content:"\f03d"}i.icon.video.play:before{content:"\f144"}i.icon.visa.card:before,i.icon.visa:before{content:"\f1f0"}i.icon.volume.control.phone:before{content:"\f2a0"}i.icon.wait:before{content:"\f017"}i.icon.warning.circle:before{content:"\f06a"}i.icon.warning.sign:before{content:"\f071"}i.icon.warning:before{content:"\f12a"}i.icon.wechat:before{content:"\f1d7"}i.icon.wi-fi:before{content:"\f1eb"}i.icon.wikipedia:before{content:"\f266"}i.icon.winner:before{content:"\f091"}i.icon.wizard:before{content:"\f0d0"}i.icon.woman:before{content:"\f221"}i.icon.won:before{content:"\f159"}i.icon.wordpress.beginner:before{content:"\f297"}i.icon.wordpress.forms:before{content:"\f298"}i.icon.world:before{content:"\f0ac"}i.icon.write.square:before{content:"\f14b"}i.icon.x:before{content:"\f00d"}i.icon.yc:before,i.icon.ycombinator:before{content:"\f23b"}i.icon.yen:before{content:"\f157"}i.icon.zip:before{content:"\f187"}i.icon.zoom-in:before{content:"\f00e"}i.icon.zoom-out:before{content:"\f010"}i.icon.zoom:before{content:"\f00e"}i.icon.bitbucket.square:before{content:"\f171"}i.icon.checkmark.box:before{content:"\f14a"}i.icon.circle.thin:before{content:"\f111"}i.icon.cloud.download:before{content:"\f381"}i.icon.cloud.upload:before{content:"\f382"}i.icon.compose:before{content:"\f303"}i.icon.conversation:before{content:"\f086"}i.icon.credit.card.alternative:before{content:"\f09d"}i.icon.currency:before{content:"\f3d1"}i.icon.dashboard:before{content:"\f3fd"}i.icon.diamond:before{content:"\f3a5"}i.icon.disk:before{content:"\f0a0"}i.icon.exchange:before{content:"\f362"}i.icon.external.share:before{content:"\f14d"}i.icon.external.square:before{content:"\f360"}i.icon.external:before{content:"\f35d"}i.icon.facebook.official:before{content:"\f082"}i.icon.food:before{content:"\f2e7"}i.icon.hourglass.zero:before{content:"\f253"}i.icon.level.down:before{content:"\f3be"}i.icon.level.up:before{content:"\f3bf"}i.icon.logout:before{content:"\f2f5"}i.icon.meanpath:before{content:"\f0c8"}i.icon.money:before{content:"\f3d1"}i.icon.move:before{content:"\f0b2"}i.icon.pencil:before{content:"\f303"}i.icon.protect:before{content:"\f023"}i.icon.radio:before{content:"\f192"}i.icon.remove.bookmark:before{content:"\f02e"}i.icon.resize.horizontal:before{content:"\f337"}i.icon.resize.vertical:before{content:"\f338"}i.icon.sign-in:before{content:"\f2f6"}i.icon.sign-out:before{content:"\f2f5"}i.icon.spoon:before{content:"\f2e5"}i.icon.star.half.empty:before,i.icon.star.half.full:before{content:"\f089"}i.icon.ticket:before{content:"\f3ff"}i.icon.times.rectangle:before{content:"\f410"}i.icon.write:before{content:"\f303"}i.icon.youtube.play:before{content:"\f167"}@font-face{font-family:outline-icons;src:url(themes/default/assets/fonts/outline-icons.eot);src:url(themes/default/assets/fonts/outline-icons.eot?#iefix) format("embedded-opentype"),url(themes/default/assets/fonts/outline-icons.woff2) format("woff2"),url(themes/default/assets/fonts/outline-icons.woff) format("woff"),url(themes/default/assets/fonts/outline-icons.ttf) format("truetype"),url(themes/default/assets/fonts/outline-icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon.outline{font-family:outline-icons}i.icon.address.book.outline:before{content:"\f2b9"}i.icon.address.card.outline:before{content:"\f2bb"}i.icon.arrow.alternate.circle.down.outline:before{content:"\f358"}i.icon.arrow.alternate.circle.left.outline:before{content:"\f359"}i.icon.arrow.alternate.circle.right.outline:before{content:"\f35a"}i.icon.arrow.alternate.circle.up.outline:before{content:"\f35b"}i.icon.bell.outline:before{content:"\f0f3"}i.icon.bell.slash.outline:before{content:"\f1f6"}i.icon.bookmark.outline:before{content:"\f02e"}i.icon.building.outline:before{content:"\f1ad"}i.icon.calendar.outline:before{content:"\f133"}i.icon.calendar.alternate.outline:before{content:"\f073"}i.icon.calendar.check.outline:before{content:"\f274"}i.icon.calendar.minus.outline:before{content:"\f272"}i.icon.calendar.plus.outline:before{content:"\f271"}i.icon.calendar.times.outline:before{content:"\f273"}i.icon.caret.square.down.outline:before{content:"\f150"}i.icon.caret.square.left.outline:before{content:"\f191"}i.icon.caret.square.right.outline:before{content:"\f152"}i.icon.caret.square.up.outline:before{content:"\f151"}i.icon.chart.bar.outline:before{content:"\f080"}i.icon.check.circle.outline:before{content:"\f058"}i.icon.check.square.outline:before{content:"\f14a"}i.icon.circle.outline:before{content:"\f111"}i.icon.clipboard.outline:before{content:"\f328"}i.icon.clock.outline:before{content:"\f017"}i.icon.clone.outline:before{content:"\f24d"}i.icon.closed.captioning.outline:before{content:"\f20a"}i.icon.comment.outline:before{content:"\f075"}i.icon.comment.alternate.outline:before{content:"\f27a"}i.icon.comments.outline:before{content:"\f086"}i.icon.compass.outline:before{content:"\f14e"}i.icon.copy.outline:before{content:"\f0c5"}i.icon.copyright.outline:before{content:"\f1f9"}i.icon.credit.card.outline:before{content:"\f09d"}i.icon.dot.circle.outline:before{content:"\f192"}i.icon.edit.outline:before{content:"\f044"}i.icon.envelope.outline:before{content:"\f0e0"}i.icon.envelope.open.outline:before{content:"\f2b6"}i.icon.eye.slash.outline:before{content:"\f070"}i.icon.file.outline:before{content:"\f15b"}i.icon.file.alternate.outline:before{content:"\f15c"}i.icon.file.archive.outline:before{content:"\f1c6"}i.icon.file.audio.outline:before{content:"\f1c7"}i.icon.file.code.outline:before{content:"\f1c9"}i.icon.file.excel.outline:before{content:"\f1c3"}i.icon.file.image.outline:before{content:"\f1c5"}i.icon.file.pdf.outline:before{content:"\f1c1"}i.icon.file.powerpoint.outline:before{content:"\f1c4"}i.icon.file.video.outline:before{content:"\f1c8"}i.icon.file.word.outline:before{content:"\f1c2"}i.icon.flag.outline:before{content:"\f024"}i.icon.folder.outline:before{content:"\f07b"}i.icon.folder.open.outline:before{content:"\f07c"}i.icon.frown.outline:before{content:"\f119"}i.icon.futbol.outline:before{content:"\f1e3"}i.icon.gem.outline:before{content:"\f3a5"}i.icon.hand.lizard.outline:before{content:"\f258"}i.icon.hand.paper.outline:before{content:"\f256"}i.icon.hand.peace.outline:before{content:"\f25b"}i.icon.hand.point.down.outline:before{content:"\f0a7"}i.icon.hand.point.left.outline:before{content:"\f0a5"}i.icon.hand.point.right.outline:before{content:"\f0a4"}i.icon.hand.point.up.outline:before{content:"\f0a6"}i.icon.hand.pointer.outline:before{content:"\f25a"}i.icon.hand.rock.outline:before{content:"\f255"}i.icon.hand.scissors.outline:before{content:"\f257"}i.icon.hand.spock.outline:before{content:"\f259"}i.icon.handshake.outline:before{content:"\f2b5"}i.icon.hdd.outline:before{content:"\f0a0"}i.icon.heart.outline:before{content:"\f004"}i.icon.hospital.outline:before{content:"\f0f8"}i.icon.hourglass.outline:before{content:"\f254"}i.icon.id.badge.outline:before{content:"\f2c1"}i.icon.id.card.outline:before{content:"\f2c2"}i.icon.image.outline:before{content:"\f03e"}i.icon.images.outline:before{content:"\f302"}i.icon.keyboard.outline:before{content:"\f11c"}i.icon.lemon.outline:before{content:"\f094"}i.icon.life.ring.outline:before{content:"\f1cd"}i.icon.lightbulb.outline:before{content:"\f0eb"}i.icon.list.alternate.outline:before{content:"\f022"}i.icon.map.outline:before{content:"\f279"}i.icon.meh.outline:before{content:"\f11a"}i.icon.minus.square.outline:before{content:"\f146"}i.icon.money.bill.alternate.outline:before{content:"\f3d1"}i.icon.moon.outline:before{content:"\f186"}i.icon.newspaper.outline:before{content:"\f1ea"}i.icon.object.group.outline:before{content:"\f247"}i.icon.object.ungroup.outline:before{content:"\f248"}i.icon.paper.plane.outline:before{content:"\f1d8"}i.icon.pause.circle.outline:before{content:"\f28b"}i.icon.play.circle.outline:before{content:"\f144"}i.icon.plus.square.outline:before{content:"\f0fe"}i.icon.question.circle.outline:before{content:"\f059"}i.icon.registered.outline:before{content:"\f25d"}i.icon.save.outline:before{content:"\f0c7"}i.icon.share.square.outline:before{content:"\f14d"}i.icon.smile.outline:before{content:"\f118"}i.icon.snowflake.outline:before{content:"\f2dc"}i.icon.square.outline:before{content:"\f0c8"}i.icon.star.outline:before{content:"\f005"}i.icon.star.half.outline:before{content:"\f089"}i.icon.sticky.note.outline:before{content:"\f249"}i.icon.stop.circle.outline:before{content:"\f28d"}i.icon.sun.outline:before{content:"\f185"}i.icon.thumbs.down.outline:before{content:"\f165"}i.icon.thumbs.up.outline:before{content:"\f164"}i.icon.times.circle.outline:before{content:"\f057"}i.icon.trash.alternate.outline:before{content:"\f2ed"}i.icon.user.outline:before{content:"\f007"}i.icon.user.circle.outline:before{content:"\f2bd"}i.icon.window.close.outline:before{content:"\f410"}i.icon.window.maximize.outline:before{content:"\f2d0"}i.icon.window.minimize.outline:before{content:"\f2d1"}i.icon.window.restore.outline:before{content:"\f2d2"}i.icon.disk.outline:before{content:"\f0a0"}i.icon.heart.empty,i.icon.star.empty{font-family:outline-icons}i.icon.heart.empty:before{content:"\f004"}i.icon.star.empty:before{content:"\f089"}@font-face{font-family:brand-icons;src:url(themes/default/assets/fonts/brand-icons.eot);src:url(themes/default/assets/fonts/brand-icons.eot?#iefix) format("embedded-opentype"),url(themes/default/assets/fonts/brand-icons.woff2) format("woff2"),url(themes/default/assets/fonts/brand-icons.woff) format("woff"),url(themes/default/assets/fonts/brand-icons.ttf) format("truetype"),url(themes/default/assets/fonts/brand-icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon.\35 00px,i.icon.accessible.icon,i.icon.accusoft,i.icon.adn,i.icon.adversal,i.icon.affiliatetheme,i.icon.algolia,i.icon.amazon,i.icon.amazon.pay,i.icon.amilia,i.icon.android,i.icon.angellist,i.icon.angrycreative,i.icon.angular,i.icon.app.store,i.icon.app.store.ios,i.icon.apper,i.icon.apple,i.icon.apple.pay,i.icon.asymmetrik,i.icon.audible,i.icon.autoprefixer,i.icon.avianex,i.icon.aviato,i.icon.aws,i.icon.bandcamp,i.icon.behance,i.icon.behance.square,i.icon.bimobject,i.icon.bitbucket,i.icon.bitcoin,i.icon.bity,i.icon.black.tie,i.icon.blackberry,i.icon.blogger,i.icon.blogger.b,i.icon.bluetooth,i.icon.bluetooth.b,i.icon.btc,i.icon.buromobelexperte,i.icon.buysellads,i.icon.cc.amazon.pay,i.icon.cc.amex,i.icon.cc.apple.pay,i.icon.cc.diners.club,i.icon.cc.discover,i.icon.cc.jcb,i.icon.cc.mastercard,i.icon.cc.paypal,i.icon.cc.stripe,i.icon.cc.visa,i.icon.centercode,i.icon.chrome,i.icon.cloudscale,i.icon.cloudsmith,i.icon.cloudversify,i.icon.codepen,i.icon.codiepie,i.icon.connectdevelop,i.icon.contao,i.icon.cpanel,i.icon.creative.commons,i.icon.css3,i.icon.css3.alternate,i.icon.cuttlefish,i.icon.d.and.d,i.icon.dashcube,i.icon.delicious,i.icon.deploydog,i.icon.deskpro,i.icon.deviantart,i.icon.digg,i.icon.digital.ocean,i.icon.discord,i.icon.discourse,i.icon.dochub,i.icon.docker,i.icon.draft2digital,i.icon.dribbble,i.icon.dribbble.square,i.icon.dropbox,i.icon.drupal,i.icon.dyalog,i.icon.earlybirds,i.icon.edge,i.icon.elementor,i.icon.ember,i.icon.empire,i.icon.envira,i.icon.erlang,i.icon.ethereum,i.icon.etsy,i.icon.expeditedssl,i.icon.facebook,i.icon.facebook.f,i.icon.facebook.messenger,i.icon.facebook.square,i.icon.firefox,i.icon.first.order,i.icon.firstdraft,i.icon.flickr,i.icon.flipboard,i.icon.fly,i.icon.font.awesome,i.icon.font.awesome.alternate,i.icon.font.awesome.flag,i.icon.fonticons,i.icon.fonticons.fi,i.icon.fort.awesome,i.icon.fort.awesome.alternate,i.icon.forumbee,i.icon.foursquare,i.icon.free.code.camp,i.icon.freebsd,i.icon.get.pocket,i.icon.gg,i.icon.gg.circle,i.icon.git,i.icon.git.square,i.icon.github,i.icon.github.alternate,i.icon.github.square,i.icon.gitkraken,i.icon.gitlab,i.icon.gitter,i.icon.glide,i.icon.glide.g,i.icon.gofore,i.icon.goodreads,i.icon.goodreads.g,i.icon.google,i.icon.google.drive,i.icon.google.play,i.icon.google.plus,i.icon.google.plus.g,i.icon.google.plus.square,i.icon.google.wallet,i.icon.gratipay,i.icon.grav,i.icon.gripfire,i.icon.grunt,i.icon.gulp,i.icon.hacker.news,i.icon.hacker.news.square,i.icon.hips,i.icon.hire.a.helper,i.icon.hooli,i.icon.hotjar,i.icon.houzz,i.icon.html5,i.icon.hubspot,i.icon.imdb,i.icon.instagram,i.icon.internet.explorer,i.icon.ioxhost,i.icon.itunes,i.icon.itunes.note,i.icon.jenkins,i.icon.joget,i.icon.joomla,i.icon.js,i.icon.js.square,i.icon.jsfiddle,i.icon.keycdn,i.icon.kickstarter,i.icon.kickstarter.k,i.icon.korvue,i.icon.laravel,i.icon.lastfm,i.icon.lastfm.square,i.icon.leanpub,i.icon.less,i.icon.linechat,i.icon.linkedin,i.icon.linkedin.alternate,i.icon.linkedin.in,i.icon.linode,i.icon.linux,i.icon.lyft,i.icon.magento,i.icon.maxcdn,i.icon.medapps,i.icon.medium,i.icon.medium.m,i.icon.medrt,i.icon.meetup,i.icon.microsoft,i.icon.mix,i.icon.mixcloud,i.icon.mizuni,i.icon.modx,i.icon.monero,i.icon.napster,i.icon.nintendo.switch,i.icon.node,i.icon.node.js,i.icon.npm,i.icon.ns8,i.icon.nutritionix,i.icon.odnoklassniki,i.icon.odnoklassniki.square,i.icon.opencart,i.icon.openid,i.icon.opera,i.icon.optin.monster,i.icon.osi,i.icon.page4,i.icon.pagelines,i.icon.palfed,i.icon.patreon,i.icon.paypal,i.icon.periscope,i.icon.phabricator,i.icon.phoenix.framework,i.icon.php,i.icon.pied.piper,i.icon.pied.piper.alternate,i.icon.pied.piper.pp,i.icon.pinterest,i.icon.pinterest.p,i.icon.pinterest.square,i.icon.playstation,i.icon.product.hunt,i.icon.pushed,i.icon.python,i.icon.qq,i.icon.quinscape,i.icon.quora,i.icon.ravelry,i.icon.react,i.icon.rebel,i.icon.reddit,i.icon.reddit.alien,i.icon.reddit.square,i.icon.redriver,i.icon.rendact,i.icon.renren,i.icon.replyd,i.icon.resolving,i.icon.rocketchat,i.icon.rockrms,i.icon.safari,i.icon.sass,i.icon.schlix,i.icon.scribd,i.icon.searchengin,i.icon.sellcast,i.icon.sellsy,i.icon.servicestack,i.icon.shirtsinbulk,i.icon.simplybuilt,i.icon.sistrix,i.icon.skyatlas,i.icon.skype,i.icon.slack,i.icon.slack.hash,i.icon.slideshare,i.icon.snapchat,i.icon.snapchat.ghost,i.icon.snapchat.square,i.icon.soundcloud,i.icon.speakap,i.icon.spotify,i.icon.stack.exchange,i.icon.stack.overflow,i.icon.staylinked,i.icon.steam,i.icon.steam.square,i.icon.steam.symbol,i.icon.sticker.mule,i.icon.strava,i.icon.stripe,i.icon.stripe.s,i.icon.studiovinari,i.icon.stumbleupon,i.icon.stumbleupon.circle,i.icon.superpowers,i.icon.supple,i.icon.telegram,i.icon.telegram.plane,i.icon.tencent.weibo,i.icon.themeisle,i.icon.trello,i.icon.tripadvisor,i.icon.tumblr,i.icon.tumblr.square,i.icon.twitch,i.icon.twitter,i.icon.twitter.square,i.icon.typo3,i.icon.uber,i.icon.uikit,i.icon.uniregistry,i.icon.untappd,i.icon.usb,i.icon.ussunnah,i.icon.vaadin,i.icon.viacoin,i.icon.viadeo,i.icon.viadeo.square,i.icon.viber,i.icon.vimeo,i.icon.vimeo.square,i.icon.vimeo.v,i.icon.vine,i.icon.vk,i.icon.vnv,i.icon.vuejs,i.icon.wechat,i.icon.weibo,i.icon.weixin,i.icon.whatsapp,i.icon.whatsapp.square,i.icon.whmcs,i.icon.wikipedia.w,i.icon.windows,i.icon.wordpress,i.icon.wordpress.simple,i.icon.wpbeginner,i.icon.wpexplorer,i.icon.wpforms,i.icon.xbox,i.icon.xing,i.icon.xing.square,i.icon.y.combinator,i.icon.yahoo,i.icon.yandex,i.icon.yandex.international,i.icon.yelp,i.icon.yoast,i.icon.youtube,i.icon.youtube.square{font-family:brand-icons} + */@font-face{font-family:Icons;src:url(themes/default/assets/fonts/icons.eot);src:url(themes/default/assets/fonts/icons.eot?#iefix) format("embedded-opentype"),url(themes/default/assets/fonts/icons.woff2) format("woff2"),url(themes/default/assets/fonts/icons.woff) format("woff"),url(themes/default/assets/fonts/icons.ttf) format("truetype"),url(themes/default/assets/fonts/icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon{display:inline-block;opacity:1;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:400;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.icon:before{background:none!important}i.icon.loading{height:1em;line-height:1;-webkit-animation:icon-loading 2s linear infinite;animation:icon-loading 2s linear infinite}@-webkit-keyframes icon-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes icon-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}i.emphasized.icon,i.icon.active,i.icon.hover{opacity:1!important}i.disabled.icon{opacity:.45!important}i.fitted.icon{width:auto;margin:0!important}i.link.icon,i.link.icons{cursor:pointer;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}i.link.icon:hover,i.link.icons:hover{opacity:1!important}i.circular.icon{border-radius:500em!important;line-height:1!important;padding:.5em 0!important;-webkit-box-shadow:inset 0 0 0 .1em rgba(0,0,0,.1);box-shadow:inset 0 0 0 .1em rgba(0,0,0,.1);width:2em!important;height:2em!important}i.circular.inverted.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.flipped.icon,i.horizontally.flipped.icon{-webkit-transform:scaleX(-1);transform:scaleX(-1)}i.vertically.flipped.icon{-webkit-transform:scaleY(-1);transform:scaleY(-1)}i.clockwise.rotated.icon,i.right.rotated.icon,i.rotated.icon{-webkit-transform:rotate(90deg);transform:rotate(90deg)}i.counterclockwise.rotated.icon,i.left.rotated.icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}i.bordered.icon{line-height:1;vertical-align:baseline;width:2em;height:2em;padding:.5em 0!important;-webkit-box-shadow:inset 0 0 0 .1em rgba(0,0,0,.1);box-shadow:inset 0 0 0 .1em rgba(0,0,0,.1)}i.bordered.inverted.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.inverted.bordered.icon,i.inverted.circular.icon{background-color:#1b1c1d!important;color:#fff!important}i.inverted.icon{color:#fff}i.red.icon{color:#db2828!important}i.inverted.red.icon{color:#ff695e!important}i.inverted.bordered.red.icon,i.inverted.circular.red.icon{background-color:#db2828!important;color:#fff!important}i.orange.icon{color:#f2711c!important}i.inverted.orange.icon{color:#ff851b!important}i.inverted.bordered.orange.icon,i.inverted.circular.orange.icon{background-color:#f2711c!important;color:#fff!important}i.yellow.icon{color:#fbbd08!important}i.inverted.yellow.icon{color:#ffe21f!important}i.inverted.bordered.yellow.icon,i.inverted.circular.yellow.icon{background-color:#fbbd08!important;color:#fff!important}i.olive.icon{color:#b5cc18!important}i.inverted.olive.icon{color:#d9e778!important}i.inverted.bordered.olive.icon,i.inverted.circular.olive.icon{background-color:#b5cc18!important;color:#fff!important}i.green.icon{color:#21ba45!important}i.inverted.green.icon{color:#2ecc40!important}i.inverted.bordered.green.icon,i.inverted.circular.green.icon{background-color:#21ba45!important;color:#fff!important}i.teal.icon{color:#00b5ad!important}i.inverted.teal.icon{color:#6dffff!important}i.inverted.bordered.teal.icon,i.inverted.circular.teal.icon{background-color:#00b5ad!important;color:#fff!important}i.blue.icon{color:#2185d0!important}i.inverted.blue.icon{color:#54c8ff!important}i.inverted.bordered.blue.icon,i.inverted.circular.blue.icon{background-color:#2185d0!important;color:#fff!important}i.violet.icon{color:#6435c9!important}i.inverted.violet.icon{color:#a291fb!important}i.inverted.bordered.violet.icon,i.inverted.circular.violet.icon{background-color:#6435c9!important;color:#fff!important}i.purple.icon{color:#a333c8!important}i.inverted.purple.icon{color:#dc73ff!important}i.inverted.bordered.purple.icon,i.inverted.circular.purple.icon{background-color:#a333c8!important;color:#fff!important}i.pink.icon{color:#e03997!important}i.inverted.pink.icon{color:#ff8edf!important}i.inverted.bordered.pink.icon,i.inverted.circular.pink.icon{background-color:#e03997!important;color:#fff!important}i.brown.icon{color:#a5673f!important}i.inverted.brown.icon{color:#d67c1c!important}i.inverted.bordered.brown.icon,i.inverted.circular.brown.icon{background-color:#a5673f!important;color:#fff!important}i.grey.icon{color:#767676!important}i.inverted.grey.icon{color:#dcddde!important}i.inverted.bordered.grey.icon,i.inverted.circular.grey.icon{background-color:#767676!important;color:#fff!important}i.black.icon{color:#1b1c1d!important}i.inverted.black.icon{color:#545454!important}i.inverted.bordered.black.icon,i.inverted.circular.black.icon{background-color:#1b1c1d!important;color:#fff!important}i.mini.icon,i.mini.icons{line-height:1;font-size:.4em}i.tiny.icon,i.tiny.icons{line-height:1;font-size:.5em}i.small.icon,i.small.icons{line-height:1;font-size:.75em}i.icon,i.icons{font-size:1em}i.large.icon,i.large.icons{line-height:1;vertical-align:middle;font-size:1.5em}i.big.icon,i.big.icons{line-height:1;vertical-align:middle;font-size:2em}i.huge.icon,i.huge.icons{line-height:1;vertical-align:middle;font-size:4em}i.massive.icon,i.massive.icons{line-height:1;vertical-align:middle;font-size:8em}i.icons{display:inline-block;position:relative;line-height:1}i.icons .icon{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);margin:0}i.icons .icon:first-child{position:static;width:auto;height:auto;vertical-align:top;-webkit-transform:none;transform:none;margin-right:.25rem}i.icons .corner.icon{top:auto;left:auto;right:0;bottom:0;-webkit-transform:none;transform:none;font-size:.45em;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}i.icons .top.right.corner.icon{top:0;left:auto;right:0;bottom:auto}i.icons .top.left.corner.icon{top:0;left:0;right:auto;bottom:auto}i.icons .bottom.left.corner.icon{top:auto;left:0;right:auto;bottom:0}i.icons .bottom.right.corner.icon{top:auto;left:auto;right:0;bottom:0}i.icons .inverted.corner.icon{text-shadow:-1px -1px 0 #1b1c1d,1px -1px 0 #1b1c1d,-1px 1px 0 #1b1c1d,1px 1px 0 #1b1c1d}i.icon.linkedin.in:before{content:"\f0e1"}i.icon.zoom.in:before{content:"\f00e"}i.icon.zoom.out:before{content:"\f010"}i.icon.sign.in:before{content:"\f2f6"}i.icon.in.cart:before{content:"\f218"}i.icon.log.out:before,i.icon.sign.out:before{content:"\f2f5"}i.icon.\35 00px:before{content:"\f26e"}i.icon.accessible.icon:before{content:"\f368"}i.icon.accusoft:before{content:"\f369"}i.icon.address.book:before{content:"\f2b9"}i.icon.address.card:before{content:"\f2bb"}i.icon.adjust:before{content:"\f042"}i.icon.adn:before{content:"\f170"}i.icon.adversal:before{content:"\f36a"}i.icon.affiliatetheme:before{content:"\f36b"}i.icon.algolia:before{content:"\f36c"}i.icon.align.center:before{content:"\f037"}i.icon.align.justify:before{content:"\f039"}i.icon.align.left:before{content:"\f036"}i.icon.align.right:before{content:"\f038"}i.icon.amazon:before{content:"\f270"}i.icon.amazon.pay:before{content:"\f42c"}i.icon.ambulance:before{content:"\f0f9"}i.icon.american.sign.language.interpreting:before{content:"\f2a3"}i.icon.amilia:before{content:"\f36d"}i.icon.anchor:before{content:"\f13d"}i.icon.android:before{content:"\f17b"}i.icon.angellist:before{content:"\f209"}i.icon.angle.double.down:before{content:"\f103"}i.icon.angle.double.left:before{content:"\f100"}i.icon.angle.double.right:before{content:"\f101"}i.icon.angle.double.up:before{content:"\f102"}i.icon.angle.down:before{content:"\f107"}i.icon.angle.left:before{content:"\f104"}i.icon.angle.right:before{content:"\f105"}i.icon.angle.up:before{content:"\f106"}i.icon.angrycreative:before{content:"\f36e"}i.icon.angular:before{content:"\f420"}i.icon.app.store:before{content:"\f36f"}i.icon.app.store.ios:before{content:"\f370"}i.icon.apper:before{content:"\f371"}i.icon.apple:before{content:"\f179"}i.icon.apple.pay:before{content:"\f415"}i.icon.archive:before{content:"\f187"}i.icon.arrow.alternate.circle.down:before{content:"\f358"}i.icon.arrow.alternate.circle.left:before{content:"\f359"}i.icon.arrow.alternate.circle.right:before{content:"\f35a"}i.icon.arrow.alternate.circle.up:before{content:"\f35b"}i.icon.arrow.circle.down:before{content:"\f0ab"}i.icon.arrow.circle.left:before{content:"\f0a8"}i.icon.arrow.circle.right:before{content:"\f0a9"}i.icon.arrow.circle.up:before{content:"\f0aa"}i.icon.arrow.down:before{content:"\f063"}i.icon.arrow.left:before{content:"\f060"}i.icon.arrow.right:before{content:"\f061"}i.icon.arrow.up:before{content:"\f062"}i.icon.arrows.alternate:before{content:"\f0b2"}i.icon.arrows.alternate.horizontal:before{content:"\f337"}i.icon.arrows.alternate.vertical:before{content:"\f338"}i.icon.assistive.listening.systems:before{content:"\f2a2"}i.icon.asterisk:before{content:"\f069"}i.icon.asymmetrik:before{content:"\f372"}i.icon.at:before{content:"\f1fa"}i.icon.audible:before{content:"\f373"}i.icon.audio.description:before{content:"\f29e"}i.icon.autoprefixer:before{content:"\f41c"}i.icon.avianex:before{content:"\f374"}i.icon.aviato:before{content:"\f421"}i.icon.aws:before{content:"\f375"}i.icon.backward:before{content:"\f04a"}i.icon.balance.scale:before{content:"\f24e"}i.icon.ban:before{content:"\f05e"}i.icon.band.aid:before{content:"\f462"}i.icon.bandcamp:before{content:"\f2d5"}i.icon.barcode:before{content:"\f02a"}i.icon.bars:before{content:"\f0c9"}i.icon.baseball.ball:before{content:"\f433"}i.icon.basketball.ball:before{content:"\f434"}i.icon.bath:before{content:"\f2cd"}i.icon.battery.empty:before{content:"\f244"}i.icon.battery.full:before{content:"\f240"}i.icon.battery.half:before{content:"\f242"}i.icon.battery.quarter:before{content:"\f243"}i.icon.battery.three.quarters:before{content:"\f241"}i.icon.bed:before{content:"\f236"}i.icon.beer:before{content:"\f0fc"}i.icon.behance:before{content:"\f1b4"}i.icon.behance.square:before{content:"\f1b5"}i.icon.bell:before{content:"\f0f3"}i.icon.bell.slash:before{content:"\f1f6"}i.icon.bicycle:before{content:"\f206"}i.icon.bimobject:before{content:"\f378"}i.icon.binoculars:before{content:"\f1e5"}i.icon.birthday.cake:before{content:"\f1fd"}i.icon.bitbucket:before{content:"\f171"}i.icon.bitcoin:before{content:"\f379"}i.icon.bity:before{content:"\f37a"}i.icon.black.tie:before{content:"\f27e"}i.icon.blackberry:before{content:"\f37b"}i.icon.blind:before{content:"\f29d"}i.icon.blogger:before{content:"\f37c"}i.icon.blogger.b:before{content:"\f37d"}i.icon.bluetooth:before{content:"\f293"}i.icon.bluetooth.b:before{content:"\f294"}i.icon.bold:before{content:"\f032"}i.icon.bolt:before{content:"\f0e7"}i.icon.bomb:before{content:"\f1e2"}i.icon.book:before{content:"\f02d"}i.icon.bookmark:before{content:"\f02e"}i.icon.bowling.ball:before{content:"\f436"}i.icon.box:before{content:"\f466"}i.icon.boxes:before{content:"\f468"}i.icon.braille:before{content:"\f2a1"}i.icon.briefcase:before{content:"\f0b1"}i.icon.btc:before{content:"\f15a"}i.icon.bug:before{content:"\f188"}i.icon.building:before{content:"\f1ad"}i.icon.bullhorn:before{content:"\f0a1"}i.icon.bullseye:before{content:"\f140"}i.icon.buromobelexperte:before{content:"\f37f"}i.icon.bus:before{content:"\f207"}i.icon.buysellads:before{content:"\f20d"}i.icon.calculator:before{content:"\f1ec"}i.icon.calendar:before{content:"\f133"}i.icon.calendar.alternate:before{content:"\f073"}i.icon.calendar.check:before{content:"\f274"}i.icon.calendar.minus:before{content:"\f272"}i.icon.calendar.plus:before{content:"\f271"}i.icon.calendar.times:before{content:"\f273"}i.icon.camera:before{content:"\f030"}i.icon.camera.retro:before{content:"\f083"}i.icon.car:before{content:"\f1b9"}i.icon.caret.down:before{content:"\f0d7"}i.icon.caret.left:before{content:"\f0d9"}i.icon.caret.right:before{content:"\f0da"}i.icon.caret.square.down:before{content:"\f150"}i.icon.caret.square.left:before{content:"\f191"}i.icon.caret.square.right:before{content:"\f152"}i.icon.caret.square.up:before{content:"\f151"}i.icon.caret.up:before{content:"\f0d8"}i.icon.cart.arrow.down:before{content:"\f218"}i.icon.cart.plus:before{content:"\f217"}i.icon.cc.amazon.pay:before{content:"\f42d"}i.icon.cc.amex:before{content:"\f1f3"}i.icon.cc.apple.pay:before{content:"\f416"}i.icon.cc.diners.club:before{content:"\f24c"}i.icon.cc.discover:before{content:"\f1f2"}i.icon.cc.jcb:before{content:"\f24b"}i.icon.cc.mastercard:before{content:"\f1f1"}i.icon.cc.paypal:before{content:"\f1f4"}i.icon.cc.stripe:before{content:"\f1f5"}i.icon.cc.visa:before{content:"\f1f0"}i.icon.centercode:before{content:"\f380"}i.icon.certificate:before{content:"\f0a3"}i.icon.chart.area:before{content:"\f1fe"}i.icon.chart.bar:before{content:"\f080"}i.icon.chart.line:before{content:"\f201"}i.icon.chart.pie:before{content:"\f200"}i.icon.check:before{content:"\f00c"}i.icon.check.circle:before{content:"\f058"}i.icon.check.square:before{content:"\f14a"}i.icon.chess:before{content:"\f439"}i.icon.chess.bishop:before{content:"\f43a"}i.icon.chess.board:before{content:"\f43c"}i.icon.chess.king:before{content:"\f43f"}i.icon.chess.knight:before{content:"\f441"}i.icon.chess.pawn:before{content:"\f443"}i.icon.chess.queen:before{content:"\f445"}i.icon.chess.rook:before{content:"\f447"}i.icon.chevron.circle.down:before{content:"\f13a"}i.icon.chevron.circle.left:before{content:"\f137"}i.icon.chevron.circle.right:before{content:"\f138"}i.icon.chevron.circle.up:before{content:"\f139"}i.icon.chevron.down:before{content:"\f078"}i.icon.chevron.left:before{content:"\f053"}i.icon.chevron.right:before{content:"\f054"}i.icon.chevron.up:before{content:"\f077"}i.icon.child:before{content:"\f1ae"}i.icon.chrome:before{content:"\f268"}i.icon.circle:before{content:"\f111"}i.icon.circle.notch:before{content:"\f1ce"}i.icon.clipboard:before{content:"\f328"}i.icon.clipboard.check:before{content:"\f46c"}i.icon.clipboard.list:before{content:"\f46d"}i.icon.clock:before{content:"\f017"}i.icon.clone:before{content:"\f24d"}i.icon.closed.captioning:before{content:"\f20a"}i.icon.cloud:before{content:"\f0c2"}i.icon.cloudscale:before{content:"\f383"}i.icon.cloudsmith:before{content:"\f384"}i.icon.cloudversify:before{content:"\f385"}i.icon.code:before{content:"\f121"}i.icon.code.branch:before{content:"\f126"}i.icon.codepen:before{content:"\f1cb"}i.icon.codiepie:before{content:"\f284"}i.icon.coffee:before{content:"\f0f4"}i.icon.cog:before{content:"\f013"}i.icon.cogs:before{content:"\f085"}i.icon.columns:before{content:"\f0db"}i.icon.comment:before{content:"\f075"}i.icon.comment.alternate:before{content:"\f27a"}i.icon.comments:before{content:"\f086"}i.icon.compass:before{content:"\f14e"}i.icon.compress:before{content:"\f066"}i.icon.connectdevelop:before{content:"\f20e"}i.icon.contao:before{content:"\f26d"}i.icon.copy:before{content:"\f0c5"}i.icon.copyright:before{content:"\f1f9"}i.icon.cpanel:before{content:"\f388"}i.icon.creative.commons:before{content:"\f25e"}i.icon.credit.card:before{content:"\f09d"}i.icon.crop:before{content:"\f125"}i.icon.crosshairs:before{content:"\f05b"}i.icon.css3:before{content:"\f13c"}i.icon.css3.alternate:before{content:"\f38b"}i.icon.cube:before{content:"\f1b2"}i.icon.cubes:before{content:"\f1b3"}i.icon.cut:before{content:"\f0c4"}i.icon.cuttlefish:before{content:"\f38c"}i.icon.d.and.d:before{content:"\f38d"}i.icon.dashcube:before{content:"\f210"}i.icon.database:before{content:"\f1c0"}i.icon.deaf:before{content:"\f2a4"}i.icon.delicious:before{content:"\f1a5"}i.icon.deploydog:before{content:"\f38e"}i.icon.deskpro:before{content:"\f38f"}i.icon.desktop:before{content:"\f108"}i.icon.deviantart:before{content:"\f1bd"}i.icon.digg:before{content:"\f1a6"}i.icon.digital.ocean:before{content:"\f391"}i.icon.discord:before{content:"\f392"}i.icon.discourse:before{content:"\f393"}i.icon.dna:before{content:"\f471"}i.icon.dochub:before{content:"\f394"}i.icon.docker:before{content:"\f395"}i.icon.dollar.sign:before{content:"\f155"}i.icon.dolly:before{content:"\f472"}i.icon.dolly.flatbed:before{content:"\f474"}i.icon.dot.circle:before{content:"\f192"}i.icon.download:before{content:"\f019"}i.icon.draft2digital:before{content:"\f396"}i.icon.dribbble:before{content:"\f17d"}i.icon.dribbble.square:before{content:"\f397"}i.icon.dropbox:before{content:"\f16b"}i.icon.drupal:before{content:"\f1a9"}i.icon.dyalog:before{content:"\f399"}i.icon.earlybirds:before{content:"\f39a"}i.icon.edge:before{content:"\f282"}i.icon.edit:before{content:"\f044"}i.icon.eject:before{content:"\f052"}i.icon.elementor:before{content:"\f430"}i.icon.ellipsis.horizontal:before{content:"\f141"}i.icon.ellipsis.vertical:before{content:"\f142"}i.icon.ember:before{content:"\f423"}i.icon.empire:before{content:"\f1d1"}i.icon.envelope:before{content:"\f0e0"}i.icon.envelope.open:before{content:"\f2b6"}i.icon.envelope.square:before{content:"\f199"}i.icon.envira:before{content:"\f299"}i.icon.eraser:before{content:"\f12d"}i.icon.erlang:before{content:"\f39d"}i.icon.ethereum:before{content:"\f42e"}i.icon.etsy:before{content:"\f2d7"}i.icon.euro.sign:before{content:"\f153"}i.icon.exchange.alternate:before{content:"\f362"}i.icon.exclamation:before{content:"\f12a"}i.icon.exclamation.circle:before{content:"\f06a"}i.icon.exclamation.triangle:before{content:"\f071"}i.icon.expand:before{content:"\f065"}i.icon.expand.arrows.alternate:before{content:"\f31e"}i.icon.expeditedssl:before{content:"\f23e"}i.icon.external.alternate:before{content:"\f35d"}i.icon.external.square.alternate:before{content:"\f360"}i.icon.eye:before{content:"\f06e"}i.icon.eye.dropper:before{content:"\f1fb"}i.icon.eye.slash:before{content:"\f070"}i.icon.facebook:before{content:"\f09a"}i.icon.facebook.f:before{content:"\f39e"}i.icon.facebook.messenger:before{content:"\f39f"}i.icon.facebook.square:before{content:"\f082"}i.icon.fast.backward:before{content:"\f049"}i.icon.fast.forward:before{content:"\f050"}i.icon.fax:before{content:"\f1ac"}i.icon.female:before{content:"\f182"}i.icon.fighter.jet:before{content:"\f0fb"}i.icon.file:before{content:"\f15b"}i.icon.file.alternate:before{content:"\f15c"}i.icon.file.archive:before{content:"\f1c6"}i.icon.file.audio:before{content:"\f1c7"}i.icon.file.code:before{content:"\f1c9"}i.icon.file.excel:before{content:"\f1c3"}i.icon.file.image:before{content:"\f1c5"}i.icon.file.pdf:before{content:"\f1c1"}i.icon.file.powerpoint:before{content:"\f1c4"}i.icon.file.video:before{content:"\f1c8"}i.icon.file.word:before{content:"\f1c2"}i.icon.film:before{content:"\f008"}i.icon.filter:before{content:"\f0b0"}i.icon.fire:before{content:"\f06d"}i.icon.fire.extinguisher:before{content:"\f134"}i.icon.firefox:before{content:"\f269"}i.icon.first.aid:before{content:"\f479"}i.icon.first.order:before{content:"\f2b0"}i.icon.firstdraft:before{content:"\f3a1"}i.icon.flag:before{content:"\f024"}i.icon.flag.checkered:before{content:"\f11e"}i.icon.flask:before{content:"\f0c3"}i.icon.flickr:before{content:"\f16e"}i.icon.flipboard:before{content:"\f44d"}i.icon.fly:before{content:"\f417"}i.icon.folder:before{content:"\f07b"}i.icon.folder.open:before{content:"\f07c"}i.icon.font:before{content:"\f031"}i.icon.font.awesome:before{content:"\f2b4"}i.icon.font.awesome.alternate:before{content:"\f35c"}i.icon.font.awesome.flag:before{content:"\f425"}i.icon.fonticons:before{content:"\f280"}i.icon.fonticons.fi:before{content:"\f3a2"}i.icon.football.ball:before{content:"\f44e"}i.icon.fort.awesome:before{content:"\f286"}i.icon.fort.awesome.alternate:before{content:"\f3a3"}i.icon.forumbee:before{content:"\f211"}i.icon.forward:before{content:"\f04e"}i.icon.foursquare:before{content:"\f180"}i.icon.free.code.camp:before{content:"\f2c5"}i.icon.freebsd:before{content:"\f3a4"}i.icon.frown:before{content:"\f119"}i.icon.futbol:before{content:"\f1e3"}i.icon.gamepad:before{content:"\f11b"}i.icon.gavel:before{content:"\f0e3"}i.icon.gem:before{content:"\f3a5"}i.icon.genderless:before{content:"\f22d"}i.icon.get.pocket:before{content:"\f265"}i.icon.gg:before{content:"\f260"}i.icon.gg.circle:before{content:"\f261"}i.icon.gift:before{content:"\f06b"}i.icon.git:before{content:"\f1d3"}i.icon.git.square:before{content:"\f1d2"}i.icon.github:before{content:"\f09b"}i.icon.github.alternate:before{content:"\f113"}i.icon.github.square:before{content:"\f092"}i.icon.gitkraken:before{content:"\f3a6"}i.icon.gitlab:before{content:"\f296"}i.icon.gitter:before{content:"\f426"}i.icon.glass.martini:before{content:"\f000"}i.icon.glide:before{content:"\f2a5"}i.icon.glide.g:before{content:"\f2a6"}i.icon.globe:before{content:"\f0ac"}i.icon.gofore:before{content:"\f3a7"}i.icon.golf.ball:before{content:"\f450"}i.icon.goodreads:before{content:"\f3a8"}i.icon.goodreads.g:before{content:"\f3a9"}i.icon.google:before{content:"\f1a0"}i.icon.google.drive:before{content:"\f3aa"}i.icon.google.play:before{content:"\f3ab"}i.icon.google.plus:before{content:"\f2b3"}i.icon.google.plus.g:before{content:"\f0d5"}i.icon.google.plus.square:before{content:"\f0d4"}i.icon.google.wallet:before{content:"\f1ee"}i.icon.graduation.cap:before{content:"\f19d"}i.icon.gratipay:before{content:"\f184"}i.icon.grav:before{content:"\f2d6"}i.icon.gripfire:before{content:"\f3ac"}i.icon.grunt:before{content:"\f3ad"}i.icon.gulp:before{content:"\f3ae"}i.icon.h.square:before{content:"\f0fd"}i.icon.hacker.news:before{content:"\f1d4"}i.icon.hacker.news.square:before{content:"\f3af"}i.icon.hand.lizard:before{content:"\f258"}i.icon.hand.paper:before{content:"\f256"}i.icon.hand.peace:before{content:"\f25b"}i.icon.hand.point.down:before{content:"\f0a7"}i.icon.hand.point.left:before{content:"\f0a5"}i.icon.hand.point.right:before{content:"\f0a4"}i.icon.hand.point.up:before{content:"\f0a6"}i.icon.hand.pointer:before{content:"\f25a"}i.icon.hand.rock:before{content:"\f255"}i.icon.hand.scissors:before{content:"\f257"}i.icon.hand.spock:before{content:"\f259"}i.icon.handshake:before{content:"\f2b5"}i.icon.hashtag:before{content:"\f292"}i.icon.hdd:before{content:"\f0a0"}i.icon.heading:before{content:"\f1dc"}i.icon.headphones:before{content:"\f025"}i.icon.heart:before{content:"\f004"}i.icon.heartbeat:before{content:"\f21e"}i.icon.hips:before{content:"\f452"}i.icon.hire.a.helper:before{content:"\f3b0"}i.icon.history:before{content:"\f1da"}i.icon.hockey.puck:before{content:"\f453"}i.icon.home:before{content:"\f015"}i.icon.hooli:before{content:"\f427"}i.icon.hospital:before{content:"\f0f8"}i.icon.hospital.symbol:before{content:"\f47e"}i.icon.hotjar:before{content:"\f3b1"}i.icon.hourglass:before{content:"\f254"}i.icon.hourglass.end:before{content:"\f253"}i.icon.hourglass.half:before{content:"\f252"}i.icon.hourglass.start:before{content:"\f251"}i.icon.houzz:before{content:"\f27c"}i.icon.html5:before{content:"\f13b"}i.icon.hubspot:before{content:"\f3b2"}i.icon.i.cursor:before{content:"\f246"}i.icon.id.badge:before{content:"\f2c1"}i.icon.id.card:before{content:"\f2c2"}i.icon.image:before{content:"\f03e"}i.icon.images:before{content:"\f302"}i.icon.imdb:before{content:"\f2d8"}i.icon.inbox:before{content:"\f01c"}i.icon.indent:before{content:"\f03c"}i.icon.industry:before{content:"\f275"}i.icon.info:before{content:"\f129"}i.icon.info.circle:before{content:"\f05a"}i.icon.instagram:before{content:"\f16d"}i.icon.internet.explorer:before{content:"\f26b"}i.icon.ioxhost:before{content:"\f208"}i.icon.italic:before{content:"\f033"}i.icon.itunes:before{content:"\f3b4"}i.icon.itunes.note:before{content:"\f3b5"}i.icon.jenkins:before{content:"\f3b6"}i.icon.joget:before{content:"\f3b7"}i.icon.joomla:before{content:"\f1aa"}i.icon.js:before{content:"\f3b8"}i.icon.js.square:before{content:"\f3b9"}i.icon.jsfiddle:before{content:"\f1cc"}i.icon.key:before{content:"\f084"}i.icon.keyboard:before{content:"\f11c"}i.icon.keycdn:before{content:"\f3ba"}i.icon.kickstarter:before{content:"\f3bb"}i.icon.kickstarter.k:before{content:"\f3bc"}i.icon.korvue:before{content:"\f42f"}i.icon.language:before{content:"\f1ab"}i.icon.laptop:before{content:"\f109"}i.icon.laravel:before{content:"\f3bd"}i.icon.lastfm:before{content:"\f202"}i.icon.lastfm.square:before{content:"\f203"}i.icon.leaf:before{content:"\f06c"}i.icon.leanpub:before{content:"\f212"}i.icon.lemon:before{content:"\f094"}i.icon.less:before{content:"\f41d"}i.icon.level.down.alternate:before{content:"\f3be"}i.icon.level.up.alternate:before{content:"\f3bf"}i.icon.life.ring:before{content:"\f1cd"}i.icon.lightbulb:before{content:"\f0eb"}i.icon.linechat:before{content:"\f3c0"}i.icon.linkedin:before{content:"\f08c"}i.icon.linkedin.alt:before{content:"\f0e1"}i.icon.linode:before{content:"\f2b8"}i.icon.linux:before{content:"\f17c"}i.icon.lira.sign:before{content:"\f195"}i.icon.list:before{content:"\f03a"}i.icon.list.alternate:before{content:"\f022"}i.icon.list.ol:before{content:"\f0cb"}i.icon.list.ul:before{content:"\f0ca"}i.icon.location.arrow:before{content:"\f124"}i.icon.lock:before{content:"\f023"}i.icon.lock.open:before{content:"\f3c1"}i.icon.long.arrow.alternate.down:before{content:"\f309"}i.icon.long.arrow.alternate.left:before{content:"\f30a"}i.icon.long.arrow.alternate.right:before{content:"\f30b"}i.icon.long.arrow.alternate.up:before{content:"\f30c"}i.icon.low.vision:before{content:"\f2a8"}i.icon.lyft:before{content:"\f3c3"}i.icon.magento:before{content:"\f3c4"}i.icon.magic:before{content:"\f0d0"}i.icon.magnet:before{content:"\f076"}i.icon.male:before{content:"\f183"}i.icon.map:before{content:"\f279"}i.icon.map.marker:before{content:"\f041"}i.icon.map.marker.alternate:before{content:"\f3c5"}i.icon.map.pin:before{content:"\f276"}i.icon.map.signs:before{content:"\f277"}i.icon.mars:before{content:"\f222"}i.icon.mars.double:before{content:"\f227"}i.icon.mars.stroke:before{content:"\f229"}i.icon.mars.stroke.horizontal:before{content:"\f22b"}i.icon.mars.stroke.vertical:before{content:"\f22a"}i.icon.maxcdn:before{content:"\f136"}i.icon.medapps:before{content:"\f3c6"}i.icon.medium:before{content:"\f23a"}i.icon.medium.m:before{content:"\f3c7"}i.icon.medkit:before{content:"\f0fa"}i.icon.medrt:before{content:"\f3c8"}i.icon.meetup:before{content:"\f2e0"}i.icon.meh:before{content:"\f11a"}i.icon.mercury:before{content:"\f223"}i.icon.microchip:before{content:"\f2db"}i.icon.microphone:before{content:"\f130"}i.icon.microphone.slash:before{content:"\f131"}i.icon.microsoft:before{content:"\f3ca"}i.icon.minus:before{content:"\f068"}i.icon.minus.circle:before{content:"\f056"}i.icon.minus.square:before{content:"\f146"}i.icon.mix:before{content:"\f3cb"}i.icon.mixcloud:before{content:"\f289"}i.icon.mizuni:before{content:"\f3cc"}i.icon.mobile:before{content:"\f10b"}i.icon.mobile.alternate:before{content:"\f3cd"}i.icon.modx:before{content:"\f285"}i.icon.monero:before{content:"\f3d0"}i.icon.money.bill.alternate:before{content:"\f3d1"}i.icon.moon:before{content:"\f186"}i.icon.motorcycle:before{content:"\f21c"}i.icon.mouse.pointer:before{content:"\f245"}i.icon.music:before{content:"\f001"}i.icon.napster:before{content:"\f3d2"}i.icon.neuter:before{content:"\f22c"}i.icon.newspaper:before{content:"\f1ea"}i.icon.nintendo.switch:before{content:"\f418"}i.icon.node:before{content:"\f419"}i.icon.node.js:before{content:"\f3d3"}i.icon.npm:before{content:"\f3d4"}i.icon.ns8:before{content:"\f3d5"}i.icon.nutritionix:before{content:"\f3d6"}i.icon.object.group:before{content:"\f247"}i.icon.object.ungroup:before{content:"\f248"}i.icon.odnoklassniki:before{content:"\f263"}i.icon.odnoklassniki.square:before{content:"\f264"}i.icon.opencart:before{content:"\f23d"}i.icon.openid:before{content:"\f19b"}i.icon.opera:before{content:"\f26a"}i.icon.optin.monster:before{content:"\f23c"}i.icon.osi:before{content:"\f41a"}i.icon.outdent:before{content:"\f03b"}i.icon.page4:before{content:"\f3d7"}i.icon.pagelines:before{content:"\f18c"}i.icon.paint.brush:before{content:"\f1fc"}i.icon.palfed:before{content:"\f3d8"}i.icon.pallet:before{content:"\f482"}i.icon.paper.plane:before{content:"\f1d8"}i.icon.paperclip:before{content:"\f0c6"}i.icon.paragraph:before{content:"\f1dd"}i.icon.paste:before{content:"\f0ea"}i.icon.patreon:before{content:"\f3d9"}i.icon.pause:before{content:"\f04c"}i.icon.pause.circle:before{content:"\f28b"}i.icon.paw:before{content:"\f1b0"}i.icon.paypal:before{content:"\f1ed"}i.icon.pen.square:before{content:"\f14b"}i.icon.pencil.alternate:before{content:"\f303"}i.icon.percent:before{content:"\f295"}i.icon.periscope:before{content:"\f3da"}i.icon.phabricator:before{content:"\f3db"}i.icon.phoenix.framework:before{content:"\f3dc"}i.icon.phone:before{content:"\f095"}i.icon.phone.square:before{content:"\f098"}i.icon.phone.volume:before{content:"\f2a0"}i.icon.php:before{content:"\f457"}i.icon.pied.piper:before{content:"\f2ae"}i.icon.pied.piper.alternate:before{content:"\f1a8"}i.icon.pied.piper.pp:before{content:"\f1a7"}i.icon.pills:before{content:"\f484"}i.icon.pinterest:before{content:"\f0d2"}i.icon.pinterest.p:before{content:"\f231"}i.icon.pinterest.square:before{content:"\f0d3"}i.icon.plane:before{content:"\f072"}i.icon.play:before{content:"\f04b"}i.icon.play.circle:before{content:"\f144"}i.icon.playstation:before{content:"\f3df"}i.icon.plug:before{content:"\f1e6"}i.icon.plus:before{content:"\f067"}i.icon.plus.circle:before{content:"\f055"}i.icon.plus.square:before{content:"\f0fe"}i.icon.podcast:before{content:"\f2ce"}i.icon.pound.sign:before{content:"\f154"}i.icon.power.off:before{content:"\f011"}i.icon.print:before{content:"\f02f"}i.icon.product.hunt:before{content:"\f288"}i.icon.pushed:before{content:"\f3e1"}i.icon.puzzle.piece:before{content:"\f12e"}i.icon.python:before{content:"\f3e2"}i.icon.qq:before{content:"\f1d6"}i.icon.qrcode:before{content:"\f029"}i.icon.question:before{content:"\f128"}i.icon.question.circle:before{content:"\f059"}i.icon.quidditch:before{content:"\f458"}i.icon.quinscape:before{content:"\f459"}i.icon.quora:before{content:"\f2c4"}i.icon.quote.left:before{content:"\f10d"}i.icon.quote.right:before{content:"\f10e"}i.icon.random:before{content:"\f074"}i.icon.ravelry:before{content:"\f2d9"}i.icon.react:before{content:"\f41b"}i.icon.rebel:before{content:"\f1d0"}i.icon.recycle:before{content:"\f1b8"}i.icon.redriver:before{content:"\f3e3"}i.icon.reddit:before{content:"\f1a1"}i.icon.reddit.alien:before{content:"\f281"}i.icon.reddit.square:before{content:"\f1a2"}i.icon.redo:before{content:"\f01e"}i.icon.redo.alternate:before{content:"\f2f9"}i.icon.registered:before{content:"\f25d"}i.icon.rendact:before{content:"\f3e4"}i.icon.renren:before{content:"\f18b"}i.icon.reply:before{content:"\f3e5"}i.icon.reply.all:before{content:"\f122"}i.icon.replyd:before{content:"\f3e6"}i.icon.resolving:before{content:"\f3e7"}i.icon.retweet:before{content:"\f079"}i.icon.road:before{content:"\f018"}i.icon.rocket:before{content:"\f135"}i.icon.rocketchat:before{content:"\f3e8"}i.icon.rockrms:before{content:"\f3e9"}i.icon.rss:before{content:"\f09e"}i.icon.rss.square:before{content:"\f143"}i.icon.ruble.sign:before{content:"\f158"}i.icon.rupee.sign:before{content:"\f156"}i.icon.safari:before{content:"\f267"}i.icon.sass:before{content:"\f41e"}i.icon.save:before{content:"\f0c7"}i.icon.schlix:before{content:"\f3ea"}i.icon.scribd:before{content:"\f28a"}i.icon.search:before{content:"\f002"}i.icon.search.minus:before{content:"\f010"}i.icon.search.plus:before{content:"\f00e"}i.icon.searchengin:before{content:"\f3eb"}i.icon.sellcast:before{content:"\f2da"}i.icon.sellsy:before{content:"\f213"}i.icon.server:before{content:"\f233"}i.icon.servicestack:before{content:"\f3ec"}i.icon.share:before{content:"\f064"}i.icon.share.alternate:before{content:"\f1e0"}i.icon.share.alternate.square:before{content:"\f1e1"}i.icon.share.square:before{content:"\f14d"}i.icon.shekel.sign:before{content:"\f20b"}i.icon.shield.alternate:before{content:"\f3ed"}i.icon.ship:before{content:"\f21a"}i.icon.shipping.fast:before{content:"\f48b"}i.icon.shirtsinbulk:before{content:"\f214"}i.icon.shopping.bag:before{content:"\f290"}i.icon.shopping.basket:before{content:"\f291"}i.icon.shopping.cart:before{content:"\f07a"}i.icon.shower:before{content:"\f2cc"}i.icon.sign.language:before{content:"\f2a7"}i.icon.signal:before{content:"\f012"}i.icon.simplybuilt:before{content:"\f215"}i.icon.sistrix:before{content:"\f3ee"}i.icon.sitemap:before{content:"\f0e8"}i.icon.skyatlas:before{content:"\f216"}i.icon.skype:before{content:"\f17e"}i.icon.slack:before{content:"\f198"}i.icon.slack.hash:before{content:"\f3ef"}i.icon.sliders.horizontal:before{content:"\f1de"}i.icon.slideshare:before{content:"\f1e7"}i.icon.smile:before{content:"\f118"}i.icon.snapchat:before{content:"\f2ab"}i.icon.snapchat.ghost:before{content:"\f2ac"}i.icon.snapchat.square:before{content:"\f2ad"}i.icon.snowflake:before{content:"\f2dc"}i.icon.sort:before{content:"\f0dc"}i.icon.sort.alphabet.down:before{content:"\f15d"}i.icon.sort.alphabet.up:before{content:"\f15e"}i.icon.sort.amount.down:before{content:"\f160"}i.icon.sort.amount.up:before{content:"\f161"}i.icon.sort.down:before{content:"\f0dd"}i.icon.sort.numeric.down:before{content:"\f162"}i.icon.sort.numeric.up:before{content:"\f163"}i.icon.sort.up:before{content:"\f0de"}i.icon.soundcloud:before{content:"\f1be"}i.icon.space.shuttle:before{content:"\f197"}i.icon.speakap:before{content:"\f3f3"}i.icon.spinner:before{content:"\f110"}i.icon.spotify:before{content:"\f1bc"}i.icon.square:before{content:"\f0c8"}i.icon.square.full:before{content:"\f45c"}i.icon.stack.exchange:before{content:"\f18d"}i.icon.stack.overflow:before{content:"\f16c"}i.icon.star:before{content:"\f005"}i.icon.star.half:before{content:"\f089"}i.icon.staylinked:before{content:"\f3f5"}i.icon.steam:before{content:"\f1b6"}i.icon.steam.square:before{content:"\f1b7"}i.icon.steam.symbol:before{content:"\f3f6"}i.icon.step.backward:before{content:"\f048"}i.icon.step.forward:before{content:"\f051"}i.icon.stethoscope:before{content:"\f0f1"}i.icon.sticker.mule:before{content:"\f3f7"}i.icon.sticky.note:before{content:"\f249"}i.icon.stop:before{content:"\f04d"}i.icon.stop.circle:before{content:"\f28d"}i.icon.stopwatch:before{content:"\f2f2"}i.icon.strava:before{content:"\f428"}i.icon.street.view:before{content:"\f21d"}i.icon.strikethrough:before{content:"\f0cc"}i.icon.stripe:before{content:"\f429"}i.icon.stripe.s:before{content:"\f42a"}i.icon.studiovinari:before{content:"\f3f8"}i.icon.stumbleupon:before{content:"\f1a4"}i.icon.stumbleupon.circle:before{content:"\f1a3"}i.icon.subscript:before{content:"\f12c"}i.icon.subway:before{content:"\f239"}i.icon.suitcase:before{content:"\f0f2"}i.icon.sun:before{content:"\f185"}i.icon.superpowers:before{content:"\f2dd"}i.icon.superscript:before{content:"\f12b"}i.icon.supple:before{content:"\f3f9"}i.icon.sync:before{content:"\f021"}i.icon.sync.alternate:before{content:"\f2f1"}i.icon.syringe:before{content:"\f48e"}i.icon.table:before{content:"\f0ce"}i.icon.table.tennis:before{content:"\f45d"}i.icon.tablet:before{content:"\f10a"}i.icon.tablet.alternate:before{content:"\f3fa"}i.icon.tachometer.alternate:before{content:"\f3fd"}i.icon.tag:before{content:"\f02b"}i.icon.tags:before{content:"\f02c"}i.icon.tasks:before{content:"\f0ae"}i.icon.taxi:before{content:"\f1ba"}i.icon.telegram:before{content:"\f2c6"}i.icon.telegram.plane:before{content:"\f3fe"}i.icon.tencent.weibo:before{content:"\f1d5"}i.icon.terminal:before{content:"\f120"}i.icon.text.height:before{content:"\f034"}i.icon.text.width:before{content:"\f035"}i.icon.th:before{content:"\f00a"}i.icon.th.large:before{content:"\f009"}i.icon.th.list:before{content:"\f00b"}i.icon.themeisle:before{content:"\f2b2"}i.icon.thermometer:before{content:"\f491"}i.icon.thermometer.empty:before{content:"\f2cb"}i.icon.thermometer.full:before{content:"\f2c7"}i.icon.thermometer.half:before{content:"\f2c9"}i.icon.thermometer.quarter:before{content:"\f2ca"}i.icon.thermometer.three.quarters:before{content:"\f2c8"}i.icon.thumbs.down:before{content:"\f165"}i.icon.thumbs.up:before{content:"\f164"}i.icon.thumbtack:before{content:"\f08d"}i.icon.ticket.alternate:before{content:"\f3ff"}i.icon.times:before{content:"\f00d"}i.icon.times.circle:before{content:"\f057"}i.icon.tint:before{content:"\f043"}i.icon.toggle.off:before{content:"\f204"}i.icon.toggle.on:before{content:"\f205"}i.icon.trademark:before{content:"\f25c"}i.icon.train:before{content:"\f238"}i.icon.transgender:before{content:"\f224"}i.icon.transgender.alternate:before{content:"\f225"}i.icon.trash:before{content:"\f1f8"}i.icon.trash.alternate:before{content:"\f2ed"}i.icon.tree:before{content:"\f1bb"}i.icon.trello:before{content:"\f181"}i.icon.tripadvisor:before{content:"\f262"}i.icon.trophy:before{content:"\f091"}i.icon.truck:before{content:"\f0d1"}i.icon.tty:before{content:"\f1e4"}i.icon.tumblr:before{content:"\f173"}i.icon.tumblr.square:before{content:"\f174"}i.icon.tv:before{content:"\f26c"}i.icon.twitch:before{content:"\f1e8"}i.icon.twitter:before{content:"\f099"}i.icon.twitter.square:before{content:"\f081"}i.icon.typo3:before{content:"\f42b"}i.icon.uber:before{content:"\f402"}i.icon.uikit:before{content:"\f403"}i.icon.umbrella:before{content:"\f0e9"}i.icon.underline:before{content:"\f0cd"}i.icon.undo:before{content:"\f0e2"}i.icon.undo.alternate:before{content:"\f2ea"}i.icon.uniregistry:before{content:"\f404"}i.icon.universal.access:before{content:"\f29a"}i.icon.university:before{content:"\f19c"}i.icon.unlink:before{content:"\f127"}i.icon.unlock:before{content:"\f09c"}i.icon.unlock.alternate:before{content:"\f13e"}i.icon.untappd:before{content:"\f405"}i.icon.upload:before{content:"\f093"}i.icon.usb:before{content:"\f287"}i.icon.user:before{content:"\f007"}i.icon.user.circle:before{content:"\f2bd"}i.icon.user.md:before{content:"\f0f0"}i.icon.user.plus:before{content:"\f234"}i.icon.user.secret:before{content:"\f21b"}i.icon.user.times:before{content:"\f235"}i.icon.users:before{content:"\f0c0"}i.icon.ussunnah:before{content:"\f407"}i.icon.utensil.spoon:before{content:"\f2e5"}i.icon.utensils:before{content:"\f2e7"}i.icon.vaadin:before{content:"\f408"}i.icon.venus:before{content:"\f221"}i.icon.venus.double:before{content:"\f226"}i.icon.venus.mars:before{content:"\f228"}i.icon.viacoin:before{content:"\f237"}i.icon.viadeo:before{content:"\f2a9"}i.icon.viadeo.square:before{content:"\f2aa"}i.icon.viber:before{content:"\f409"}i.icon.video:before{content:"\f03d"}i.icon.vimeo:before{content:"\f40a"}i.icon.vimeo.square:before{content:"\f194"}i.icon.vimeo.v:before{content:"\f27d"}i.icon.vine:before{content:"\f1ca"}i.icon.vk:before{content:"\f189"}i.icon.vnv:before{content:"\f40b"}i.icon.volleyball.ball:before{content:"\f45f"}i.icon.volume.down:before{content:"\f027"}i.icon.volume.off:before{content:"\f026"}i.icon.volume.up:before{content:"\f028"}i.icon.vuejs:before{content:"\f41f"}i.icon.warehouse:before{content:"\f494"}i.icon.weibo:before{content:"\f18a"}i.icon.weight:before{content:"\f496"}i.icon.weixin:before{content:"\f1d7"}i.icon.whatsapp:before{content:"\f232"}i.icon.whatsapp.square:before{content:"\f40c"}i.icon.wheelchair:before{content:"\f193"}i.icon.whmcs:before{content:"\f40d"}i.icon.wifi:before{content:"\f1eb"}i.icon.wikipedia.w:before{content:"\f266"}i.icon.window.close:before{content:"\f410"}i.icon.window.maximize:before{content:"\f2d0"}i.icon.window.minimize:before{content:"\f2d1"}i.icon.window.restore:before{content:"\f2d2"}i.icon.windows:before{content:"\f17a"}i.icon.won.sign:before{content:"\f159"}i.icon.wordpress:before{content:"\f19a"}i.icon.wordpress.simple:before{content:"\f411"}i.icon.wpbeginner:before{content:"\f297"}i.icon.wpexplorer:before{content:"\f2de"}i.icon.wpforms:before{content:"\f298"}i.icon.wrench:before{content:"\f0ad"}i.icon.xbox:before{content:"\f412"}i.icon.xing:before{content:"\f168"}i.icon.xing.square:before{content:"\f169"}i.icon.y.combinator:before{content:"\f23b"}i.icon.yahoo:before{content:"\f19e"}i.icon.yandex:before{content:"\f413"}i.icon.yandex.international:before{content:"\f414"}i.icon.yelp:before{content:"\f1e9"}i.icon.yen.sign:before{content:"\f157"}i.icon.yoast:before{content:"\f2b1"}i.icon.youtube:before{content:"\f167"}i.icon.youtube.square:before{content:"\f431"}i.icon.chess.rock:before{content:"\f447"}i.icon.ordered.list:before{content:"\f0cb"}i.icon.unordered.list:before{content:"\f0ca"}i.icon.user.doctor:before{content:"\f0f0"}i.icon.shield:before{content:"\f3ed"}i.icon.puzzle:before{content:"\f12e"}i.icon.credit.card.amazon.pay:before{content:"\f42d"}i.icon.credit.card.american.express:before{content:"\f1f3"}i.icon.credit.card.diners.club:before{content:"\f24c"}i.icon.credit.card.discover:before{content:"\f1f2"}i.icon.credit.card.jcb:before{content:"\f24b"}i.icon.credit.card.mastercard:before{content:"\f1f1"}i.icon.credit.card.paypal:before{content:"\f1f4"}i.icon.credit.card.stripe:before{content:"\f1f5"}i.icon.credit.card.visa:before{content:"\f1f0"}i.icon.add.circle:before{content:"\f055"}i.icon.add.square:before{content:"\f0fe"}i.icon.add.to.calendar:before{content:"\f271"}i.icon.add.to.cart:before{content:"\f217"}i.icon.add.user:before{content:"\f234"}i.icon.add:before{content:"\f067"}i.icon.alarm.mute:before{content:"\f1f6"}i.icon.alarm:before{content:"\f0f3"}i.icon.ald:before,i.icon.als:before{content:"\f2a2"}i.icon.american.express.card:before,i.icon.american.express:before,i.icon.amex:before{content:"\f1f3"}i.icon.announcement:before{content:"\f0a1"}i.icon.area.chart:before,i.icon.area.graph:before{content:"\f1fe"}i.icon.arrow.down.cart:before{content:"\f218"}i.icon.asexual:before{content:"\f22d"}i.icon.asl.interpreting:before,i.icon.asl:before{content:"\f2a3"}i.icon.assistive.listening.devices:before{content:"\f2a2"}i.icon.attach:before{content:"\f0c6"}i.icon.attention:before{content:"\f06a"}i.icon.balance:before{content:"\f24e"}i.icon.bar:before{content:"\f0fc"}i.icon.bathtub:before{content:"\f2cd"}i.icon.battery.four:before{content:"\f240"}i.icon.battery.high:before{content:"\f241"}i.icon.battery.low:before{content:"\f243"}i.icon.battery.medium:before{content:"\f242"}i.icon.battery.one:before{content:"\f243"}i.icon.battery.three:before{content:"\f241"}i.icon.battery.two:before{content:"\f242"}i.icon.battery.zero:before{content:"\f244"}i.icon.birthday:before{content:"\f1fd"}i.icon.block.layout:before{content:"\f009"}i.icon.bluetooth.alternative:before{content:"\f294"}i.icon.broken.chain:before{content:"\f127"}i.icon.browser:before{content:"\f022"}i.icon.call.square:before{content:"\f098"}i.icon.call:before{content:"\f095"}i.icon.cancel:before{content:"\f00d"}i.icon.cart:before{content:"\f07a"}i.icon.cc:before{content:"\f20a"}i.icon.chain:before{content:"\f0c1"}i.icon.chat:before{content:"\f075"}i.icon.checked.calendar:before{content:"\f274"}i.icon.checkmark:before{content:"\f00c"}i.icon.circle.notched:before{content:"\f1ce"}i.icon.close:before{content:"\f00d"}i.icon.cny:before{content:"\f157"}i.icon.cocktail:before{content:"\f000"}i.icon.commenting:before{content:"\f27a"}i.icon.computer:before{content:"\f108"}i.icon.configure:before{content:"\f0ad"}i.icon.content:before{content:"\f0c9"}i.icon.deafness:before{content:"\f2a4"}i.icon.delete.calendar:before{content:"\f273"}i.icon.delete:before{content:"\f00d"}i.icon.detective:before{content:"\f21b"}i.icon.diners.club.card:before,i.icon.diners.club:before{content:"\f24c"}i.icon.discover.card:before,i.icon.discover:before{content:"\f1f2"}i.icon.discussions:before{content:"\f086"}i.icon.doctor:before{content:"\f0f0"}i.icon.dollar:before{content:"\f155"}i.icon.dont:before{content:"\f05e"}i.icon.dribble:before{content:"\f17d"}i.icon.drivers.license:before{content:"\f2c2"}i.icon.dropdown:before{content:"\f0d7"}i.icon.eercast:before{content:"\f2da"}i.icon.emergency:before{content:"\f0f9"}i.icon.envira.gallery:before{content:"\f299"}i.icon.erase:before{content:"\f12d"}i.icon.eur:before,i.icon.euro:before{content:"\f153"}i.icon.eyedropper:before{content:"\f1fb"}i.icon.fa:before{content:"\f2b4"}i.icon.factory:before{content:"\f275"}i.icon.favorite:before{content:"\f005"}i.icon.feed:before{content:"\f09e"}i.icon.female.homosexual:before{content:"\f226"}i.icon.file.text:before{content:"\f15c"}i.icon.find:before{content:"\f1e5"}i.icon.first.aid:before{content:"\f0fa"}i.icon.five.hundred.pixels:before{content:"\f26e"}i.icon.fork:before{content:"\f126"}i.icon.game:before{content:"\f11b"}i.icon.gay:before{content:"\f227"}i.icon.gbp:before{content:"\f154"}i.icon.gittip:before{content:"\f184"}i.icon.google.plus.circle:before,i.icon.google.plus.official:before{content:"\f2b3"}i.icon.grab:before{content:"\f255"}i.icon.graduation:before{content:"\f19d"}i.icon.grid.layout:before{content:"\f00a"}i.icon.group:before{content:"\f0c0"}i.icon.h:before{content:"\f0fd"}i.icon.hand.victory:before{content:"\f25b"}i.icon.handicap:before{content:"\f193"}i.icon.hard.of.hearing:before{content:"\f2a4"}i.icon.header:before{content:"\f1dc"}i.icon.help.circle:before{content:"\f059"}i.icon.help:before{content:"\f128"}i.icon.heterosexual:before{content:"\f228"}i.icon.hide:before{content:"\f070"}i.icon.hotel:before{content:"\f236"}i.icon.hourglass.four:before,i.icon.hourglass.full:before{content:"\f254"}i.icon.hourglass.one:before{content:"\f251"}i.icon.hourglass.three:before{content:"\f253"}i.icon.hourglass.two:before{content:"\f252"}i.icon.idea:before{content:"\f0eb"}i.icon.ils:before{content:"\f20b"}i.icon.in-cart:before{content:"\f218"}i.icon.inr:before{content:"\f156"}i.icon.intergender:before,i.icon.intersex:before{content:"\f224"}i.icon.japan.credit.bureau.card:before,i.icon.japan.credit.bureau:before,i.icon.jcb:before{content:"\f24b"}i.icon.jpy:before{content:"\f157"}i.icon.krw:before{content:"\f159"}i.icon.lab:before{content:"\f0c3"}i.icon.law:before{content:"\f24e"}i.icon.legal:before{content:"\f0e3"}i.icon.lesbian:before{content:"\f226"}i.icon.lightning:before{content:"\f0e7"}i.icon.like:before{content:"\f004"}i.icon.line.graph:before{content:"\f201"}i.icon.linkedin.square:before{content:"\f08c"}i.icon.linkify:before{content:"\f0c1"}i.icon.lira:before{content:"\f195"}i.icon.list.layout:before{content:"\f00b"}i.icon.magnify:before{content:"\f00e"}i.icon.mail.forward:before{content:"\f064"}i.icon.mail.square:before{content:"\f199"}i.icon.mail:before{content:"\f0e0"}i.icon.male.homosexual:before{content:"\f227"}i.icon.man:before{content:"\f222"}i.icon.marker:before{content:"\f041"}i.icon.mars.alternate:before{content:"\f229"}i.icon.mars.horizontal:before{content:"\f22b"}i.icon.mars.vertical:before{content:"\f22a"}i.icon.mastercard.card:before,i.icon.mastercard:before{content:"\f1f1"}i.icon.microsoft.edge:before{content:"\f282"}i.icon.military:before{content:"\f0fb"}i.icon.ms.edge:before{content:"\f282"}i.icon.mute:before{content:"\f131"}i.icon.new.pied.piper:before{content:"\f2ae"}i.icon.non.binary.transgender:before{content:"\f223"}i.icon.numbered.list:before{content:"\f0cb"}i.icon.optinmonster:before{content:"\f23c"}i.icon.options:before{content:"\f1de"}i.icon.other.gender.horizontal:before{content:"\f22b"}i.icon.other.gender.vertical:before{content:"\f22a"}i.icon.other.gender:before{content:"\f229"}i.icon.payment:before{content:"\f09d"}i.icon.paypal.card:before{content:"\f1f4"}i.icon.pencil.square:before{content:"\f14b"}i.icon.photo:before{content:"\f030"}i.icon.picture:before{content:"\f03e"}i.icon.pie.chart:before,i.icon.pie.graph:before{content:"\f200"}i.icon.pied.piper.hat:before{content:"\f2ae"}i.icon.pin:before{content:"\f08d"}i.icon.plus.cart:before{content:"\f217"}i.icon.pocket:before{content:"\f265"}i.icon.point:before{content:"\f041"}i.icon.pointing.down:before{content:"\f0a7"}i.icon.pointing.left:before{content:"\f0a5"}i.icon.pointing.right:before{content:"\f0a4"}i.icon.pointing.up:before{content:"\f0a6"}i.icon.pound:before{content:"\f154"}i.icon.power.cord:before{content:"\f1e6"}i.icon.power:before{content:"\f011"}i.icon.privacy:before{content:"\f084"}i.icon.r.circle:before{content:"\f25d"}i.icon.rain:before{content:"\f0e9"}i.icon.record:before{content:"\f03d"}i.icon.refresh:before{content:"\f021"}i.icon.remove.circle:before{content:"\f057"}i.icon.remove.from.calendar:before{content:"\f272"}i.icon.remove.user:before{content:"\f235"}i.icon.remove:before{content:"\f00d"}i.icon.repeat:before{content:"\f01e"}i.icon.rmb:before{content:"\f157"}i.icon.rouble:before,i.icon.rub:before,i.icon.ruble:before{content:"\f158"}i.icon.rupee:before{content:"\f156"}i.icon.s15:before{content:"\f2cd"}i.icon.selected.radio:before{content:"\f192"}i.icon.send:before{content:"\f1d8"}i.icon.setting:before{content:"\f013"}i.icon.settings:before{content:"\f085"}i.icon.shekel:before,i.icon.sheqel:before{content:"\f20b"}i.icon.shipping:before{content:"\f0d1"}i.icon.shop:before{content:"\f07a"}i.icon.shuffle:before{content:"\f074"}i.icon.shutdown:before{content:"\f011"}i.icon.sidebar:before{content:"\f0c9"}i.icon.signing:before{content:"\f2a7"}i.icon.signup:before{content:"\f044"}i.icon.sliders:before{content:"\f1de"}i.icon.soccer:before{content:"\f1e3"}i.icon.sort.alphabet.ascending:before{content:"\f15d"}i.icon.sort.alphabet.descending:before{content:"\f15e"}i.icon.sort.ascending:before{content:"\f0de"}i.icon.sort.content.ascending:before{content:"\f160"}i.icon.sort.content.descending:before{content:"\f161"}i.icon.sort.descending:before{content:"\f0dd"}i.icon.sort.numeric.ascending:before{content:"\f162"}i.icon.sort.numeric.descending:before{content:"\f163"}i.icon.sound:before{content:"\f025"}i.icon.spy:before{content:"\f21b"}i.icon.stripe.card:before{content:"\f1f5"}i.icon.student:before{content:"\f19d"}i.icon.talk:before{content:"\f27a"}i.icon.target:before{content:"\f140"}i.icon.teletype:before{content:"\f1e4"}i.icon.television:before{content:"\f26c"}i.icon.text.cursor:before{content:"\f246"}i.icon.text.telephone:before{content:"\f1e4"}i.icon.theme.isle:before{content:"\f2b2"}i.icon.theme:before{content:"\f043"}i.icon.thermometer:before{content:"\f2c7"}i.icon.thumb.tack:before{content:"\f08d"}i.icon.time:before{content:"\f017"}i.icon.tm:before{content:"\f25c"}i.icon.toggle.down:before{content:"\f150"}i.icon.toggle.left:before{content:"\f191"}i.icon.toggle.right:before{content:"\f152"}i.icon.toggle.up:before{content:"\f151"}i.icon.translate:before{content:"\f1ab"}i.icon.travel:before{content:"\f0b1"}i.icon.treatment:before{content:"\f0f1"}i.icon.triangle.down:before{content:"\f0d7"}i.icon.triangle.left:before{content:"\f0d9"}i.icon.triangle.right:before{content:"\f0da"}i.icon.triangle.up:before{content:"\f0d8"}i.icon.try:before{content:"\f195"}i.icon.unhide:before{content:"\f06e"}i.icon.unlinkify:before{content:"\f127"}i.icon.unmute:before{content:"\f130"}i.icon.usd:before{content:"\f155"}i.icon.user.cancel:before,i.icon.user.close:before,i.icon.user.delete:before,i.icon.user.x:before{content:"\f235"}i.icon.vcard:before{content:"\f2bb"}i.icon.video.camera:before{content:"\f03d"}i.icon.video.play:before{content:"\f144"}i.icon.visa.card:before,i.icon.visa:before{content:"\f1f0"}i.icon.volume.control.phone:before{content:"\f2a0"}i.icon.wait:before{content:"\f017"}i.icon.warning.circle:before{content:"\f06a"}i.icon.warning.sign:before{content:"\f071"}i.icon.warning:before{content:"\f12a"}i.icon.wechat:before{content:"\f1d7"}i.icon.wi-fi:before{content:"\f1eb"}i.icon.wikipedia:before{content:"\f266"}i.icon.winner:before{content:"\f091"}i.icon.wizard:before{content:"\f0d0"}i.icon.woman:before{content:"\f221"}i.icon.won:before{content:"\f159"}i.icon.wordpress.beginner:before{content:"\f297"}i.icon.wordpress.forms:before{content:"\f298"}i.icon.world:before{content:"\f0ac"}i.icon.write.square:before{content:"\f14b"}i.icon.x:before{content:"\f00d"}i.icon.yc:before,i.icon.ycombinator:before{content:"\f23b"}i.icon.yen:before{content:"\f157"}i.icon.zip:before{content:"\f187"}i.icon.zoom-in:before{content:"\f00e"}i.icon.zoom-out:before{content:"\f010"}i.icon.zoom:before{content:"\f00e"}i.icon.bitbucket.square:before{content:"\f171"}i.icon.checkmark.box:before{content:"\f14a"}i.icon.circle.thin:before{content:"\f111"}i.icon.cloud.download:before{content:"\f381"}i.icon.cloud.upload:before{content:"\f382"}i.icon.compose:before{content:"\f303"}i.icon.conversation:before{content:"\f086"}i.icon.credit.card.alternative:before{content:"\f09d"}i.icon.currency:before{content:"\f3d1"}i.icon.dashboard:before{content:"\f3fd"}i.icon.diamond:before{content:"\f3a5"}i.icon.disk:before{content:"\f0a0"}i.icon.exchange:before{content:"\f362"}i.icon.external.share:before{content:"\f14d"}i.icon.external.square:before{content:"\f360"}i.icon.external:before{content:"\f35d"}i.icon.facebook.official:before{content:"\f082"}i.icon.food:before{content:"\f2e7"}i.icon.hourglass.zero:before{content:"\f253"}i.icon.level.down:before{content:"\f3be"}i.icon.level.up:before{content:"\f3bf"}i.icon.logout:before{content:"\f2f5"}i.icon.meanpath:before{content:"\f0c8"}i.icon.money:before{content:"\f3d1"}i.icon.move:before{content:"\f0b2"}i.icon.pencil:before{content:"\f303"}i.icon.protect:before{content:"\f023"}i.icon.radio:before{content:"\f192"}i.icon.remove.bookmark:before{content:"\f02e"}i.icon.resize.horizontal:before{content:"\f337"}i.icon.resize.vertical:before{content:"\f338"}i.icon.sign-in:before{content:"\f2f6"}i.icon.sign-out:before{content:"\f2f5"}i.icon.spoon:before{content:"\f2e5"}i.icon.star.half.empty:before,i.icon.star.half.full:before{content:"\f089"}i.icon.ticket:before{content:"\f3ff"}i.icon.times.rectangle:before{content:"\f410"}i.icon.write:before{content:"\f303"}i.icon.youtube.play:before{content:"\f167"}@font-face{font-family:outline-icons;src:url(themes/default/assets/fonts/outline-icons.eot);src:url(themes/default/assets/fonts/outline-icons.eot?#iefix) format("embedded-opentype"),url(themes/default/assets/fonts/outline-icons.woff2) format("woff2"),url(themes/default/assets/fonts/outline-icons.woff) format("woff"),url(themes/default/assets/fonts/outline-icons.ttf) format("truetype"),url(themes/default/assets/fonts/outline-icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon.outline{font-family:outline-icons}i.icon.address.book.outline:before{content:"\f2b9"}i.icon.address.card.outline:before{content:"\f2bb"}i.icon.arrow.alternate.circle.down.outline:before{content:"\f358"}i.icon.arrow.alternate.circle.left.outline:before{content:"\f359"}i.icon.arrow.alternate.circle.right.outline:before{content:"\f35a"}i.icon.arrow.alternate.circle.up.outline:before{content:"\f35b"}i.icon.bell.outline:before{content:"\f0f3"}i.icon.bell.slash.outline:before{content:"\f1f6"}i.icon.bookmark.outline:before{content:"\f02e"}i.icon.building.outline:before{content:"\f1ad"}i.icon.calendar.outline:before{content:"\f133"}i.icon.calendar.alternate.outline:before{content:"\f073"}i.icon.calendar.check.outline:before{content:"\f274"}i.icon.calendar.minus.outline:before{content:"\f272"}i.icon.calendar.plus.outline:before{content:"\f271"}i.icon.calendar.times.outline:before{content:"\f273"}i.icon.caret.square.down.outline:before{content:"\f150"}i.icon.caret.square.left.outline:before{content:"\f191"}i.icon.caret.square.right.outline:before{content:"\f152"}i.icon.caret.square.up.outline:before{content:"\f151"}i.icon.chart.bar.outline:before{content:"\f080"}i.icon.check.circle.outline:before{content:"\f058"}i.icon.check.square.outline:before{content:"\f14a"}i.icon.circle.outline:before{content:"\f111"}i.icon.clipboard.outline:before{content:"\f328"}i.icon.clock.outline:before{content:"\f017"}i.icon.clone.outline:before{content:"\f24d"}i.icon.closed.captioning.outline:before{content:"\f20a"}i.icon.comment.outline:before{content:"\f075"}i.icon.comment.alternate.outline:before{content:"\f27a"}i.icon.comments.outline:before{content:"\f086"}i.icon.compass.outline:before{content:"\f14e"}i.icon.copy.outline:before{content:"\f0c5"}i.icon.copyright.outline:before{content:"\f1f9"}i.icon.credit.card.outline:before{content:"\f09d"}i.icon.dot.circle.outline:before{content:"\f192"}i.icon.edit.outline:before{content:"\f044"}i.icon.envelope.outline:before{content:"\f0e0"}i.icon.envelope.open.outline:before{content:"\f2b6"}i.icon.eye.slash.outline:before{content:"\f070"}i.icon.file.outline:before{content:"\f15b"}i.icon.file.alternate.outline:before{content:"\f15c"}i.icon.file.archive.outline:before{content:"\f1c6"}i.icon.file.audio.outline:before{content:"\f1c7"}i.icon.file.code.outline:before{content:"\f1c9"}i.icon.file.excel.outline:before{content:"\f1c3"}i.icon.file.image.outline:before{content:"\f1c5"}i.icon.file.pdf.outline:before{content:"\f1c1"}i.icon.file.powerpoint.outline:before{content:"\f1c4"}i.icon.file.video.outline:before{content:"\f1c8"}i.icon.file.word.outline:before{content:"\f1c2"}i.icon.flag.outline:before{content:"\f024"}i.icon.folder.outline:before{content:"\f07b"}i.icon.folder.open.outline:before{content:"\f07c"}i.icon.frown.outline:before{content:"\f119"}i.icon.futbol.outline:before{content:"\f1e3"}i.icon.gem.outline:before{content:"\f3a5"}i.icon.hand.lizard.outline:before{content:"\f258"}i.icon.hand.paper.outline:before{content:"\f256"}i.icon.hand.peace.outline:before{content:"\f25b"}i.icon.hand.point.down.outline:before{content:"\f0a7"}i.icon.hand.point.left.outline:before{content:"\f0a5"}i.icon.hand.point.right.outline:before{content:"\f0a4"}i.icon.hand.point.up.outline:before{content:"\f0a6"}i.icon.hand.pointer.outline:before{content:"\f25a"}i.icon.hand.rock.outline:before{content:"\f255"}i.icon.hand.scissors.outline:before{content:"\f257"}i.icon.hand.spock.outline:before{content:"\f259"}i.icon.handshake.outline:before{content:"\f2b5"}i.icon.hdd.outline:before{content:"\f0a0"}i.icon.heart.outline:before{content:"\f004"}i.icon.hospital.outline:before{content:"\f0f8"}i.icon.hourglass.outline:before{content:"\f254"}i.icon.id.badge.outline:before{content:"\f2c1"}i.icon.id.card.outline:before{content:"\f2c2"}i.icon.image.outline:before{content:"\f03e"}i.icon.images.outline:before{content:"\f302"}i.icon.keyboard.outline:before{content:"\f11c"}i.icon.lemon.outline:before{content:"\f094"}i.icon.life.ring.outline:before{content:"\f1cd"}i.icon.lightbulb.outline:before{content:"\f0eb"}i.icon.list.alternate.outline:before{content:"\f022"}i.icon.map.outline:before{content:"\f279"}i.icon.meh.outline:before{content:"\f11a"}i.icon.minus.square.outline:before{content:"\f146"}i.icon.money.bill.alternate.outline:before{content:"\f3d1"}i.icon.moon.outline:before{content:"\f186"}i.icon.newspaper.outline:before{content:"\f1ea"}i.icon.object.group.outline:before{content:"\f247"}i.icon.object.ungroup.outline:before{content:"\f248"}i.icon.paper.plane.outline:before{content:"\f1d8"}i.icon.pause.circle.outline:before{content:"\f28b"}i.icon.play.circle.outline:before{content:"\f144"}i.icon.plus.square.outline:before{content:"\f0fe"}i.icon.question.circle.outline:before{content:"\f059"}i.icon.registered.outline:before{content:"\f25d"}i.icon.save.outline:before{content:"\f0c7"}i.icon.share.square.outline:before{content:"\f14d"}i.icon.smile.outline:before{content:"\f118"}i.icon.snowflake.outline:before{content:"\f2dc"}i.icon.square.outline:before{content:"\f0c8"}i.icon.star.outline:before{content:"\f005"}i.icon.star.half.outline:before{content:"\f089"}i.icon.sticky.note.outline:before{content:"\f249"}i.icon.stop.circle.outline:before{content:"\f28d"}i.icon.sun.outline:before{content:"\f185"}i.icon.thumbs.down.outline:before{content:"\f165"}i.icon.thumbs.up.outline:before{content:"\f164"}i.icon.times.circle.outline:before{content:"\f057"}i.icon.trash.alternate.outline:before{content:"\f2ed"}i.icon.user.outline:before{content:"\f007"}i.icon.user.circle.outline:before{content:"\f2bd"}i.icon.window.close.outline:before{content:"\f410"}i.icon.window.maximize.outline:before{content:"\f2d0"}i.icon.window.minimize.outline:before{content:"\f2d1"}i.icon.window.restore.outline:before{content:"\f2d2"}i.icon.disk.outline:before{content:"\f0a0"}i.icon.heart.empty,i.icon.star.empty{font-family:outline-icons}i.icon.heart.empty:before{content:"\f004"}i.icon.star.empty:before{content:"\f089"}@font-face{font-family:brand-icons;src:url(themes/default/assets/fonts/brand-icons.eot);src:url(themes/default/assets/fonts/brand-icons.eot?#iefix) format("embedded-opentype"),url(themes/default/assets/fonts/brand-icons.woff2) format("woff2"),url(themes/default/assets/fonts/brand-icons.woff) format("woff"),url(themes/default/assets/fonts/brand-icons.ttf) format("truetype"),url(themes/default/assets/fonts/brand-icons.svg#icons) format("svg");font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon.\35 00px,i.icon.accessible.icon,i.icon.accusoft,i.icon.adn,i.icon.adversal,i.icon.affiliatetheme,i.icon.algolia,i.icon.amazon,i.icon.amazon.pay,i.icon.amilia,i.icon.android,i.icon.angellist,i.icon.angrycreative,i.icon.angular,i.icon.app.store,i.icon.app.store.ios,i.icon.apper,i.icon.apple,i.icon.apple.pay,i.icon.asymmetrik,i.icon.audible,i.icon.autoprefixer,i.icon.avianex,i.icon.aviato,i.icon.aws,i.icon.bandcamp,i.icon.behance,i.icon.behance.square,i.icon.bimobject,i.icon.bitbucket,i.icon.bitcoin,i.icon.bity,i.icon.black.tie,i.icon.blackberry,i.icon.blogger,i.icon.blogger.b,i.icon.bluetooth,i.icon.bluetooth.b,i.icon.btc,i.icon.buromobelexperte,i.icon.buysellads,i.icon.cc.amazon.pay,i.icon.cc.amex,i.icon.cc.apple.pay,i.icon.cc.diners.club,i.icon.cc.discover,i.icon.cc.jcb,i.icon.cc.mastercard,i.icon.cc.paypal,i.icon.cc.stripe,i.icon.cc.visa,i.icon.centercode,i.icon.chrome,i.icon.cloudscale,i.icon.cloudsmith,i.icon.cloudversify,i.icon.codepen,i.icon.codiepie,i.icon.connectdevelop,i.icon.contao,i.icon.cpanel,i.icon.creative.commons,i.icon.css3,i.icon.css3.alternate,i.icon.cuttlefish,i.icon.d.and.d,i.icon.dashcube,i.icon.delicious,i.icon.deploydog,i.icon.deskpro,i.icon.deviantart,i.icon.digg,i.icon.digital.ocean,i.icon.discord,i.icon.discourse,i.icon.dochub,i.icon.docker,i.icon.draft2digital,i.icon.dribbble,i.icon.dribbble.square,i.icon.dropbox,i.icon.drupal,i.icon.dyalog,i.icon.earlybirds,i.icon.edge,i.icon.elementor,i.icon.ember,i.icon.empire,i.icon.envira,i.icon.erlang,i.icon.ethereum,i.icon.etsy,i.icon.expeditedssl,i.icon.facebook,i.icon.facebook.f,i.icon.facebook.messenger,i.icon.facebook.square,i.icon.firefox,i.icon.first.order,i.icon.firstdraft,i.icon.flickr,i.icon.flipboard,i.icon.fly,i.icon.font.awesome,i.icon.font.awesome.alternate,i.icon.font.awesome.flag,i.icon.fonticons,i.icon.fonticons.fi,i.icon.fort.awesome,i.icon.fort.awesome.alternate,i.icon.forumbee,i.icon.foursquare,i.icon.free.code.camp,i.icon.freebsd,i.icon.get.pocket,i.icon.gg,i.icon.gg.circle,i.icon.git,i.icon.git.square,i.icon.github,i.icon.github.alternate,i.icon.github.square,i.icon.gitkraken,i.icon.gitlab,i.icon.gitter,i.icon.glide,i.icon.glide.g,i.icon.gofore,i.icon.goodreads,i.icon.goodreads.g,i.icon.google,i.icon.google.drive,i.icon.google.play,i.icon.google.plus,i.icon.google.plus.g,i.icon.google.plus.square,i.icon.google.wallet,i.icon.gratipay,i.icon.grav,i.icon.gripfire,i.icon.grunt,i.icon.gulp,i.icon.hacker.news,i.icon.hacker.news.square,i.icon.hips,i.icon.hire.a.helper,i.icon.hooli,i.icon.hotjar,i.icon.houzz,i.icon.html5,i.icon.hubspot,i.icon.imdb,i.icon.instagram,i.icon.internet.explorer,i.icon.ioxhost,i.icon.itunes,i.icon.itunes.note,i.icon.jenkins,i.icon.joget,i.icon.joomla,i.icon.js,i.icon.js.square,i.icon.jsfiddle,i.icon.keycdn,i.icon.kickstarter,i.icon.kickstarter.k,i.icon.korvue,i.icon.laravel,i.icon.lastfm,i.icon.lastfm.square,i.icon.leanpub,i.icon.less,i.icon.linechat,i.icon.linkedin,i.icon.linkedin.alternate,i.icon.linkedin.in,i.icon.linode,i.icon.linux,i.icon.lyft,i.icon.magento,i.icon.maxcdn,i.icon.medapps,i.icon.medium,i.icon.medium.m,i.icon.medrt,i.icon.meetup,i.icon.microsoft,i.icon.mix,i.icon.mixcloud,i.icon.mizuni,i.icon.modx,i.icon.monero,i.icon.napster,i.icon.nintendo.switch,i.icon.node,i.icon.node.js,i.icon.npm,i.icon.ns8,i.icon.nutritionix,i.icon.odnoklassniki,i.icon.odnoklassniki.square,i.icon.opencart,i.icon.openid,i.icon.opera,i.icon.optin.monster,i.icon.osi,i.icon.page4,i.icon.pagelines,i.icon.palfed,i.icon.patreon,i.icon.paypal,i.icon.periscope,i.icon.phabricator,i.icon.phoenix.framework,i.icon.php,i.icon.pied.piper,i.icon.pied.piper.alternate,i.icon.pied.piper.pp,i.icon.pinterest,i.icon.pinterest.p,i.icon.pinterest.square,i.icon.playstation,i.icon.product.hunt,i.icon.pushed,i.icon.python,i.icon.qq,i.icon.quinscape,i.icon.quora,i.icon.ravelry,i.icon.react,i.icon.rebel,i.icon.reddit,i.icon.reddit.alien,i.icon.reddit.square,i.icon.redriver,i.icon.rendact,i.icon.renren,i.icon.replyd,i.icon.resolving,i.icon.rocketchat,i.icon.rockrms,i.icon.safari,i.icon.sass,i.icon.schlix,i.icon.scribd,i.icon.searchengin,i.icon.sellcast,i.icon.sellsy,i.icon.servicestack,i.icon.shirtsinbulk,i.icon.simplybuilt,i.icon.sistrix,i.icon.skyatlas,i.icon.skype,i.icon.slack,i.icon.slack.hash,i.icon.slideshare,i.icon.snapchat,i.icon.snapchat.ghost,i.icon.snapchat.square,i.icon.soundcloud,i.icon.speakap,i.icon.spotify,i.icon.stack.exchange,i.icon.stack.overflow,i.icon.staylinked,i.icon.steam,i.icon.steam.square,i.icon.steam.symbol,i.icon.sticker.mule,i.icon.strava,i.icon.stripe,i.icon.stripe.s,i.icon.studiovinari,i.icon.stumbleupon,i.icon.stumbleupon.circle,i.icon.superpowers,i.icon.supple,i.icon.telegram,i.icon.telegram.plane,i.icon.tencent.weibo,i.icon.themeisle,i.icon.trello,i.icon.tripadvisor,i.icon.tumblr,i.icon.tumblr.square,i.icon.twitch,i.icon.twitter,i.icon.twitter.square,i.icon.typo3,i.icon.uber,i.icon.uikit,i.icon.uniregistry,i.icon.untappd,i.icon.usb,i.icon.ussunnah,i.icon.vaadin,i.icon.viacoin,i.icon.viadeo,i.icon.viadeo.square,i.icon.viber,i.icon.vimeo,i.icon.vimeo.square,i.icon.vimeo.v,i.icon.vine,i.icon.vk,i.icon.vnv,i.icon.vuejs,i.icon.wechat,i.icon.weibo,i.icon.weixin,i.icon.whatsapp,i.icon.whatsapp.square,i.icon.whmcs,i.icon.wikipedia.w,i.icon.windows,i.icon.wordpress,i.icon.wordpress.simple,i.icon.wpbeginner,i.icon.wpexplorer,i.icon.wpforms,i.icon.xbox,i.icon.xing,i.icon.xing.square,i.icon.y.combinator,i.icon.yahoo,i.icon.yandex,i.icon.yandex.international,i.icon.yelp,i.icon.yoast,i.icon.youtube,i.icon.youtube.square{font-family:brand-icons} /*! * # Semantic UI 2.4.0 - Image * http://github.com/semantic-org/semantic-ui/ @@ -153,7 +153,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.segment{position:relative;background:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);margin:1rem 0;padding:1em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background:none transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none;border:none;border-bottom:1px solid rgba(34,36,38,.15)}.ui.vertical.segment:last-child{border-bottom:none}.ui.inverted.segment>.ui.header{color:#fff}.ui[class*="bottom attached"].segment>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui[class*="top attached"].segment>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.grid>.row>.ui.segment.column,.ui.grid>.ui.segment.column,.ui.page.grid.segment{padding-top:2em;padding-bottom:2em}.ui.grid.segment{margin:1rem 0;border-radius:.28571429rem}.ui.basic.table.segment{background:#fff;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.ui[class*="very basic"].table.segment{padding:1em}.ui.placeholder.segment{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;max-width:none;-webkit-animation:none;animation:none;overflow:visible;padding:1em;min-height:18rem;background:#f9fafb;border-color:rgba(34,36,38,.15);-webkit-box-shadow:0 2px 25px 0 rgba(34,36,38,.05) inset;box-shadow:inset 0 2px 25px 0 rgba(34,36,38,.05)}.ui.placeholder.segment .button,.ui.placeholder.segment textarea{display:block}.ui.placeholder.segment .button,.ui.placeholder.segment .column .button,.ui.placeholder.segment .column .field,.ui.placeholder.segment .column>.ui.input,.ui.placeholder.segment .column textarea,.ui.placeholder.segment .field,.ui.placeholder.segment>.ui.input,.ui.placeholder.segment textarea{max-width:15rem;margin-left:auto;margin-right:auto}.ui.placeholder.segment>.inline{-ms-flex-item-align:center;align-self:center}.ui.placeholder.segment>.inline>.button{display:inline-block;width:auto;margin:0 .35714286rem 0 0}.ui.placeholder.segment>.inline>.button:last-child{margin-right:0}.ui.piled.segment,.ui.piled.segments{margin:3em 0;-webkit-box-shadow:"";box-shadow:"";z-index:auto}.ui.piled.segment:first-child{margin-top:0}.ui.piled.segment:last-child{margin-bottom:0}.ui.piled.segment:after,.ui.piled.segment:before,.ui.piled.segments:after,.ui.piled.segments:before{background-color:#fff;visibility:visible;content:"";display:block;height:100%;left:0;position:absolute;width:100%;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:"";box-shadow:""}.ui.piled.segment:before,.ui.piled.segments:before{-webkit-transform:rotate(-1.2deg);transform:rotate(-1.2deg);top:0;z-index:-2}.ui.piled.segment:after,.ui.piled.segments:after{-webkit-transform:rotate(1.2deg);transform:rotate(1.2deg);top:0;z-index:-1}.ui[class*="top attached"].piled.segment{margin-top:3em;margin-bottom:0}.ui.piled.segment[class*="top attached"]:first-child{margin-top:0}.ui.piled.segment[class*="bottom attached"]{margin-top:0;margin-bottom:3em}.ui.piled.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.stacked.segment{padding-bottom:1.4em}.ui.stacked.segment:after,.ui.stacked.segment:before,.ui.stacked.segments:after,.ui.stacked.segments:before{content:"";position:absolute;bottom:-3px;left:0;border-top:1px solid rgba(34,36,38,.15);background:rgba(0,0,0,.03);width:100%;height:6px;visibility:visible}.ui.stacked.segment:before,.ui.stacked.segments:before{display:none}.ui.tall.stacked.segment:before,.ui.tall.stacked.segments:before{display:block;bottom:0}.ui.stacked.inverted.segment:after,.ui.stacked.inverted.segment:before,.ui.stacked.inverted.segments:after,.ui.stacked.inverted.segments:before{background-color:rgba(0,0,0,.03);border-top:1px solid rgba(34,36,38,.35)}.ui.padded.segment{padding:1.5em}.ui[class*="very padded"].segment{padding:3em}.ui.padded.segment.vertical.segment,.ui[class*="very padded"].vertical.segment{padding-left:0;padding-right:0}.ui.compact.segment{display:table}.ui.compact.segments{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ui.compact.segments .segment,.ui.segments .compact.segment{display:block;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.ui.circular.segment{display:table-cell;padding:2em;text-align:center;vertical-align:middle;border-radius:500em}.ui.raised.segment,.ui.raised.segments{-webkit-box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.segments{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:relative;margin:1rem 0;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);border-radius:.28571429rem}.ui.segments:first-child{margin-top:0}.ui.segments:last-child{margin-bottom:0}.ui.segments>.segment{top:0;bottom:0;border-radius:0;margin:0;width:auto;-webkit-box-shadow:none;box-shadow:none;border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.segments:not(.horizontal)>.segment:first-child{border-top:none;margin-top:0;bottom:0;margin-bottom:0;top:0;border-radius:.28571429rem .28571429rem 0 0}.ui.segments:not(.horizontal)>.segment:last-child{top:0;bottom:0;margin-top:0;margin-bottom:0;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;border-radius:0 0 .28571429rem .28571429rem}.ui.segments:not(.horizontal)>.segment:only-child{border-radius:.28571429rem}.ui.segments>.ui.segments{border-top:1px solid rgba(34,36,38,.15);margin:1rem}.ui.segments>.segments:first-child{border-top:none}.ui.segments>.segment+.segments:not(.horizontal){margin-top:0}.ui.horizontal.segments{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;background-color:transparent;border-radius:0;padding:0;background-color:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);margin:1rem 0;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segments>.horizontal.segments{border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.horizontal.segments>.segment,.ui.segments>.horizontal.segments{margin:0;background-color:transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.ui.horizontal.segments>.segment{-webkit-box-flex:1;flex:1 1 auto;-ms-flex:1 1 0px;min-width:0;border:none;border-left:1px solid rgba(34,36,38,.15)}.ui.segments>.horizontal.segments:first-child{border-top:none}.ui.horizontal.segments>.segment:first-child{border-left:none}.ui.disabled.segment{opacity:.45;color:rgba(40,40,40,.3)}.ui.loading.segment{position:relative;cursor:default;pointer-events:none;text-shadow:none!important;color:transparent!important;-webkit-transition:all 0s linear;transition:all 0s linear}.ui.loading.segment:before{position:absolute;content:"";top:0;left:0;background:hsla(0,0%,100%,.8);width:100%;height:100%;border-radius:.28571429rem;z-index:100}.ui.loading.segment:after{position:absolute;content:"";top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:segment-spin .6s linear;animation:segment-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid rgba(0,0,0,.1);border-top-color:#767676;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}@-webkit-keyframes segment-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes segment-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.basic.segment{background:none transparent;-webkit-box-shadow:none;box-shadow:none;border:none;border-radius:0}.ui.clearing.segment:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.red.segment:not(.inverted){border-top:2px solid #db2828!important}.ui.inverted.red.segment{background-color:#db2828!important;color:#fff!important}.ui.orange.segment:not(.inverted){border-top:2px solid #f2711c!important}.ui.inverted.orange.segment{background-color:#f2711c!important;color:#fff!important}.ui.yellow.segment:not(.inverted){border-top:2px solid #fbbd08!important}.ui.inverted.yellow.segment{background-color:#fbbd08!important;color:#fff!important}.ui.olive.segment:not(.inverted){border-top:2px solid #b5cc18!important}.ui.inverted.olive.segment{background-color:#b5cc18!important;color:#fff!important}.ui.green.segment:not(.inverted){border-top:2px solid #21ba45!important}.ui.inverted.green.segment{background-color:#21ba45!important;color:#fff!important}.ui.teal.segment:not(.inverted){border-top:2px solid #00b5ad!important}.ui.inverted.teal.segment{background-color:#00b5ad!important;color:#fff!important}.ui.blue.segment:not(.inverted){border-top:2px solid #2185d0!important}.ui.inverted.blue.segment{background-color:#2185d0!important;color:#fff!important}.ui.violet.segment:not(.inverted){border-top:2px solid #6435c9!important}.ui.inverted.violet.segment{background-color:#6435c9!important;color:#fff!important}.ui.purple.segment:not(.inverted){border-top:2px solid #a333c8!important}.ui.inverted.purple.segment{background-color:#a333c8!important;color:#fff!important}.ui.pink.segment:not(.inverted){border-top:2px solid #e03997!important}.ui.inverted.pink.segment{background-color:#e03997!important;color:#fff!important}.ui.brown.segment:not(.inverted){border-top:2px solid #a5673f!important}.ui.inverted.brown.segment{background-color:#a5673f!important;color:#fff!important}.ui.grey.segment:not(.inverted){border-top:2px solid #767676!important}.ui.inverted.grey.segment{background-color:#767676!important;color:#fff!important}.ui.black.segment:not(.inverted){border-top:2px solid #1b1c1d!important}.ui.inverted.black.segment{background-color:#1b1c1d!important;color:#fff!important}.ui[class*="left aligned"].segment{text-align:left}.ui[class*="right aligned"].segment{text-align:right}.ui[class*="center aligned"].segment{text-align:center}.ui.floated.segment,.ui[class*="left floated"].segment{float:left;margin-right:1em}.ui[class*="right floated"].segment{float:right;margin-left:1em}.ui.inverted.segment{border:none;-webkit-box-shadow:none;box-shadow:none}.ui.inverted.segment,.ui.primary.inverted.segment{background:#1b1c1d;color:hsla(0,0%,100%,.9)}.ui.inverted.segment .segment{color:rgba(0,0,0,.87)}.ui.inverted.segment .inverted.segment{color:hsla(0,0%,100%,.9)}.ui.inverted.attached.segment{border-color:#555}.ui.secondary.segment{background:#f3f4f5;color:rgba(0,0,0,.6)}.ui.secondary.inverted.segment{background:#4c4f52 -webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,.2)),to(hsla(0,0%,100%,.2)));background:#4c4f52 -webkit-linear-gradient(hsla(0,0%,100%,.2),hsla(0,0%,100%,.2));background:#4c4f52 linear-gradient(hsla(0,0%,100%,.2),hsla(0,0%,100%,.2));color:hsla(0,0%,100%,.8)}.ui.tertiary.segment{background:#dcddde;color:rgba(0,0,0,.6)}.ui.tertiary.inverted.segment{background:#717579 -webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,.35)),to(hsla(0,0%,100%,.35)));background:#717579 -webkit-linear-gradient(hsla(0,0%,100%,.35),hsla(0,0%,100%,.35));background:#717579 linear-gradient(hsla(0,0%,100%,.35),hsla(0,0%,100%,.35));color:hsla(0,0%,100%,.8)}.ui.attached.segment{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);-webkit-box-shadow:none;box-shadow:none;border:1px solid #d4d4d5}.ui.attached:not(.message)+.ui.attached.segment:not(.top){border-top:none}.ui[class*="top attached"].segment{bottom:0;margin-bottom:0;top:0;margin-top:1rem;border-radius:.28571429rem .28571429rem 0 0}.ui.segment[class*="top attached"]:first-child{margin-top:0}.ui.segment[class*="bottom attached"]{bottom:0;margin-top:0;top:0;margin-bottom:1rem;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;border-radius:0 0 .28571429rem .28571429rem}.ui.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.mini.segment,.ui.mini.segments .segment{font-size:.78571429rem}.ui.tiny.segment,.ui.tiny.segments .segment{font-size:.85714286rem}.ui.small.segment,.ui.small.segments .segment{font-size:.92857143rem}.ui.segment,.ui.segments .segment{font-size:1rem}.ui.large.segment,.ui.large.segments .segment{font-size:1.14285714rem}.ui.big.segment,.ui.big.segments .segment{font-size:1.28571429rem}.ui.huge.segment,.ui.huge.segments .segment{font-size:1.42857143rem}.ui.massive.segment,.ui.massive.segments .segment{font-size:1.71428571rem} + */.ui.segment{position:relative;background:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);margin:1rem 0;padding:1em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background:none transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none;border:none;border-bottom:1px solid rgba(34,36,38,.15)}.ui.vertical.segment:last-child{border-bottom:none}.ui.inverted.segment>.ui.header{color:#fff}.ui[class*="bottom attached"].segment>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui[class*="top attached"].segment>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.grid>.row>.ui.segment.column,.ui.grid>.ui.segment.column,.ui.page.grid.segment{padding-top:2em;padding-bottom:2em}.ui.grid.segment{margin:1rem 0;border-radius:.28571429rem}.ui.basic.table.segment{background:#fff;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15)}.ui[class*="very basic"].table.segment{padding:1em}.ui.placeholder.segment{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;max-width:none;-webkit-animation:none;animation:none;overflow:visible;padding:1em;min-height:18rem;background:#f9fafb;border-color:rgba(34,36,38,.15);-webkit-box-shadow:inset 0 2px 25px 0 rgba(34,36,38,.05);box-shadow:inset 0 2px 25px 0 rgba(34,36,38,.05)}.ui.placeholder.segment .button,.ui.placeholder.segment textarea{display:block}.ui.placeholder.segment .button,.ui.placeholder.segment .column .button,.ui.placeholder.segment .column .field,.ui.placeholder.segment .column>.ui.input,.ui.placeholder.segment .column textarea,.ui.placeholder.segment .field,.ui.placeholder.segment>.ui.input,.ui.placeholder.segment textarea{max-width:15rem;margin-left:auto;margin-right:auto}.ui.placeholder.segment>.inline{-ms-flex-item-align:center;align-self:center}.ui.placeholder.segment>.inline>.button{display:inline-block;width:auto;margin:0 .35714286rem 0 0}.ui.placeholder.segment>.inline>.button:last-child{margin-right:0}.ui.piled.segment,.ui.piled.segments{margin:3em 0;-webkit-box-shadow:"";box-shadow:"";z-index:auto}.ui.piled.segment:first-child{margin-top:0}.ui.piled.segment:last-child{margin-bottom:0}.ui.piled.segment:after,.ui.piled.segment:before,.ui.piled.segments:after,.ui.piled.segments:before{background-color:#fff;visibility:visible;content:"";display:block;height:100%;left:0;position:absolute;width:100%;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:"";box-shadow:""}.ui.piled.segment:before,.ui.piled.segments:before{-webkit-transform:rotate(-1.2deg);transform:rotate(-1.2deg);top:0;z-index:-2}.ui.piled.segment:after,.ui.piled.segments:after{-webkit-transform:rotate(1.2deg);transform:rotate(1.2deg);top:0;z-index:-1}.ui[class*="top attached"].piled.segment{margin-top:3em;margin-bottom:0}.ui.piled.segment[class*="top attached"]:first-child{margin-top:0}.ui.piled.segment[class*="bottom attached"]{margin-top:0;margin-bottom:3em}.ui.piled.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.stacked.segment{padding-bottom:1.4em}.ui.stacked.segment:after,.ui.stacked.segment:before,.ui.stacked.segments:after,.ui.stacked.segments:before{content:"";position:absolute;bottom:-3px;left:0;border-top:1px solid rgba(34,36,38,.15);background:rgba(0,0,0,.03);width:100%;height:6px;visibility:visible}.ui.stacked.segment:before,.ui.stacked.segments:before{display:none}.ui.tall.stacked.segment:before,.ui.tall.stacked.segments:before{display:block;bottom:0}.ui.stacked.inverted.segment:after,.ui.stacked.inverted.segment:before,.ui.stacked.inverted.segments:after,.ui.stacked.inverted.segments:before{background-color:rgba(0,0,0,.03);border-top:1px solid rgba(34,36,38,.35)}.ui.padded.segment{padding:1.5em}.ui[class*="very padded"].segment{padding:3em}.ui.padded.segment.vertical.segment,.ui[class*="very padded"].vertical.segment{padding-left:0;padding-right:0}.ui.compact.segment{display:table}.ui.compact.segments{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ui.compact.segments .segment,.ui.segments .compact.segment{display:block;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.ui.circular.segment{display:table-cell;padding:2em;text-align:center;vertical-align:middle;border-radius:500em}.ui.raised.segment,.ui.raised.segments{-webkit-box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.segments{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:relative;margin:1rem 0;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);border-radius:.28571429rem}.ui.segments:first-child{margin-top:0}.ui.segments:last-child{margin-bottom:0}.ui.segments>.segment{top:0;bottom:0;border-radius:0;margin:0;width:auto;-webkit-box-shadow:none;box-shadow:none;border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.segments:not(.horizontal)>.segment:first-child{border-top:none;margin-top:0;bottom:0;margin-bottom:0;top:0;border-radius:.28571429rem .28571429rem 0 0}.ui.segments:not(.horizontal)>.segment:last-child{top:0;bottom:0;margin-top:0;margin-bottom:0;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;border-radius:0 0 .28571429rem .28571429rem}.ui.segments:not(.horizontal)>.segment:only-child{border-radius:.28571429rem}.ui.segments>.ui.segments{border-top:1px solid rgba(34,36,38,.15);margin:1rem}.ui.segments>.segments:first-child{border-top:none}.ui.segments>.segment+.segments:not(.horizontal){margin-top:0}.ui.horizontal.segments{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;background-color:transparent;border-radius:0;padding:0;background-color:#fff;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);margin:1rem 0;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segments>.horizontal.segments{border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.horizontal.segments>.segment,.ui.segments>.horizontal.segments{margin:0;background-color:transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.ui.horizontal.segments>.segment{-webkit-box-flex:1;flex:1 1 auto;-ms-flex:1 1 0px;min-width:0;border:none;border-left:1px solid rgba(34,36,38,.15)}.ui.segments>.horizontal.segments:first-child{border-top:none}.ui.horizontal.segments>.segment:first-child{border-left:none}.ui.disabled.segment{opacity:.45;color:rgba(40,40,40,.3)}.ui.loading.segment{position:relative;cursor:default;pointer-events:none;text-shadow:none!important;color:transparent!important;-webkit-transition:all 0s linear;transition:all 0s linear}.ui.loading.segment:before{position:absolute;content:"";top:0;left:0;background:hsla(0,0%,100%,.8);width:100%;height:100%;border-radius:.28571429rem;z-index:100}.ui.loading.segment:after{position:absolute;content:"";top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:segment-spin .6s linear;animation:segment-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid rgba(0,0,0,.1);border-top-color:#767676;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}@-webkit-keyframes segment-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes segment-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.basic.segment{background:none transparent;-webkit-box-shadow:none;box-shadow:none;border:none;border-radius:0}.ui.clearing.segment:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.red.segment:not(.inverted){border-top:2px solid #db2828!important}.ui.inverted.red.segment{background-color:#db2828!important;color:#fff!important}.ui.orange.segment:not(.inverted){border-top:2px solid #f2711c!important}.ui.inverted.orange.segment{background-color:#f2711c!important;color:#fff!important}.ui.yellow.segment:not(.inverted){border-top:2px solid #fbbd08!important}.ui.inverted.yellow.segment{background-color:#fbbd08!important;color:#fff!important}.ui.olive.segment:not(.inverted){border-top:2px solid #b5cc18!important}.ui.inverted.olive.segment{background-color:#b5cc18!important;color:#fff!important}.ui.green.segment:not(.inverted){border-top:2px solid #21ba45!important}.ui.inverted.green.segment{background-color:#21ba45!important;color:#fff!important}.ui.teal.segment:not(.inverted){border-top:2px solid #00b5ad!important}.ui.inverted.teal.segment{background-color:#00b5ad!important;color:#fff!important}.ui.blue.segment:not(.inverted){border-top:2px solid #2185d0!important}.ui.inverted.blue.segment{background-color:#2185d0!important;color:#fff!important}.ui.violet.segment:not(.inverted){border-top:2px solid #6435c9!important}.ui.inverted.violet.segment{background-color:#6435c9!important;color:#fff!important}.ui.purple.segment:not(.inverted){border-top:2px solid #a333c8!important}.ui.inverted.purple.segment{background-color:#a333c8!important;color:#fff!important}.ui.pink.segment:not(.inverted){border-top:2px solid #e03997!important}.ui.inverted.pink.segment{background-color:#e03997!important;color:#fff!important}.ui.brown.segment:not(.inverted){border-top:2px solid #a5673f!important}.ui.inverted.brown.segment{background-color:#a5673f!important;color:#fff!important}.ui.grey.segment:not(.inverted){border-top:2px solid #767676!important}.ui.inverted.grey.segment{background-color:#767676!important;color:#fff!important}.ui.black.segment:not(.inverted){border-top:2px solid #1b1c1d!important}.ui.inverted.black.segment{background-color:#1b1c1d!important;color:#fff!important}.ui[class*="left aligned"].segment{text-align:left}.ui[class*="right aligned"].segment{text-align:right}.ui[class*="center aligned"].segment{text-align:center}.ui.floated.segment,.ui[class*="left floated"].segment{float:left;margin-right:1em}.ui[class*="right floated"].segment{float:right;margin-left:1em}.ui.inverted.segment{border:none;-webkit-box-shadow:none;box-shadow:none}.ui.inverted.segment,.ui.primary.inverted.segment{background:#1b1c1d;color:hsla(0,0%,100%,.9)}.ui.inverted.segment .segment{color:rgba(0,0,0,.87)}.ui.inverted.segment .inverted.segment{color:hsla(0,0%,100%,.9)}.ui.inverted.attached.segment{border-color:#555}.ui.secondary.segment{background:#f3f4f5;color:rgba(0,0,0,.6)}.ui.secondary.inverted.segment{background:#4c4f52 -webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,.2)),to(hsla(0,0%,100%,.2)));background:#4c4f52 -webkit-linear-gradient(hsla(0,0%,100%,.2),hsla(0,0%,100%,.2));background:#4c4f52 linear-gradient(hsla(0,0%,100%,.2),hsla(0,0%,100%,.2));color:hsla(0,0%,100%,.8)}.ui.tertiary.segment{background:#dcddde;color:rgba(0,0,0,.6)}.ui.tertiary.inverted.segment{background:#717579 -webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,.35)),to(hsla(0,0%,100%,.35)));background:#717579 -webkit-linear-gradient(hsla(0,0%,100%,.35),hsla(0,0%,100%,.35));background:#717579 linear-gradient(hsla(0,0%,100%,.35),hsla(0,0%,100%,.35));color:hsla(0,0%,100%,.8)}.ui.attached.segment{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);-webkit-box-shadow:none;box-shadow:none;border:1px solid #d4d4d5}.ui.attached:not(.message)+.ui.attached.segment:not(.top){border-top:none}.ui[class*="top attached"].segment{bottom:0;margin-bottom:0;top:0;margin-top:1rem;border-radius:.28571429rem .28571429rem 0 0}.ui.segment[class*="top attached"]:first-child{margin-top:0}.ui.segment[class*="bottom attached"]{bottom:0;margin-top:0;top:0;margin-bottom:1rem;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),none;border-radius:0 0 .28571429rem .28571429rem}.ui.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.mini.segment,.ui.mini.segments .segment{font-size:.78571429rem}.ui.tiny.segment,.ui.tiny.segments .segment{font-size:.85714286rem}.ui.small.segment,.ui.small.segments .segment{font-size:.92857143rem}.ui.segment,.ui.segments .segment{font-size:1rem}.ui.large.segment,.ui.large.segments .segment{font-size:1.14285714rem}.ui.big.segment,.ui.big.segments .segment{font-size:1.28571429rem}.ui.huge.segment,.ui.huge.segments .segment{font-size:1.42857143rem}.ui.massive.segment,.ui.massive.segments .segment{font-size:1.71428571rem} /*! * # Semantic UI 2.4.0 - Step * http://github.com/semantic-org/semantic-ui/ @@ -180,7 +180,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.form{position:relative;max-width:100%}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field:last-child,.ui.form .fields:last-child .field{margin-bottom:0}.ui.form .fields .field{clear:both;margin:0}.ui.form .field>label{display:block;margin:0 0 .28571429rem;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form textarea{width:100%;vertical-align:top}.ui.form ::-webkit-datetime-edit,.ui.form ::-webkit-inner-spin-button{height:1.21428571em}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url]{font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;line-height:1.21428571em;padding:.67857143em 1em}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form textarea{margin:0;outline:none;-webkit-appearance:none;tap-highlight-color:hsla(0,0%,100%,0);font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);border-radius:.28571429rem;-webkit-box-shadow:0 0 0 0 transparent inset;box-shadow:inset 0 0 0 0 transparent;-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease}.ui.form textarea{padding:.78571429em 1em;line-height:1.2857;resize:vertical}.ui.form textarea:not([rows]){height:12em;min-height:8em;max-height:24em}.ui.form input[type=checkbox],.ui.form textarea{vertical-align:top}.ui.form input.attached{width:auto}.ui.form select{display:block;height:auto;width:100%;background:#fff;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;-webkit-box-shadow:0 0 0 0 transparent inset;box-shadow:inset 0 0 0 0 transparent;padding:.62em 1em;color:rgba(0,0,0,.87);-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease}.ui.form .field>.selection.dropdown{width:100%}.ui.form .field>.selection.dropdown>.dropdown.icon{float:right}.ui.form .inline.field>.selection.dropdown,.ui.form .inline.fields .field>.selection.dropdown{width:auto}.ui.form .inline.field>.selection.dropdown>.dropdown.icon,.ui.form .inline.fields .field>.selection.dropdown>.dropdown.icon{float:none}.ui.form .field .ui.input,.ui.form .fields .field .ui.input,.ui.form .wide.field .ui.input{width:100%}.ui.form .inline.field:not(.wide) .ui.input,.ui.form .inline.fields .field:not(.wide) .ui.input{width:auto;vertical-align:middle}.ui.form .field .ui.input input,.ui.form .fields .field .ui.input input{width:auto}.ui.form .eight.fields .ui.input input,.ui.form .five.fields .ui.input input,.ui.form .four.fields .ui.input input,.ui.form .nine.fields .ui.input input,.ui.form .seven.fields .ui.input input,.ui.form .six.fields .ui.input input,.ui.form .ten.fields .ui.input input,.ui.form .three.fields .ui.input input,.ui.form .two.fields .ui.input input,.ui.form .wide.field .ui.input input{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;width:0}.ui.form .error.message,.ui.form .success.message,.ui.form .warning.message{display:none}.ui.form .message:first-child{margin-top:0}.ui.form .field .prompt.label{white-space:normal;background:#fff!important;border:1px solid #e0b4b4!important;color:#9f3a38!important}.ui.form .inline.field .prompt,.ui.form .inline.fields .field .prompt{vertical-align:top;margin:-.25em 0 -.5em .5em}.ui.form .inline.field .prompt:before,.ui.form .inline.fields .field .prompt:before{border-width:0 0 1px 1px;bottom:auto;right:auto;top:50%;left:0}.ui.form .field.field input:-webkit-autofill{border-color:#e5dfa1!important}.ui.form .field.field input:-webkit-autofill,.ui.form .field.field input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 100px ivory inset!important;box-shadow:inset 0 0 0 100px ivory!important}.ui.form .field.field input:-webkit-autofill:focus{border-color:#d5c315!important}.ui.form .error.error input:-webkit-autofill{-webkit-box-shadow:0 0 0 100px #fffaf0 inset!important;box-shadow:inset 0 0 0 100px #fffaf0!important;border-color:#e0b4b4!important}.ui.form ::-webkit-input-placeholder{color:hsla(0,0%,74.9%,.87)}.ui.form :-ms-input-placeholder{color:hsla(0,0%,74.9%,.87)!important}.ui.form ::-moz-placeholder{color:hsla(0,0%,74.9%,.87)}.ui.form :focus::-webkit-input-placeholder{color:hsla(0,0%,45.1%,.87)}.ui.form :focus:-ms-input-placeholder{color:hsla(0,0%,45.1%,.87)!important}.ui.form :focus::-moz-placeholder{color:hsla(0,0%,45.1%,.87)}.ui.form .error ::-webkit-input-placeholder{color:#e7bdbc}.ui.form .error :-ms-input-placeholder{color:#e7bdbc!important}.ui.form .error ::-moz-placeholder{color:#e7bdbc}.ui.form .error :focus::-webkit-input-placeholder{color:#da9796}.ui.form .error :focus:-ms-input-placeholder{color:#da9796!important}.ui.form .error :focus::-moz-placeholder{color:#da9796}.ui.form input:not([type]):focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=email]:focus,.ui.form input[type=file]:focus,.ui.form input[type=number]:focus,.ui.form input[type=password]:focus,.ui.form input[type=search]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=text]:focus,.ui.form input[type=time]:focus,.ui.form input[type=url]:focus,.ui.form textarea:focus{color:rgba(0,0,0,.95);border-color:#85b7d9;border-radius:.28571429rem;background:#fff;-webkit-box-shadow:0 0 0 0 rgba(34,36,38,.35) inset;box-shadow:inset 0 0 0 0 rgba(34,36,38,.35)}.ui.form textarea:focus{-webkit-appearance:none}.ui.form.success .success.message:not(:empty){display:block}.ui.form.success .compact.success.message:not(:empty){display:inline-block}.ui.form.success .icon.success.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form.warning .warning.message:not(:empty){display:block}.ui.form.warning .compact.warning.message:not(:empty){display:inline-block}.ui.form.warning .icon.warning.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form.error .error.message:not(:empty){display:block}.ui.form.error .compact.error.message:not(:empty){display:inline-block}.ui.form.error .icon.error.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form .field.error .input,.ui.form .field.error label,.ui.form .fields.error .field .input,.ui.form .fields.error .field label{color:#9f3a38}.ui.form .field.error .corner.label,.ui.form .fields.error .field .corner.label{border-color:#9f3a38;color:#fff}.ui.form .field.error input:not([type]),.ui.form .field.error input[type=date],.ui.form .field.error input[type=datetime-local],.ui.form .field.error input[type=email],.ui.form .field.error input[type=file],.ui.form .field.error input[type=number],.ui.form .field.error input[type=password],.ui.form .field.error input[type=search],.ui.form .field.error input[type=tel],.ui.form .field.error input[type=text],.ui.form .field.error input[type=time],.ui.form .field.error input[type=url],.ui.form .field.error select,.ui.form .field.error textarea,.ui.form .fields.error .field input:not([type]),.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=datetime-local],.ui.form .fields.error .field input[type=email],.ui.form .fields.error .field input[type=file],.ui.form .fields.error .field input[type=number],.ui.form .fields.error .field input[type=password],.ui.form .fields.error .field input[type=search],.ui.form .fields.error .field input[type=tel],.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=time],.ui.form .fields.error .field input[type=url],.ui.form .fields.error .field select,.ui.form .fields.error .field textarea{background:#fff6f6;border-color:#e0b4b4;color:#9f3a38;border-radius:"";-webkit-box-shadow:none;box-shadow:none}.ui.form .field.error input:not([type]):focus,.ui.form .field.error input[type=date]:focus,.ui.form .field.error input[type=datetime-local]:focus,.ui.form .field.error input[type=email]:focus,.ui.form .field.error input[type=file]:focus,.ui.form .field.error input[type=number]:focus,.ui.form .field.error input[type=password]:focus,.ui.form .field.error input[type=search]:focus,.ui.form .field.error input[type=tel]:focus,.ui.form .field.error input[type=text]:focus,.ui.form .field.error input[type=time]:focus,.ui.form .field.error input[type=url]:focus,.ui.form .field.error select:focus,.ui.form .field.error textarea:focus{background:#fff6f6;border-color:#e0b4b4;color:#9f3a38;-webkit-appearance:none;-webkit-box-shadow:none;box-shadow:none}.ui.form .field.error select{-webkit-appearance:menulist-button}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown .item,.ui.form .field.error .ui.dropdown .text,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown .item{background:#fff6f6;color:#9f3a38}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown:hover,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown:hover{border-color:#e0b4b4!important}.ui.form .field.error .ui.dropdown:hover .menu,.ui.form .fields.error .field .ui.dropdown:hover .menu{border-color:#e0b4b4}.ui.form .field.error .ui.multiple.selection.dropdown>.label,.ui.form .fields.error .field .ui.multiple.selection.dropdown>.label{background-color:#eacbcb;color:#9f3a38}.ui.form .field.error .ui.dropdown .menu .item:hover,.ui.form .field.error .ui.dropdown .menu .selected.item,.ui.form .fields.error .field .ui.dropdown .menu .item:hover,.ui.form .fields.error .field .ui.dropdown .menu .selected.item{background-color:#fbe7e7}.ui.form .field.error .ui.dropdown .menu .active.item,.ui.form .fields.error .field .ui.dropdown .menu .active.item{background-color:#fdcfcf!important}.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label{color:#9f3a38}.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before{background:#fff6f6;border-color:#e0b4b4}.ui.form .field.error .checkbox .box:after,.ui.form .field.error .checkbox label:after,.ui.form .fields.error .field .checkbox .box:after,.ui.form .fields.error .field .checkbox label:after{color:#9f3a38}.ui.form .disabled.field,.ui.form .disabled.fields .field,.ui.form .field :disabled{pointer-events:none;opacity:.45}.ui.form .field.disabled>label,.ui.form .fields.disabled>label{opacity:.45}.ui.form .field.disabled :disabled{opacity:1}.ui.loading.form{position:relative;cursor:default;pointer-events:none}.ui.loading.form:before{position:absolute;content:"";top:0;left:0;background:hsla(0,0%,100%,.8);width:100%;height:100%;z-index:100}.ui.loading.form:after{position:absolute;content:"";top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:form-spin .6s linear;animation:form-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid rgba(0,0,0,.1);border-top-color:#767676;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}@-webkit-keyframes form-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes form-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.form .required.field>.checkbox:after,.ui.form .required.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after,.ui.form .required.fields:not(.grouped)>.field>label:after{margin:-.2em 0 0 .2em;content:"*";color:#db2828}.ui.form .required.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.fields:not(.grouped)>.field>label:after{display:inline-block;vertical-align:top}.ui.form .required.field>.checkbox:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after{position:absolute;top:0;left:100%}.ui.form .inverted.segment .ui.checkbox .box,.ui.form .inverted.segment .ui.checkbox label,.ui.form .inverted.segment label,.ui.inverted.form .inline.field>label,.ui.inverted.form .inline.field>p,.ui.inverted.form .inline.fields .field>label,.ui.inverted.form .inline.fields .field>p,.ui.inverted.form .inline.fields>label,.ui.inverted.form .ui.checkbox .box,.ui.inverted.form .ui.checkbox label,.ui.inverted.form label{color:hsla(0,0%,100%,.9)}.ui.inverted.form input:not([type]),.ui.inverted.form input[type=date],.ui.inverted.form input[type=datetime-local],.ui.inverted.form input[type=email],.ui.inverted.form input[type=file],.ui.inverted.form input[type=number],.ui.inverted.form input[type=password],.ui.inverted.form input[type=search],.ui.inverted.form input[type=tel],.ui.inverted.form input[type=text],.ui.inverted.form input[type=time],.ui.inverted.form input[type=url]{background:#fff;border-color:hsla(0,0%,100%,.1);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.ui.form .grouped.fields{display:block;margin:0 0 1em}.ui.form .grouped.fields:last-child{margin-bottom:0}.ui.form .grouped.fields>label{margin:0 0 .28571429rem;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form .grouped.fields .field,.ui.form .grouped.inline.fields .field{display:block;margin:.5em 0;padding:0}.ui.form .fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:0 -.5em 1em}.ui.form .fields>.field{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;padding-left:.5em;padding-right:.5em}.ui.form .fields>.field:first-child{border-left:none;-webkit-box-shadow:none;box-shadow:none}.ui.form .two.fields>.field,.ui.form .two.fields>.fields{width:50%}.ui.form .three.fields>.field,.ui.form .three.fields>.fields{width:33.33333333%}.ui.form .four.fields>.field,.ui.form .four.fields>.fields{width:25%}.ui.form .five.fields>.field,.ui.form .five.fields>.fields{width:20%}.ui.form .six.fields>.field,.ui.form .six.fields>.fields{width:16.66666667%}.ui.form .seven.fields>.field,.ui.form .seven.fields>.fields{width:14.28571429%}.ui.form .eight.fields>.field,.ui.form .eight.fields>.fields{width:12.5%}.ui.form .nine.fields>.field,.ui.form .nine.fields>.fields{width:11.11111111%}.ui.form .ten.fields>.field,.ui.form .ten.fields>.fields{width:10%}@media only screen and (max-width:767px){.ui.form .fields{-ms-flex-wrap:wrap;flex-wrap:wrap}.ui.form:not(.unstackable) .eight.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .eight.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .nine.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .nine.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .seven.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .seven.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .six.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .six.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .ten.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .ten.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable)>.field,.ui[class*="equal width"].form:not(.unstackable) .fields>.field{width:100%!important;margin:0 0 1em}}.ui.form .fields .wide.field{width:6.25%;padding-left:.5em;padding-right:.5em}.ui.form .one.wide.field{width:6.25%!important}.ui.form .two.wide.field{width:12.5%!important}.ui.form .three.wide.field{width:18.75%!important}.ui.form .four.wide.field{width:25%!important}.ui.form .five.wide.field{width:31.25%!important}.ui.form .six.wide.field{width:37.5%!important}.ui.form .seven.wide.field{width:43.75%!important}.ui.form .eight.wide.field{width:50%!important}.ui.form .nine.wide.field{width:56.25%!important}.ui.form .ten.wide.field{width:62.5%!important}.ui.form .eleven.wide.field{width:68.75%!important}.ui.form .twelve.wide.field{width:75%!important}.ui.form .thirteen.wide.field{width:81.25%!important}.ui.form .fourteen.wide.field{width:87.5%!important}.ui.form .fifteen.wide.field{width:93.75%!important}.ui.form .sixteen.wide.field{width:100%!important}@media only screen and (max-width:767px){.ui.form:not(.unstackable) .fields:not(.unstackable)>.eight.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.eleven.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.fifteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.five.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.four.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.fourteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.nine.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.seven.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.six.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.sixteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.ten.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.thirteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.three.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.twelve.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.two.wide.field,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.fields{width:100%!important}.ui.form .fields{margin-bottom:0}}.ui.form [class*="equal width"].fields>.field,.ui[class*="equal width"].form .fields>.field{width:100%;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.ui.form .inline.fields{margin:0 0 1em;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.form .inline.fields .field{margin:0;padding:0 1em 0 0}.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.fields>label{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:baseline;font-size:.92857143em;font-weight:700;color:rgba(0,0,0,.87);text-transform:none}.ui.form .inline.fields>label{margin:.035714em 1em 0 0}.ui.form .inline.field>input,.ui.form .inline.field>select,.ui.form .inline.fields .field>input,.ui.form .inline.fields .field>select{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:middle;font-size:1em}.ui.form .inline.field>:first-child,.ui.form .inline.fields .field>:first-child{margin:0 .85714286em 0 0}.ui.form .inline.field>:only-child,.ui.form .inline.fields .field>:only-child{margin:0}.ui.form .inline.fields .wide.field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.form .inline.fields .wide.field>input,.ui.form .inline.fields .wide.field>select{width:100%}.ui.mini.form{font-size:.78571429rem}.ui.tiny.form{font-size:.85714286rem}.ui.small.form{font-size:.92857143rem}.ui.form{font-size:1rem}.ui.large.form{font-size:1.14285714rem}.ui.big.form{font-size:1.28571429rem}.ui.huge.form{font-size:1.42857143rem}.ui.massive.form{font-size:1.71428571rem} + */.ui.form{position:relative;max-width:100%}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field:last-child,.ui.form .fields:last-child .field{margin-bottom:0}.ui.form .fields .field{clear:both;margin:0}.ui.form .field>label{display:block;margin:0 0 .28571429rem;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form textarea{width:100%;vertical-align:top}.ui.form ::-webkit-datetime-edit,.ui.form ::-webkit-inner-spin-button{height:1.21428571em}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url]{font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;line-height:1.21428571em;padding:.67857143em 1em}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form textarea{margin:0;outline:none;-webkit-appearance:none;tap-highlight-color:hsla(0,0%,100%,0);font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);border-radius:.28571429rem;-webkit-box-shadow:inset 0 0 0 0 transparent;box-shadow:inset 0 0 0 0 transparent;-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease}.ui.form textarea{padding:.78571429em 1em;line-height:1.2857;resize:vertical}.ui.form textarea:not([rows]){height:12em;min-height:8em;max-height:24em}.ui.form input[type=checkbox],.ui.form textarea{vertical-align:top}.ui.form input.attached{width:auto}.ui.form select{display:block;height:auto;width:100%;background:#fff;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;-webkit-box-shadow:inset 0 0 0 0 transparent;box-shadow:inset 0 0 0 0 transparent;padding:.62em 1em;color:rgba(0,0,0,.87);-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease}.ui.form .field>.selection.dropdown{width:100%}.ui.form .field>.selection.dropdown>.dropdown.icon{float:right}.ui.form .inline.field>.selection.dropdown,.ui.form .inline.fields .field>.selection.dropdown{width:auto}.ui.form .inline.field>.selection.dropdown>.dropdown.icon,.ui.form .inline.fields .field>.selection.dropdown>.dropdown.icon{float:none}.ui.form .field .ui.input,.ui.form .fields .field .ui.input,.ui.form .wide.field .ui.input{width:100%}.ui.form .inline.field:not(.wide) .ui.input,.ui.form .inline.fields .field:not(.wide) .ui.input{width:auto;vertical-align:middle}.ui.form .field .ui.input input,.ui.form .fields .field .ui.input input{width:auto}.ui.form .eight.fields .ui.input input,.ui.form .five.fields .ui.input input,.ui.form .four.fields .ui.input input,.ui.form .nine.fields .ui.input input,.ui.form .seven.fields .ui.input input,.ui.form .six.fields .ui.input input,.ui.form .ten.fields .ui.input input,.ui.form .three.fields .ui.input input,.ui.form .two.fields .ui.input input,.ui.form .wide.field .ui.input input{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;width:0}.ui.form .error.message,.ui.form .success.message,.ui.form .warning.message{display:none}.ui.form .message:first-child{margin-top:0}.ui.form .field .prompt.label{white-space:normal;background:#fff!important;border:1px solid #e0b4b4!important;color:#9f3a38!important}.ui.form .inline.field .prompt,.ui.form .inline.fields .field .prompt{vertical-align:top;margin:-.25em 0 -.5em .5em}.ui.form .inline.field .prompt:before,.ui.form .inline.fields .field .prompt:before{border-width:0 0 1px 1px;bottom:auto;right:auto;top:50%;left:0}.ui.form .field.field input:-webkit-autofill{border-color:#e5dfa1!important}.ui.form .field.field input:-webkit-autofill,.ui.form .field.field input:-webkit-autofill:focus{-webkit-box-shadow:inset 0 0 0 100px ivory!important;box-shadow:inset 0 0 0 100px ivory!important}.ui.form .field.field input:-webkit-autofill:focus{border-color:#d5c315!important}.ui.form .error.error input:-webkit-autofill{-webkit-box-shadow:inset 0 0 0 100px #fffaf0!important;box-shadow:inset 0 0 0 100px #fffaf0!important;border-color:#e0b4b4!important}.ui.form ::-webkit-input-placeholder{color:hsla(0,0%,74.9%,.87)}.ui.form :-ms-input-placeholder{color:hsla(0,0%,74.9%,.87)!important}.ui.form ::-moz-placeholder{color:hsla(0,0%,74.9%,.87)}.ui.form :focus::-webkit-input-placeholder{color:hsla(0,0%,45.1%,.87)}.ui.form :focus:-ms-input-placeholder{color:hsla(0,0%,45.1%,.87)!important}.ui.form :focus::-moz-placeholder{color:hsla(0,0%,45.1%,.87)}.ui.form .error ::-webkit-input-placeholder{color:#e7bdbc}.ui.form .error :-ms-input-placeholder{color:#e7bdbc!important}.ui.form .error ::-moz-placeholder{color:#e7bdbc}.ui.form .error :focus::-webkit-input-placeholder{color:#da9796}.ui.form .error :focus:-ms-input-placeholder{color:#da9796!important}.ui.form .error :focus::-moz-placeholder{color:#da9796}.ui.form input:not([type]):focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=email]:focus,.ui.form input[type=file]:focus,.ui.form input[type=number]:focus,.ui.form input[type=password]:focus,.ui.form input[type=search]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=text]:focus,.ui.form input[type=time]:focus,.ui.form input[type=url]:focus,.ui.form textarea:focus{color:rgba(0,0,0,.95);border-color:#85b7d9;border-radius:.28571429rem;background:#fff;-webkit-box-shadow:inset 0 0 0 0 rgba(34,36,38,.35);box-shadow:inset 0 0 0 0 rgba(34,36,38,.35)}.ui.form textarea:focus{-webkit-appearance:none}.ui.form.success .success.message:not(:empty){display:block}.ui.form.success .compact.success.message:not(:empty){display:inline-block}.ui.form.success .icon.success.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form.warning .warning.message:not(:empty){display:block}.ui.form.warning .compact.warning.message:not(:empty){display:inline-block}.ui.form.warning .icon.warning.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form.error .error.message:not(:empty){display:block}.ui.form.error .compact.error.message:not(:empty){display:inline-block}.ui.form.error .icon.error.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form .field.error .input,.ui.form .field.error label,.ui.form .fields.error .field .input,.ui.form .fields.error .field label{color:#9f3a38}.ui.form .field.error .corner.label,.ui.form .fields.error .field .corner.label{border-color:#9f3a38;color:#fff}.ui.form .field.error input:not([type]),.ui.form .field.error input[type=date],.ui.form .field.error input[type=datetime-local],.ui.form .field.error input[type=email],.ui.form .field.error input[type=file],.ui.form .field.error input[type=number],.ui.form .field.error input[type=password],.ui.form .field.error input[type=search],.ui.form .field.error input[type=tel],.ui.form .field.error input[type=text],.ui.form .field.error input[type=time],.ui.form .field.error input[type=url],.ui.form .field.error select,.ui.form .field.error textarea,.ui.form .fields.error .field input:not([type]),.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=datetime-local],.ui.form .fields.error .field input[type=email],.ui.form .fields.error .field input[type=file],.ui.form .fields.error .field input[type=number],.ui.form .fields.error .field input[type=password],.ui.form .fields.error .field input[type=search],.ui.form .fields.error .field input[type=tel],.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=time],.ui.form .fields.error .field input[type=url],.ui.form .fields.error .field select,.ui.form .fields.error .field textarea{background:#fff6f6;border-color:#e0b4b4;color:#9f3a38;border-radius:"";-webkit-box-shadow:none;box-shadow:none}.ui.form .field.error input:not([type]):focus,.ui.form .field.error input[type=date]:focus,.ui.form .field.error input[type=datetime-local]:focus,.ui.form .field.error input[type=email]:focus,.ui.form .field.error input[type=file]:focus,.ui.form .field.error input[type=number]:focus,.ui.form .field.error input[type=password]:focus,.ui.form .field.error input[type=search]:focus,.ui.form .field.error input[type=tel]:focus,.ui.form .field.error input[type=text]:focus,.ui.form .field.error input[type=time]:focus,.ui.form .field.error input[type=url]:focus,.ui.form .field.error select:focus,.ui.form .field.error textarea:focus{background:#fff6f6;border-color:#e0b4b4;color:#9f3a38;-webkit-appearance:none;-webkit-box-shadow:none;box-shadow:none}.ui.form .field.error select{-webkit-appearance:menulist-button}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown .item,.ui.form .field.error .ui.dropdown .text,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown .item{background:#fff6f6;color:#9f3a38}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown:hover,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown:hover{border-color:#e0b4b4!important}.ui.form .field.error .ui.dropdown:hover .menu,.ui.form .fields.error .field .ui.dropdown:hover .menu{border-color:#e0b4b4}.ui.form .field.error .ui.multiple.selection.dropdown>.label,.ui.form .fields.error .field .ui.multiple.selection.dropdown>.label{background-color:#eacbcb;color:#9f3a38}.ui.form .field.error .ui.dropdown .menu .item:hover,.ui.form .field.error .ui.dropdown .menu .selected.item,.ui.form .fields.error .field .ui.dropdown .menu .item:hover,.ui.form .fields.error .field .ui.dropdown .menu .selected.item{background-color:#fbe7e7}.ui.form .field.error .ui.dropdown .menu .active.item,.ui.form .fields.error .field .ui.dropdown .menu .active.item{background-color:#fdcfcf!important}.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label{color:#9f3a38}.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before{background:#fff6f6;border-color:#e0b4b4}.ui.form .field.error .checkbox .box:after,.ui.form .field.error .checkbox label:after,.ui.form .fields.error .field .checkbox .box:after,.ui.form .fields.error .field .checkbox label:after{color:#9f3a38}.ui.form .disabled.field,.ui.form .disabled.fields .field,.ui.form .field :disabled{pointer-events:none;opacity:.45}.ui.form .field.disabled>label,.ui.form .fields.disabled>label{opacity:.45}.ui.form .field.disabled :disabled{opacity:1}.ui.loading.form{position:relative;cursor:default;pointer-events:none}.ui.loading.form:before{position:absolute;content:"";top:0;left:0;background:hsla(0,0%,100%,.8);width:100%;height:100%;z-index:100}.ui.loading.form:after{position:absolute;content:"";top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:form-spin .6s linear;animation:form-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid rgba(0,0,0,.1);border-top-color:#767676;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}@-webkit-keyframes form-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes form-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.form .required.field>.checkbox:after,.ui.form .required.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after,.ui.form .required.fields:not(.grouped)>.field>label:after{margin:-.2em 0 0 .2em;content:"*";color:#db2828}.ui.form .required.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.fields:not(.grouped)>.field>label:after{display:inline-block;vertical-align:top}.ui.form .required.field>.checkbox:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after{position:absolute;top:0;left:100%}.ui.form .inverted.segment .ui.checkbox .box,.ui.form .inverted.segment .ui.checkbox label,.ui.form .inverted.segment label,.ui.inverted.form .inline.field>label,.ui.inverted.form .inline.field>p,.ui.inverted.form .inline.fields .field>label,.ui.inverted.form .inline.fields .field>p,.ui.inverted.form .inline.fields>label,.ui.inverted.form .ui.checkbox .box,.ui.inverted.form .ui.checkbox label,.ui.inverted.form label{color:hsla(0,0%,100%,.9)}.ui.inverted.form input:not([type]),.ui.inverted.form input[type=date],.ui.inverted.form input[type=datetime-local],.ui.inverted.form input[type=email],.ui.inverted.form input[type=file],.ui.inverted.form input[type=number],.ui.inverted.form input[type=password],.ui.inverted.form input[type=search],.ui.inverted.form input[type=tel],.ui.inverted.form input[type=text],.ui.inverted.form input[type=time],.ui.inverted.form input[type=url]{background:#fff;border-color:hsla(0,0%,100%,.1);color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none}.ui.form .grouped.fields{display:block;margin:0 0 1em}.ui.form .grouped.fields:last-child{margin-bottom:0}.ui.form .grouped.fields>label{margin:0 0 .28571429rem;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form .grouped.fields .field,.ui.form .grouped.inline.fields .field{display:block;margin:.5em 0;padding:0}.ui.form .fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:0 -.5em 1em}.ui.form .fields>.field{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;padding-left:.5em;padding-right:.5em}.ui.form .fields>.field:first-child{border-left:none;-webkit-box-shadow:none;box-shadow:none}.ui.form .two.fields>.field,.ui.form .two.fields>.fields{width:50%}.ui.form .three.fields>.field,.ui.form .three.fields>.fields{width:33.33333333%}.ui.form .four.fields>.field,.ui.form .four.fields>.fields{width:25%}.ui.form .five.fields>.field,.ui.form .five.fields>.fields{width:20%}.ui.form .six.fields>.field,.ui.form .six.fields>.fields{width:16.66666667%}.ui.form .seven.fields>.field,.ui.form .seven.fields>.fields{width:14.28571429%}.ui.form .eight.fields>.field,.ui.form .eight.fields>.fields{width:12.5%}.ui.form .nine.fields>.field,.ui.form .nine.fields>.fields{width:11.11111111%}.ui.form .ten.fields>.field,.ui.form .ten.fields>.fields{width:10%}@media only screen and (max-width:767px){.ui.form .fields{-ms-flex-wrap:wrap;flex-wrap:wrap}.ui.form:not(.unstackable) .eight.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .eight.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .nine.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .nine.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .seven.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .seven.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .six.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .six.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .ten.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .ten.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable)>.field,.ui[class*="equal width"].form:not(.unstackable) .fields>.field{width:100%!important;margin:0 0 1em}}.ui.form .fields .wide.field{width:6.25%;padding-left:.5em;padding-right:.5em}.ui.form .one.wide.field{width:6.25%!important}.ui.form .two.wide.field{width:12.5%!important}.ui.form .three.wide.field{width:18.75%!important}.ui.form .four.wide.field{width:25%!important}.ui.form .five.wide.field{width:31.25%!important}.ui.form .six.wide.field{width:37.5%!important}.ui.form .seven.wide.field{width:43.75%!important}.ui.form .eight.wide.field{width:50%!important}.ui.form .nine.wide.field{width:56.25%!important}.ui.form .ten.wide.field{width:62.5%!important}.ui.form .eleven.wide.field{width:68.75%!important}.ui.form .twelve.wide.field{width:75%!important}.ui.form .thirteen.wide.field{width:81.25%!important}.ui.form .fourteen.wide.field{width:87.5%!important}.ui.form .fifteen.wide.field{width:93.75%!important}.ui.form .sixteen.wide.field{width:100%!important}@media only screen and (max-width:767px){.ui.form:not(.unstackable) .fields:not(.unstackable)>.eight.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.eleven.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.fifteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.five.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.four.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.fourteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.nine.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.seven.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.six.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.sixteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.ten.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.thirteen.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.three.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.twelve.wide.field,.ui.form:not(.unstackable) .fields:not(.unstackable)>.two.wide.field,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .five.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .four.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .three.fields:not(.unstackable)>.fields,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.field,.ui.form:not(.unstackable) .two.fields:not(.unstackable)>.fields{width:100%!important}.ui.form .fields{margin-bottom:0}}.ui.form [class*="equal width"].fields>.field,.ui[class*="equal width"].form .fields>.field{width:100%;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.ui.form .inline.fields{margin:0 0 1em;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.form .inline.fields .field{margin:0;padding:0 1em 0 0}.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.fields>label{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:baseline;font-size:.92857143em;font-weight:700;color:rgba(0,0,0,.87);text-transform:none}.ui.form .inline.fields>label{margin:.035714em 1em 0 0}.ui.form .inline.field>input,.ui.form .inline.field>select,.ui.form .inline.fields .field>input,.ui.form .inline.fields .field>select{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:middle;font-size:1em}.ui.form .inline.field>:first-child,.ui.form .inline.fields .field>:first-child{margin:0 .85714286em 0 0}.ui.form .inline.field>:only-child,.ui.form .inline.fields .field>:only-child{margin:0}.ui.form .inline.fields .wide.field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.form .inline.fields .wide.field>input,.ui.form .inline.fields .wide.field>select{width:100%}.ui.mini.form{font-size:.78571429rem}.ui.tiny.form{font-size:.85714286rem}.ui.small.form{font-size:.92857143rem}.ui.form{font-size:1rem}.ui.large.form{font-size:1.14285714rem}.ui.big.form{font-size:1.28571429rem}.ui.huge.form{font-size:1.42857143rem}.ui.massive.form{font-size:1.71428571rem} /*! * # Semantic UI 2.4.0 - Grid * http://github.com/semantic-org/semantic-ui/ @@ -198,7 +198,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.message{position:relative;min-height:1em;margin:1em 0;background:#f8f8f9;padding:1em 1.5em;line-height:1.4285em;color:rgba(0,0,0,.87);-webkit-transition:opacity .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease,-webkit-box-shadow .1s ease;border-radius:.28571429rem;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.22) inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px rgba(34,36,38,.22),0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{display:block;font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;margin:-.14285714em 0 0}.ui.message .header:not(.ui){font-size:1.14285714em}.ui.message p{opacity:.85;margin:.75em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.25em}.ui.message .list:not(.ui){text-align:left;padding:0;opacity:.85;list-style-position:inside;margin:.5em 0 0}.ui.message .list:not(.ui):first-child{margin-top:0}.ui.message .list:not(.ui):last-child{margin-bottom:0}.ui.message .list:not(.ui) li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message .list:not(.ui) li:before{position:absolute;content:"•";left:-1em;height:100%;vertical-align:baseline}.ui.message .list:not(.ui) li:last-child{margin-bottom:0}.ui.message>.icon{margin-right:.6em}.ui.message>.close.icon{cursor:pointer;position:absolute;margin:0;top:.78575em;right:.5em;opacity:.7;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.message>.close.icon:hover{opacity:1}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.dropdown .menu>.message{margin:0 -1px}.ui.visible.visible.visible.visible.message{display:block}.ui.icon.visible.visible.visible.visible.message{display:-webkit-box;display:-ms-flexbox;display:flex}.ui.hidden.hidden.hidden.hidden.message{display:none}.ui.compact.message{display:inline-block}.ui.compact.icon.message{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ui.attached.message{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px rgba(34,36,38,.15);margin-left:-1px;margin-right:-1px}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.15) inset,0 1px 2px 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.15),0 1px 2px 0 rgba(34,36,38,.15)}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{width:auto}.ui.icon.message{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.icon.message>.icon:not(.close){display:block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;line-height:1;vertical-align:middle;font-size:3em;opacity:.8}.ui.icon.message>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;vertical-align:middle}.ui.icon.message .icon:not(.close)+.content{padding-left:0}.ui.icon.message .circular.icon{width:1em}.ui.floating.message{-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.22) inset,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.22),0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.black.message{background-color:#1b1c1d;color:hsla(0,0%,100%,.9)}.ui.positive.message{background-color:#fcfff5;color:#2c662d}.ui.attached.positive.message,.ui.positive.message{-webkit-box-shadow:0 0 0 1px #a3c293 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a3c293,0 0 0 0 transparent}.ui.positive.message .header{color:#1a531b}.ui.negative.message{background-color:#fff6f6;color:#9f3a38}.ui.attached.negative.message,.ui.negative.message{-webkit-box-shadow:0 0 0 1px #e0b4b4 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #e0b4b4,0 0 0 0 transparent}.ui.negative.message .header{color:#912d2b}.ui.info.message{background-color:#f8ffff;color:#276f86}.ui.attached.info.message,.ui.info.message{-webkit-box-shadow:0 0 0 1px #a9d5de inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a9d5de,0 0 0 0 transparent}.ui.info.message .header{color:#0e566c}.ui.warning.message{background-color:#fffaf3;color:#573a08}.ui.attached.warning.message,.ui.warning.message{-webkit-box-shadow:0 0 0 1px #c9ba9b inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #c9ba9b,0 0 0 0 transparent}.ui.warning.message .header{color:#794b02}.ui.error.message{background-color:#fff6f6;color:#9f3a38}.ui.attached.error.message,.ui.error.message{-webkit-box-shadow:0 0 0 1px #e0b4b4 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #e0b4b4,0 0 0 0 transparent}.ui.error.message .header{color:#912d2b}.ui.success.message{background-color:#fcfff5;color:#2c662d}.ui.attached.success.message,.ui.success.message{-webkit-box-shadow:0 0 0 1px #a3c293 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a3c293,0 0 0 0 transparent}.ui.success.message .header{color:#1a531b}.ui.black.message,.ui.inverted.message{background-color:#1b1c1d;color:hsla(0,0%,100%,.9)}.ui.red.message{background-color:#ffe8e6;color:#db2828;-webkit-box-shadow:0 0 0 1px #db2828 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #db2828,0 0 0 0 transparent}.ui.red.message .header{color:#c82121}.ui.orange.message{background-color:#ffedde;color:#f2711c;-webkit-box-shadow:0 0 0 1px #f2711c inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #f2711c,0 0 0 0 transparent}.ui.orange.message .header{color:#e7640d}.ui.yellow.message{background-color:#fff8db;color:#b58105;-webkit-box-shadow:0 0 0 1px #b58105 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #b58105,0 0 0 0 transparent}.ui.yellow.message .header{color:#9c6f04}.ui.olive.message{background-color:#fbfdef;color:#8abc1e;-webkit-box-shadow:0 0 0 1px #8abc1e inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #8abc1e,0 0 0 0 transparent}.ui.olive.message .header{color:#7aa61a}.ui.green.message{background-color:#e5f9e7;color:#1ebc30;-webkit-box-shadow:0 0 0 1px #1ebc30 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #1ebc30,0 0 0 0 transparent}.ui.green.message .header{color:#1aa62a}.ui.teal.message{background-color:#e1f7f7;color:#10a3a3;-webkit-box-shadow:0 0 0 1px #10a3a3 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #10a3a3,0 0 0 0 transparent}.ui.teal.message .header{color:#0e8c8c}.ui.blue.message{background-color:#dff0ff;color:#2185d0;-webkit-box-shadow:0 0 0 1px #2185d0 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #2185d0,0 0 0 0 transparent}.ui.blue.message .header{color:#1e77ba}.ui.violet.message{background-color:#eae7ff;color:#6435c9;-webkit-box-shadow:0 0 0 1px #6435c9 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #6435c9,0 0 0 0 transparent}.ui.violet.message .header{color:#5a30b5}.ui.purple.message{background-color:#f6e7ff;color:#a333c8;-webkit-box-shadow:0 0 0 1px #a333c8 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a333c8,0 0 0 0 transparent}.ui.purple.message .header{color:#922eb4}.ui.pink.message{background-color:#ffe3fb;color:#e03997;-webkit-box-shadow:0 0 0 1px #e03997 inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #e03997,0 0 0 0 transparent}.ui.pink.message .header{color:#dd238b}.ui.brown.message{background-color:#f1e2d3;color:#a5673f;-webkit-box-shadow:0 0 0 1px #a5673f inset,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a5673f,0 0 0 0 transparent}.ui.brown.message .header{color:#935b38}.ui.mini.message{font-size:.78571429em}.ui.tiny.message{font-size:.85714286em}.ui.small.message{font-size:.92857143em}.ui.message{font-size:1em}.ui.large.message{font-size:1.14285714em}.ui.big.message{font-size:1.28571429em}.ui.huge.message{font-size:1.42857143em}.ui.massive.message{font-size:1.71428571em} + */.ui.message{position:relative;min-height:1em;margin:1em 0;background:#f8f8f9;padding:1em 1.5em;line-height:1.4285em;color:rgba(0,0,0,.87);-webkit-transition:opacity .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease,-webkit-box-shadow .1s ease;border-radius:.28571429rem;-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.22),0 0 0 0 transparent;box-shadow:inset 0 0 0 1px rgba(34,36,38,.22),0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{display:block;font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;margin:-.14285714em 0 0}.ui.message .header:not(.ui){font-size:1.14285714em}.ui.message p{opacity:.85;margin:.75em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.25em}.ui.message .list:not(.ui){text-align:left;padding:0;opacity:.85;list-style-position:inside;margin:.5em 0 0}.ui.message .list:not(.ui):first-child{margin-top:0}.ui.message .list:not(.ui):last-child{margin-bottom:0}.ui.message .list:not(.ui) li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message .list:not(.ui) li:before{position:absolute;content:"•";left:-1em;height:100%;vertical-align:baseline}.ui.message .list:not(.ui) li:last-child{margin-bottom:0}.ui.message>.icon{margin-right:.6em}.ui.message>.close.icon{cursor:pointer;position:absolute;margin:0;top:.78575em;right:.5em;opacity:.7;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.message>.close.icon:hover{opacity:1}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.dropdown .menu>.message{margin:0 -1px}.ui.visible.visible.visible.visible.message{display:block}.ui.icon.visible.visible.visible.visible.message{display:-webkit-box;display:-ms-flexbox;display:flex}.ui.hidden.hidden.hidden.hidden.message{display:none}.ui.compact.message{display:inline-block}.ui.compact.icon.message{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ui.attached.message{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0;-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.15);margin-left:-1px;margin-right:-1px}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem;-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.15),0 1px 2px 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.15),0 1px 2px 0 rgba(34,36,38,.15)}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{width:auto}.ui.icon.message{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.icon.message>.icon:not(.close){display:block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;line-height:1;vertical-align:middle;font-size:3em;opacity:.8}.ui.icon.message>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;vertical-align:middle}.ui.icon.message .icon:not(.close)+.content{padding-left:0}.ui.icon.message .circular.icon{width:1em}.ui.floating.message{-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.22),0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.22),0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.black.message{background-color:#1b1c1d;color:hsla(0,0%,100%,.9)}.ui.positive.message{background-color:#fcfff5;color:#2c662d}.ui.attached.positive.message,.ui.positive.message{-webkit-box-shadow:inset 0 0 0 1px #a3c293,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a3c293,0 0 0 0 transparent}.ui.positive.message .header{color:#1a531b}.ui.negative.message{background-color:#fff6f6;color:#9f3a38}.ui.attached.negative.message,.ui.negative.message{-webkit-box-shadow:inset 0 0 0 1px #e0b4b4,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #e0b4b4,0 0 0 0 transparent}.ui.negative.message .header{color:#912d2b}.ui.info.message{background-color:#f8ffff;color:#276f86}.ui.attached.info.message,.ui.info.message{-webkit-box-shadow:inset 0 0 0 1px #a9d5de,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a9d5de,0 0 0 0 transparent}.ui.info.message .header{color:#0e566c}.ui.warning.message{background-color:#fffaf3;color:#573a08}.ui.attached.warning.message,.ui.warning.message{-webkit-box-shadow:inset 0 0 0 1px #c9ba9b,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #c9ba9b,0 0 0 0 transparent}.ui.warning.message .header{color:#794b02}.ui.error.message{background-color:#fff6f6;color:#9f3a38}.ui.attached.error.message,.ui.error.message{-webkit-box-shadow:inset 0 0 0 1px #e0b4b4,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #e0b4b4,0 0 0 0 transparent}.ui.error.message .header{color:#912d2b}.ui.success.message{background-color:#fcfff5;color:#2c662d}.ui.attached.success.message,.ui.success.message{-webkit-box-shadow:inset 0 0 0 1px #a3c293,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a3c293,0 0 0 0 transparent}.ui.success.message .header{color:#1a531b}.ui.black.message,.ui.inverted.message{background-color:#1b1c1d;color:hsla(0,0%,100%,.9)}.ui.red.message{background-color:#ffe8e6;color:#db2828;-webkit-box-shadow:inset 0 0 0 1px #db2828,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #db2828,0 0 0 0 transparent}.ui.red.message .header{color:#c82121}.ui.orange.message{background-color:#ffedde;color:#f2711c;-webkit-box-shadow:inset 0 0 0 1px #f2711c,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #f2711c,0 0 0 0 transparent}.ui.orange.message .header{color:#e7640d}.ui.yellow.message{background-color:#fff8db;color:#b58105;-webkit-box-shadow:inset 0 0 0 1px #b58105,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #b58105,0 0 0 0 transparent}.ui.yellow.message .header{color:#9c6f04}.ui.olive.message{background-color:#fbfdef;color:#8abc1e;-webkit-box-shadow:inset 0 0 0 1px #8abc1e,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #8abc1e,0 0 0 0 transparent}.ui.olive.message .header{color:#7aa61a}.ui.green.message{background-color:#e5f9e7;color:#1ebc30;-webkit-box-shadow:inset 0 0 0 1px #1ebc30,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #1ebc30,0 0 0 0 transparent}.ui.green.message .header{color:#1aa62a}.ui.teal.message{background-color:#e1f7f7;color:#10a3a3;-webkit-box-shadow:inset 0 0 0 1px #10a3a3,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #10a3a3,0 0 0 0 transparent}.ui.teal.message .header{color:#0e8c8c}.ui.blue.message{background-color:#dff0ff;color:#2185d0;-webkit-box-shadow:inset 0 0 0 1px #2185d0,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #2185d0,0 0 0 0 transparent}.ui.blue.message .header{color:#1e77ba}.ui.violet.message{background-color:#eae7ff;color:#6435c9;-webkit-box-shadow:inset 0 0 0 1px #6435c9,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #6435c9,0 0 0 0 transparent}.ui.violet.message .header{color:#5a30b5}.ui.purple.message{background-color:#f6e7ff;color:#a333c8;-webkit-box-shadow:inset 0 0 0 1px #a333c8,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a333c8,0 0 0 0 transparent}.ui.purple.message .header{color:#922eb4}.ui.pink.message{background-color:#ffe3fb;color:#e03997;-webkit-box-shadow:inset 0 0 0 1px #e03997,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #e03997,0 0 0 0 transparent}.ui.pink.message .header{color:#dd238b}.ui.brown.message{background-color:#f1e2d3;color:#a5673f;-webkit-box-shadow:inset 0 0 0 1px #a5673f,0 0 0 0 transparent;box-shadow:inset 0 0 0 1px #a5673f,0 0 0 0 transparent}.ui.brown.message .header{color:#935b38}.ui.mini.message{font-size:.78571429em}.ui.tiny.message{font-size:.85714286em}.ui.small.message{font-size:.92857143em}.ui.message{font-size:1em}.ui.large.message{font-size:1.14285714em}.ui.big.message{font-size:1.28571429em}.ui.huge.message{font-size:1.42857143em}.ui.massive.message{font-size:1.71428571em} /*! * # Semantic UI 2.4.0 - Table * http://github.com/semantic-org/semantic-ui/ @@ -207,7 +207,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.table{width:100%;background:#fff;margin:1em 0;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:none;box-shadow:none;border-radius:.28571429rem;text-align:left;color:rgba(0,0,0,.87);border-collapse:separate;border-spacing:0}.ui.table:first-child{margin-top:0}.ui.table:last-child{margin-bottom:0}.ui.table td,.ui.table th{-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.table thead{-webkit-box-shadow:none;box-shadow:none}.ui.table thead th{cursor:auto;background:#f9fafb;text-align:inherit;color:rgba(0,0,0,.87);padding:.92857143em .78571429em;vertical-align:inherit;font-style:none;font-weight:700;text-transform:none;border-bottom:1px solid rgba(34,36,38,.1);border-left:none}.ui.table thead tr>th:first-child{border-left:none}.ui.table thead tr:first-child>th:first-child{border-radius:.28571429rem 0 0 0}.ui.table thead tr:first-child>th:last-child{border-radius:0 .28571429rem 0 0}.ui.table thead tr:first-child>th:only-child{border-radius:.28571429rem .28571429rem 0 0}.ui.table tfoot{-webkit-box-shadow:none;box-shadow:none}.ui.table tfoot th{cursor:auto;border-top:1px solid rgba(34,36,38,.15);background:#f9fafb;text-align:inherit;color:rgba(0,0,0,.87);padding:.78571429em;vertical-align:middle;font-style:normal;font-weight:400;text-transform:none}.ui.table tfoot tr>th:first-child{border-left:none}.ui.table tfoot tr:first-child>th:first-child{border-radius:0 0 0 .28571429rem}.ui.table tfoot tr:first-child>th:last-child{border-radius:0 0 .28571429rem 0}.ui.table tfoot tr:first-child>th:only-child{border-radius:0 0 .28571429rem .28571429rem}.ui.table tr td{border-top:1px solid rgba(34,36,38,.1)}.ui.table tr:first-child td{border-top:none}.ui.table tbody+tbody tr:first-child td{border-top:1px solid rgba(34,36,38,.1)}.ui.table td{padding:.78571429em;text-align:inherit}.ui.table>.icon{vertical-align:baseline}.ui.table>.icon:only-child{margin:0}.ui.table.segment{padding:0}.ui.table.segment:after{display:none}.ui.table.segment.stacked:after{display:block}@media only screen and (max-width:767px){.ui.table:not(.unstackable){width:100%}.ui.table:not(.unstackable) tbody,.ui.table:not(.unstackable) tr,.ui.table:not(.unstackable) tr>td,.ui.table:not(.unstackable) tr>th{width:auto!important;display:block!important}.ui.table:not(.unstackable){padding:0}.ui.table:not(.unstackable) tfoot,.ui.table:not(.unstackable) thead{display:block}.ui.table:not(.unstackable) tr{padding-top:1em;padding-bottom:1em;-webkit-box-shadow:0 -1px 0 0 rgba(0,0,0,.1) inset!important;box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.1)!important}.ui.table:not(.unstackable) tr>td,.ui.table:not(.unstackable) tr>th{background:none;border:none!important;padding:.25em .75em!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.table:not(.unstackable) td:first-child,.ui.table:not(.unstackable) th:first-child{font-weight:700}.ui.definition.table:not(.unstackable) thead th:first-child{-webkit-box-shadow:none!important;box-shadow:none!important}}.ui.table td .image,.ui.table td .image img,.ui.table th .image,.ui.table th .image img{max-width:none}.ui.structured.table{border-collapse:collapse}.ui.structured.table thead th{border-left:none;border-right:none}.ui.structured.sortable.table thead th{border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(34,36,38,.15)}.ui.structured.basic.table th{border-left:none;border-right:none}.ui.structured.celled.table tr td,.ui.structured.celled.table tr th{border-left:1px solid rgba(34,36,38,.1);border-right:1px solid rgba(34,36,38,.1)}.ui.definition.table thead:not(.full-width) th:first-child{pointer-events:none;background:transparent;font-weight:400;color:rgba(0,0,0,.4);-webkit-box-shadow:-1px -1px 0 1px #fff;box-shadow:-1px -1px 0 1px #fff}.ui.definition.table tfoot:not(.full-width) th:first-child{pointer-events:none;background:transparent;font-weight:rgba(0,0,0,.4);color:normal;-webkit-box-shadow:1px 1px 0 1px #fff;box-shadow:1px 1px 0 1px #fff}.ui.celled.definition.table thead:not(.full-width) th:first-child{-webkit-box-shadow:0 -1px 0 1px #fff;box-shadow:0 -1px 0 1px #fff}.ui.celled.definition.table tfoot:not(.full-width) th:first-child{-webkit-box-shadow:0 1px 0 1px #fff;box-shadow:0 1px 0 1px #fff}.ui.definition.table tr td.definition,.ui.definition.table tr td:first-child:not(.ignored){background:rgba(0,0,0,.03);font-weight:700;color:rgba(0,0,0,.95);text-transform:"";-webkit-box-shadow:"";box-shadow:"";text-align:"";font-size:1em;padding-left:"";padding-right:""}.ui.definition.table td:nth-child(2),.ui.definition.table tfoot:not(.full-width) th:nth-child(2),.ui.definition.table thead:not(.full-width) th:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.table td.positive,.ui.table tr.positive{-webkit-box-shadow:0 0 0 #a3c293 inset;box-shadow:inset 0 0 0 #a3c293;background:#fcfff5!important;color:#2c662d!important}.ui.table td.negative,.ui.table tr.negative{background:#fff6f6!important;color:#9f3a38!important}.ui.table td.error,.ui.table td.negative,.ui.table tr.error,.ui.table tr.negative{-webkit-box-shadow:0 0 0 #e0b4b4 inset;box-shadow:inset 0 0 0 #e0b4b4}.ui.table td.error,.ui.table tr.error{background:#fff6f6!important;color:#9f3a38!important}.ui.table td.warning,.ui.table tr.warning{-webkit-box-shadow:0 0 0 #c9ba9b inset;box-shadow:inset 0 0 0 #c9ba9b;background:#fffaf3!important;color:#573a08!important}.ui.table td.active,.ui.table tr.active{-webkit-box-shadow:0 0 0 rgba(0,0,0,.87) inset;box-shadow:inset 0 0 0 rgba(0,0,0,.87);background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.ui.table tr.disabled:hover,.ui.table tr.disabled td,.ui.table tr:hover td.disabled,.ui.table tr td.disabled{pointer-events:none;color:rgba(40,40,40,.3)}@media only screen and (max-width:991px){.ui[class*="tablet stackable"].table,.ui[class*="tablet stackable"].table tbody,.ui[class*="tablet stackable"].table tr,.ui[class*="tablet stackable"].table tr>td,.ui[class*="tablet stackable"].table tr>th{width:100%!important;display:block!important}.ui[class*="tablet stackable"].table{padding:0}.ui[class*="tablet stackable"].table tfoot,.ui[class*="tablet stackable"].table thead{display:block}.ui[class*="tablet stackable"].table tr{padding-top:1em;padding-bottom:1em;-webkit-box-shadow:0 -1px 0 0 rgba(0,0,0,.1) inset!important;box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.1)!important}.ui[class*="tablet stackable"].table tr>td,.ui[class*="tablet stackable"].table tr>th{background:none;border:none!important;padding:.25em .75em;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.definition[class*="tablet stackable"].table thead th:first-child{-webkit-box-shadow:none!important;box-shadow:none!important}}.ui.table[class*="left aligned"],.ui.table [class*="left aligned"]{text-align:left}.ui.table[class*="center aligned"],.ui.table [class*="center aligned"]{text-align:center}.ui.table[class*="right aligned"],.ui.table [class*="right aligned"]{text-align:right}.ui.table[class*="top aligned"],.ui.table [class*="top aligned"]{vertical-align:top}.ui.table[class*="middle aligned"],.ui.table [class*="middle aligned"]{vertical-align:middle}.ui.table[class*="bottom aligned"],.ui.table [class*="bottom aligned"]{vertical-align:bottom}.ui.table td.collapsing,.ui.table th.collapsing{width:1px;white-space:nowrap}.ui.fixed.table{table-layout:fixed}.ui.fixed.table td,.ui.fixed.table th{overflow:hidden;text-overflow:ellipsis}.ui.selectable.table tbody tr:hover,.ui.table tbody tr td.selectable:hover{background:rgba(0,0,0,.05)!important;color:rgba(0,0,0,.95)!important}.ui.inverted.table tbody tr td.selectable:hover,.ui.selectable.inverted.table tbody tr:hover{background:hsla(0,0%,100%,.08)!important;color:#fff!important}.ui.table tbody tr td.selectable{padding:0}.ui.table tbody tr td.selectable>a:not(.ui){display:block;color:inherit;padding:.78571429em}.ui.selectable.table tr.error:hover,.ui.selectable.table tr:hover td.error,.ui.table tr td.selectable.error:hover{background:#ffe7e7!important;color:#943634!important}.ui.selectable.table tr.warning:hover,.ui.selectable.table tr:hover td.warning,.ui.table tr td.selectable.warning:hover{background:#fff4e4!important;color:#493107!important}.ui.selectable.table tr.active:hover,.ui.selectable.table tr:hover td.active,.ui.table tr td.selectable.active:hover{background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.ui.selectable.table tr.positive:hover,.ui.selectable.table tr:hover td.positive,.ui.table tr td.selectable.positive:hover{background:#f7ffe6!important;color:#275b28!important}.ui.selectable.table tr.negative:hover,.ui.selectable.table tr:hover td.negative,.ui.table tr td.selectable.negative:hover{background:#ffe7e7!important;color:#943634!important}.ui.attached.table{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);-webkit-box-shadow:none;box-shadow:none;border:1px solid #d4d4d5}.ui.attached+.ui.attached.table:not(.top){border-top:none}.ui[class*="top attached"].table{bottom:0;margin-bottom:0;top:0;margin-top:1em;border-radius:.28571429rem .28571429rem 0 0}.ui.table[class*="top attached"]:first-child{margin-top:0}.ui[class*="bottom attached"].table{bottom:0;margin-top:0;top:0;margin-bottom:1em;-webkit-box-shadow:none,none;box-shadow:none,none;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].table:last-child{margin-bottom:0}.ui.striped.table>tr:nth-child(2n),.ui.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,50,.02)}.ui.inverted.striped.table>tr:nth-child(2n),.ui.inverted.striped.table tbody tr:nth-child(2n){background-color:hsla(0,0%,100%,.05)}.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover{background:#efefef!important;color:rgba(0,0,0,.95)!important}.ui.table[class*="single line"],.ui.table [class*="single line"]{white-space:nowrap}.ui.red.table{border-top:.2em solid #db2828}.ui.inverted.red.table{background-color:#db2828!important;color:#fff!important}.ui.orange.table{border-top:.2em solid #f2711c}.ui.inverted.orange.table{background-color:#f2711c!important;color:#fff!important}.ui.yellow.table{border-top:.2em solid #fbbd08}.ui.inverted.yellow.table{background-color:#fbbd08!important;color:#fff!important}.ui.olive.table{border-top:.2em solid #b5cc18}.ui.inverted.olive.table{background-color:#b5cc18!important;color:#fff!important}.ui.green.table{border-top:.2em solid #21ba45}.ui.inverted.green.table{background-color:#21ba45!important;color:#fff!important}.ui.teal.table{border-top:.2em solid #00b5ad}.ui.inverted.teal.table{background-color:#00b5ad!important;color:#fff!important}.ui.blue.table{border-top:.2em solid #2185d0}.ui.inverted.blue.table{background-color:#2185d0!important;color:#fff!important}.ui.violet.table{border-top:.2em solid #6435c9}.ui.inverted.violet.table{background-color:#6435c9!important;color:#fff!important}.ui.purple.table{border-top:.2em solid #a333c8}.ui.inverted.purple.table{background-color:#a333c8!important;color:#fff!important}.ui.pink.table{border-top:.2em solid #e03997}.ui.inverted.pink.table{background-color:#e03997!important;color:#fff!important}.ui.brown.table{border-top:.2em solid #a5673f}.ui.inverted.brown.table{background-color:#a5673f!important;color:#fff!important}.ui.grey.table{border-top:.2em solid #767676}.ui.inverted.grey.table{background-color:#767676!important;color:#fff!important}.ui.black.table{border-top:.2em solid #1b1c1d}.ui.inverted.black.table{background-color:#1b1c1d!important;color:#fff!important}.ui.one.column.table td{width:100%}.ui.two.column.table td{width:50%}.ui.three.column.table td{width:33.33333333%}.ui.four.column.table td{width:25%}.ui.five.column.table td{width:20%}.ui.six.column.table td{width:16.66666667%}.ui.seven.column.table td{width:14.28571429%}.ui.eight.column.table td{width:12.5%}.ui.nine.column.table td{width:11.11111111%}.ui.ten.column.table td{width:10%}.ui.eleven.column.table td{width:9.09090909%}.ui.twelve.column.table td{width:8.33333333%}.ui.thirteen.column.table td{width:7.69230769%}.ui.fourteen.column.table td{width:7.14285714%}.ui.fifteen.column.table td{width:6.66666667%}.ui.sixteen.column.table td,.ui.table td.one.wide,.ui.table th.one.wide{width:6.25%}.ui.table td.two.wide,.ui.table th.two.wide{width:12.5%}.ui.table td.three.wide,.ui.table th.three.wide{width:18.75%}.ui.table td.four.wide,.ui.table th.four.wide{width:25%}.ui.table td.five.wide,.ui.table th.five.wide{width:31.25%}.ui.table td.six.wide,.ui.table th.six.wide{width:37.5%}.ui.table td.seven.wide,.ui.table th.seven.wide{width:43.75%}.ui.table td.eight.wide,.ui.table th.eight.wide{width:50%}.ui.table td.nine.wide,.ui.table th.nine.wide{width:56.25%}.ui.table td.ten.wide,.ui.table th.ten.wide{width:62.5%}.ui.table td.eleven.wide,.ui.table th.eleven.wide{width:68.75%}.ui.table td.twelve.wide,.ui.table th.twelve.wide{width:75%}.ui.table td.thirteen.wide,.ui.table th.thirteen.wide{width:81.25%}.ui.table td.fourteen.wide,.ui.table th.fourteen.wide{width:87.5%}.ui.table td.fifteen.wide,.ui.table th.fifteen.wide{width:93.75%}.ui.table td.sixteen.wide,.ui.table th.sixteen.wide{width:100%}.ui.sortable.table thead th{cursor:pointer;white-space:nowrap;border-left:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87)}.ui.sortable.table thead th:first-child{border-left:none}.ui.sortable.table thead th.sorted,.ui.sortable.table thead th.sorted:hover{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.sortable.table thead th:after{display:none;font-style:normal;font-weight:400;text-decoration:inherit;content:"";height:1em;width:auto;opacity:.8;margin:0 0 0 .5em;font-family:Icons}.ui.sortable.table thead th.ascending:after{content:"\f0d8"}.ui.sortable.table thead th.descending:after{content:"\f0d7"}.ui.sortable.table th.disabled:hover{cursor:auto;color:rgba(40,40,40,.3)}.ui.sortable.table thead th:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8)}.ui.sortable.table thead th.sorted{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.sortable.table thead th.sorted:after{display:inline-block}.ui.sortable.table thead th.sorted:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.inverted.sortable.table thead th.sorted{background:hsla(0,0%,100%,.15) -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:hsla(0,0%,100%,.15) -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:hsla(0,0%,100%,.15) linear-gradient(transparent,rgba(0,0,0,.05));color:#fff}.ui.inverted.sortable.table thead th:hover{background:hsla(0,0%,100%,.08) -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:hsla(0,0%,100%,.08) -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:hsla(0,0%,100%,.08) linear-gradient(transparent,rgba(0,0,0,.05));color:#fff}.ui.inverted.sortable.table thead th{border-left-color:transparent;border-right-color:transparent}.ui.inverted.table{background:#333;color:hsla(0,0%,100%,.9);border:none}.ui.inverted.table th{background-color:rgba(0,0,0,.15);color:hsla(0,0%,100%,.9)!important}.ui.inverted.table th,.ui.inverted.table tr td{border-color:hsla(0,0%,100%,.1)!important}.ui.inverted.table tr.disabled:hover td,.ui.inverted.table tr.disabled td,.ui.inverted.table tr:hover td.disabled,.ui.inverted.table tr td.disabled{pointer-events:none;color:hsla(0,0%,88.2%,.3)}.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,.ui.inverted.definition.table thead:not(.full-width) th:first-child{background:#fff}.ui.inverted.definition.table tr td:first-child{background:hsla(0,0%,100%,.02);color:#fff}.ui.collapsing.table{width:auto}.ui.basic.table{background:transparent;border:1px solid rgba(34,36,38,.15)}.ui.basic.table,.ui.basic.table tfoot,.ui.basic.table thead{-webkit-box-shadow:none;box-shadow:none}.ui.basic.table th{background:transparent;border-left:none}.ui.basic.table tbody tr{border-bottom:1px solid rgba(0,0,0,.1)}.ui.basic.table td{background:transparent}.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.05)!important}.ui[class*="very basic"].table{border:none}.ui[class*="very basic"].table:not(.sortable):not(.striped) td,.ui[class*="very basic"].table:not(.sortable):not(.striped) th{padding:""}.ui[class*="very basic"].table:not(.sortable):not(.striped) td:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped) th:first-child{padding-left:0}.ui[class*="very basic"].table:not(.sortable):not(.striped) td:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped) th:last-child{padding-right:0}.ui[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th{padding-top:0}.ui.celled.table tr td,.ui.celled.table tr th{border-left:1px solid rgba(34,36,38,.1)}.ui.celled.table tr td:first-child,.ui.celled.table tr th:first-child{border-left:none}.ui.padded.table th{padding-left:1em;padding-right:1em}.ui.padded.table td,.ui.padded.table th{padding:1em}.ui[class*="very padded"].table th{padding-left:1.5em;padding-right:1.5em}.ui[class*="very padded"].table td{padding:1.5em}.ui.compact.table th{padding-left:.7em;padding-right:.7em}.ui.compact.table td{padding:.5em .7em}.ui[class*="very compact"].table th{padding-left:.6em;padding-right:.6em}.ui[class*="very compact"].table td{padding:.4em .6em}.ui.small.table{font-size:.9em}.ui.table{font-size:1em}.ui.large.table{font-size:1.1em} + */.ui.table{width:100%;background:#fff;margin:1em 0;border:1px solid rgba(34,36,38,.15);-webkit-box-shadow:none;box-shadow:none;border-radius:.28571429rem;text-align:left;color:rgba(0,0,0,.87);border-collapse:separate;border-spacing:0}.ui.table:first-child{margin-top:0}.ui.table:last-child{margin-bottom:0}.ui.table td,.ui.table th{-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.table thead{-webkit-box-shadow:none;box-shadow:none}.ui.table thead th{cursor:auto;background:#f9fafb;text-align:inherit;color:rgba(0,0,0,.87);padding:.92857143em .78571429em;vertical-align:inherit;font-style:none;font-weight:700;text-transform:none;border-bottom:1px solid rgba(34,36,38,.1);border-left:none}.ui.table thead tr>th:first-child{border-left:none}.ui.table thead tr:first-child>th:first-child{border-radius:.28571429rem 0 0 0}.ui.table thead tr:first-child>th:last-child{border-radius:0 .28571429rem 0 0}.ui.table thead tr:first-child>th:only-child{border-radius:.28571429rem .28571429rem 0 0}.ui.table tfoot{-webkit-box-shadow:none;box-shadow:none}.ui.table tfoot th{cursor:auto;border-top:1px solid rgba(34,36,38,.15);background:#f9fafb;text-align:inherit;color:rgba(0,0,0,.87);padding:.78571429em;vertical-align:middle;font-style:normal;font-weight:400;text-transform:none}.ui.table tfoot tr>th:first-child{border-left:none}.ui.table tfoot tr:first-child>th:first-child{border-radius:0 0 0 .28571429rem}.ui.table tfoot tr:first-child>th:last-child{border-radius:0 0 .28571429rem 0}.ui.table tfoot tr:first-child>th:only-child{border-radius:0 0 .28571429rem .28571429rem}.ui.table tr td{border-top:1px solid rgba(34,36,38,.1)}.ui.table tr:first-child td{border-top:none}.ui.table tbody+tbody tr:first-child td{border-top:1px solid rgba(34,36,38,.1)}.ui.table td{padding:.78571429em;text-align:inherit}.ui.table>.icon{vertical-align:baseline}.ui.table>.icon:only-child{margin:0}.ui.table.segment{padding:0}.ui.table.segment:after{display:none}.ui.table.segment.stacked:after{display:block}@media only screen and (max-width:767px){.ui.table:not(.unstackable){width:100%}.ui.table:not(.unstackable) tbody,.ui.table:not(.unstackable) tr,.ui.table:not(.unstackable) tr>td,.ui.table:not(.unstackable) tr>th{width:auto!important;display:block!important}.ui.table:not(.unstackable){padding:0}.ui.table:not(.unstackable) tfoot,.ui.table:not(.unstackable) thead{display:block}.ui.table:not(.unstackable) tr{padding-top:1em;padding-bottom:1em;-webkit-box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.1)!important;box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.1)!important}.ui.table:not(.unstackable) tr>td,.ui.table:not(.unstackable) tr>th{background:none;border:none!important;padding:.25em .75em!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.table:not(.unstackable) td:first-child,.ui.table:not(.unstackable) th:first-child{font-weight:700}.ui.definition.table:not(.unstackable) thead th:first-child{-webkit-box-shadow:none!important;box-shadow:none!important}}.ui.table td .image,.ui.table td .image img,.ui.table th .image,.ui.table th .image img{max-width:none}.ui.structured.table{border-collapse:collapse}.ui.structured.table thead th{border-left:none;border-right:none}.ui.structured.sortable.table thead th{border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(34,36,38,.15)}.ui.structured.basic.table th{border-left:none;border-right:none}.ui.structured.celled.table tr td,.ui.structured.celled.table tr th{border-left:1px solid rgba(34,36,38,.1);border-right:1px solid rgba(34,36,38,.1)}.ui.definition.table thead:not(.full-width) th:first-child{pointer-events:none;background:transparent;font-weight:400;color:rgba(0,0,0,.4);-webkit-box-shadow:-1px -1px 0 1px #fff;box-shadow:-1px -1px 0 1px #fff}.ui.definition.table tfoot:not(.full-width) th:first-child{pointer-events:none;background:transparent;font-weight:rgba(0,0,0,.4);color:normal;-webkit-box-shadow:1px 1px 0 1px #fff;box-shadow:1px 1px 0 1px #fff}.ui.celled.definition.table thead:not(.full-width) th:first-child{-webkit-box-shadow:0 -1px 0 1px #fff;box-shadow:0 -1px 0 1px #fff}.ui.celled.definition.table tfoot:not(.full-width) th:first-child{-webkit-box-shadow:0 1px 0 1px #fff;box-shadow:0 1px 0 1px #fff}.ui.definition.table tr td.definition,.ui.definition.table tr td:first-child:not(.ignored){background:rgba(0,0,0,.03);font-weight:700;color:rgba(0,0,0,.95);text-transform:"";-webkit-box-shadow:"";box-shadow:"";text-align:"";font-size:1em;padding-left:"";padding-right:""}.ui.definition.table td:nth-child(2),.ui.definition.table tfoot:not(.full-width) th:nth-child(2),.ui.definition.table thead:not(.full-width) th:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.table td.positive,.ui.table tr.positive{-webkit-box-shadow:inset 0 0 0 #a3c293;box-shadow:inset 0 0 0 #a3c293;background:#fcfff5!important;color:#2c662d!important}.ui.table td.negative,.ui.table tr.negative{background:#fff6f6!important;color:#9f3a38!important}.ui.table td.error,.ui.table td.negative,.ui.table tr.error,.ui.table tr.negative{-webkit-box-shadow:inset 0 0 0 #e0b4b4;box-shadow:inset 0 0 0 #e0b4b4}.ui.table td.error,.ui.table tr.error{background:#fff6f6!important;color:#9f3a38!important}.ui.table td.warning,.ui.table tr.warning{-webkit-box-shadow:inset 0 0 0 #c9ba9b;box-shadow:inset 0 0 0 #c9ba9b;background:#fffaf3!important;color:#573a08!important}.ui.table td.active,.ui.table tr.active{-webkit-box-shadow:inset 0 0 0 rgba(0,0,0,.87);box-shadow:inset 0 0 0 rgba(0,0,0,.87);background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.ui.table tr.disabled:hover,.ui.table tr.disabled td,.ui.table tr:hover td.disabled,.ui.table tr td.disabled{pointer-events:none;color:rgba(40,40,40,.3)}@media only screen and (max-width:991px){.ui[class*="tablet stackable"].table,.ui[class*="tablet stackable"].table tbody,.ui[class*="tablet stackable"].table tr,.ui[class*="tablet stackable"].table tr>td,.ui[class*="tablet stackable"].table tr>th{width:100%!important;display:block!important}.ui[class*="tablet stackable"].table{padding:0}.ui[class*="tablet stackable"].table tfoot,.ui[class*="tablet stackable"].table thead{display:block}.ui[class*="tablet stackable"].table tr{padding-top:1em;padding-bottom:1em;-webkit-box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.1)!important;box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.1)!important}.ui[class*="tablet stackable"].table tr>td,.ui[class*="tablet stackable"].table tr>th{background:none;border:none!important;padding:.25em .75em;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.definition[class*="tablet stackable"].table thead th:first-child{-webkit-box-shadow:none!important;box-shadow:none!important}}.ui.table[class*="left aligned"],.ui.table [class*="left aligned"]{text-align:left}.ui.table[class*="center aligned"],.ui.table [class*="center aligned"]{text-align:center}.ui.table[class*="right aligned"],.ui.table [class*="right aligned"]{text-align:right}.ui.table[class*="top aligned"],.ui.table [class*="top aligned"]{vertical-align:top}.ui.table[class*="middle aligned"],.ui.table [class*="middle aligned"]{vertical-align:middle}.ui.table[class*="bottom aligned"],.ui.table [class*="bottom aligned"]{vertical-align:bottom}.ui.table td.collapsing,.ui.table th.collapsing{width:1px;white-space:nowrap}.ui.fixed.table{table-layout:fixed}.ui.fixed.table td,.ui.fixed.table th{overflow:hidden;text-overflow:ellipsis}.ui.selectable.table tbody tr:hover,.ui.table tbody tr td.selectable:hover{background:rgba(0,0,0,.05)!important;color:rgba(0,0,0,.95)!important}.ui.inverted.table tbody tr td.selectable:hover,.ui.selectable.inverted.table tbody tr:hover{background:hsla(0,0%,100%,.08)!important;color:#fff!important}.ui.table tbody tr td.selectable{padding:0}.ui.table tbody tr td.selectable>a:not(.ui){display:block;color:inherit;padding:.78571429em}.ui.selectable.table tr.error:hover,.ui.selectable.table tr:hover td.error,.ui.table tr td.selectable.error:hover{background:#ffe7e7!important;color:#943634!important}.ui.selectable.table tr.warning:hover,.ui.selectable.table tr:hover td.warning,.ui.table tr td.selectable.warning:hover{background:#fff4e4!important;color:#493107!important}.ui.selectable.table tr.active:hover,.ui.selectable.table tr:hover td.active,.ui.table tr td.selectable.active:hover{background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.ui.selectable.table tr.positive:hover,.ui.selectable.table tr:hover td.positive,.ui.table tr td.selectable.positive:hover{background:#f7ffe6!important;color:#275b28!important}.ui.selectable.table tr.negative:hover,.ui.selectable.table tr:hover td.negative,.ui.table tr td.selectable.negative:hover{background:#ffe7e7!important;color:#943634!important}.ui.attached.table{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);-webkit-box-shadow:none;box-shadow:none;border:1px solid #d4d4d5}.ui.attached+.ui.attached.table:not(.top){border-top:none}.ui[class*="top attached"].table{bottom:0;margin-bottom:0;top:0;margin-top:1em;border-radius:.28571429rem .28571429rem 0 0}.ui.table[class*="top attached"]:first-child{margin-top:0}.ui[class*="bottom attached"].table{bottom:0;margin-top:0;top:0;margin-bottom:1em;-webkit-box-shadow:none,none;box-shadow:none,none;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].table:last-child{margin-bottom:0}.ui.striped.table>tr:nth-child(2n),.ui.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,50,.02)}.ui.inverted.striped.table>tr:nth-child(2n),.ui.inverted.striped.table tbody tr:nth-child(2n){background-color:hsla(0,0%,100%,.05)}.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover{background:#efefef!important;color:rgba(0,0,0,.95)!important}.ui.table[class*="single line"],.ui.table [class*="single line"]{white-space:nowrap}.ui.red.table{border-top:.2em solid #db2828}.ui.inverted.red.table{background-color:#db2828!important;color:#fff!important}.ui.orange.table{border-top:.2em solid #f2711c}.ui.inverted.orange.table{background-color:#f2711c!important;color:#fff!important}.ui.yellow.table{border-top:.2em solid #fbbd08}.ui.inverted.yellow.table{background-color:#fbbd08!important;color:#fff!important}.ui.olive.table{border-top:.2em solid #b5cc18}.ui.inverted.olive.table{background-color:#b5cc18!important;color:#fff!important}.ui.green.table{border-top:.2em solid #21ba45}.ui.inverted.green.table{background-color:#21ba45!important;color:#fff!important}.ui.teal.table{border-top:.2em solid #00b5ad}.ui.inverted.teal.table{background-color:#00b5ad!important;color:#fff!important}.ui.blue.table{border-top:.2em solid #2185d0}.ui.inverted.blue.table{background-color:#2185d0!important;color:#fff!important}.ui.violet.table{border-top:.2em solid #6435c9}.ui.inverted.violet.table{background-color:#6435c9!important;color:#fff!important}.ui.purple.table{border-top:.2em solid #a333c8}.ui.inverted.purple.table{background-color:#a333c8!important;color:#fff!important}.ui.pink.table{border-top:.2em solid #e03997}.ui.inverted.pink.table{background-color:#e03997!important;color:#fff!important}.ui.brown.table{border-top:.2em solid #a5673f}.ui.inverted.brown.table{background-color:#a5673f!important;color:#fff!important}.ui.grey.table{border-top:.2em solid #767676}.ui.inverted.grey.table{background-color:#767676!important;color:#fff!important}.ui.black.table{border-top:.2em solid #1b1c1d}.ui.inverted.black.table{background-color:#1b1c1d!important;color:#fff!important}.ui.one.column.table td{width:100%}.ui.two.column.table td{width:50%}.ui.three.column.table td{width:33.33333333%}.ui.four.column.table td{width:25%}.ui.five.column.table td{width:20%}.ui.six.column.table td{width:16.66666667%}.ui.seven.column.table td{width:14.28571429%}.ui.eight.column.table td{width:12.5%}.ui.nine.column.table td{width:11.11111111%}.ui.ten.column.table td{width:10%}.ui.eleven.column.table td{width:9.09090909%}.ui.twelve.column.table td{width:8.33333333%}.ui.thirteen.column.table td{width:7.69230769%}.ui.fourteen.column.table td{width:7.14285714%}.ui.fifteen.column.table td{width:6.66666667%}.ui.sixteen.column.table td,.ui.table td.one.wide,.ui.table th.one.wide{width:6.25%}.ui.table td.two.wide,.ui.table th.two.wide{width:12.5%}.ui.table td.three.wide,.ui.table th.three.wide{width:18.75%}.ui.table td.four.wide,.ui.table th.four.wide{width:25%}.ui.table td.five.wide,.ui.table th.five.wide{width:31.25%}.ui.table td.six.wide,.ui.table th.six.wide{width:37.5%}.ui.table td.seven.wide,.ui.table th.seven.wide{width:43.75%}.ui.table td.eight.wide,.ui.table th.eight.wide{width:50%}.ui.table td.nine.wide,.ui.table th.nine.wide{width:56.25%}.ui.table td.ten.wide,.ui.table th.ten.wide{width:62.5%}.ui.table td.eleven.wide,.ui.table th.eleven.wide{width:68.75%}.ui.table td.twelve.wide,.ui.table th.twelve.wide{width:75%}.ui.table td.thirteen.wide,.ui.table th.thirteen.wide{width:81.25%}.ui.table td.fourteen.wide,.ui.table th.fourteen.wide{width:87.5%}.ui.table td.fifteen.wide,.ui.table th.fifteen.wide{width:93.75%}.ui.table td.sixteen.wide,.ui.table th.sixteen.wide{width:100%}.ui.sortable.table thead th{cursor:pointer;white-space:nowrap;border-left:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87)}.ui.sortable.table thead th:first-child{border-left:none}.ui.sortable.table thead th.sorted,.ui.sortable.table thead th.sorted:hover{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.sortable.table thead th:after{display:none;font-style:normal;font-weight:400;text-decoration:inherit;content:"";height:1em;width:auto;opacity:.8;margin:0 0 0 .5em;font-family:Icons}.ui.sortable.table thead th.ascending:after{content:"\f0d8"}.ui.sortable.table thead th.descending:after{content:"\f0d7"}.ui.sortable.table th.disabled:hover{cursor:auto;color:rgba(40,40,40,.3)}.ui.sortable.table thead th:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8)}.ui.sortable.table thead th.sorted{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.sortable.table thead th.sorted:after{display:inline-block}.ui.sortable.table thead th.sorted:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.inverted.sortable.table thead th.sorted{background:hsla(0,0%,100%,.15) -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:hsla(0,0%,100%,.15) -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:hsla(0,0%,100%,.15) linear-gradient(transparent,rgba(0,0,0,.05));color:#fff}.ui.inverted.sortable.table thead th:hover{background:hsla(0,0%,100%,.08) -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:hsla(0,0%,100%,.08) -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:hsla(0,0%,100%,.08) linear-gradient(transparent,rgba(0,0,0,.05));color:#fff}.ui.inverted.sortable.table thead th{border-left-color:transparent;border-right-color:transparent}.ui.inverted.table{background:#333;color:hsla(0,0%,100%,.9);border:none}.ui.inverted.table th{background-color:rgba(0,0,0,.15);color:hsla(0,0%,100%,.9)!important}.ui.inverted.table th,.ui.inverted.table tr td{border-color:hsla(0,0%,100%,.1)!important}.ui.inverted.table tr.disabled:hover td,.ui.inverted.table tr.disabled td,.ui.inverted.table tr:hover td.disabled,.ui.inverted.table tr td.disabled{pointer-events:none;color:hsla(0,0%,88.2%,.3)}.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,.ui.inverted.definition.table thead:not(.full-width) th:first-child{background:#fff}.ui.inverted.definition.table tr td:first-child{background:hsla(0,0%,100%,.02);color:#fff}.ui.collapsing.table{width:auto}.ui.basic.table{background:transparent;border:1px solid rgba(34,36,38,.15)}.ui.basic.table,.ui.basic.table tfoot,.ui.basic.table thead{-webkit-box-shadow:none;box-shadow:none}.ui.basic.table th{background:transparent;border-left:none}.ui.basic.table tbody tr{border-bottom:1px solid rgba(0,0,0,.1)}.ui.basic.table td{background:transparent}.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.05)!important}.ui[class*="very basic"].table{border:none}.ui[class*="very basic"].table:not(.sortable):not(.striped) td,.ui[class*="very basic"].table:not(.sortable):not(.striped) th{padding:""}.ui[class*="very basic"].table:not(.sortable):not(.striped) td:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped) th:first-child{padding-left:0}.ui[class*="very basic"].table:not(.sortable):not(.striped) td:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped) th:last-child{padding-right:0}.ui[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th{padding-top:0}.ui.celled.table tr td,.ui.celled.table tr th{border-left:1px solid rgba(34,36,38,.1)}.ui.celled.table tr td:first-child,.ui.celled.table tr th:first-child{border-left:none}.ui.padded.table th{padding-left:1em;padding-right:1em}.ui.padded.table td,.ui.padded.table th{padding:1em}.ui[class*="very padded"].table th{padding-left:1.5em;padding-right:1.5em}.ui[class*="very padded"].table td{padding:1.5em}.ui.compact.table th{padding-left:.7em;padding-right:.7em}.ui.compact.table td{padding:.5em .7em}.ui[class*="very compact"].table th{padding-left:.6em;padding-right:.6em}.ui[class*="very compact"].table td{padding:.4em .6em}.ui.small.table{font-size:.9em}.ui.table{font-size:1em}.ui.large.table{font-size:1.1em} /*! * # Semantic UI 2.4.0 - Ad * http://github.com/semantic-org/semantic-ui/ @@ -280,7 +280,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.checkbox{position:relative;display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:none;vertical-align:baseline;font-style:normal;min-height:17px;font-size:1rem;line-height:17px;min-width:17px}.ui.checkbox input[type=checkbox],.ui.checkbox input[type=radio]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:none;z-index:3;width:17px;height:17px}.ui.checkbox .box,.ui.checkbox label{cursor:auto;position:relative;display:block;padding-left:1.85714em;outline:none;font-size:1em}.ui.checkbox .box:before,.ui.checkbox label:before{content:"";background:#fff;border-radius:.21428571rem;border:1px solid #d4d4d5}.ui.checkbox .box:after,.ui.checkbox .box:before,.ui.checkbox label:after,.ui.checkbox label:before{position:absolute;top:0;left:0;width:17px;height:17px;-webkit-transition:border .1s ease,opacity .1s ease,-webkit-transform .1s ease,-webkit-box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,-webkit-transform .1s ease,-webkit-box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease,-webkit-transform .1s ease,-webkit-box-shadow .1s ease}.ui.checkbox .box:after,.ui.checkbox label:after{font-size:14px;text-align:center;opacity:0;color:rgba(0,0,0,.87)}.ui.checkbox+label,.ui.checkbox label{color:rgba(0,0,0,.87);-webkit-transition:color .1s ease;transition:color .1s ease}.ui.checkbox+label{vertical-align:middle}.ui.checkbox .box:hover:before,.ui.checkbox label:hover:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox+label:hover,.ui.checkbox label:hover{color:rgba(0,0,0,.8)}.ui.checkbox .box:active:before,.ui.checkbox label:active:before{background:#f9fafb;border-color:rgba(34,36,38,.35)}.ui.checkbox .box:active:after,.ui.checkbox input:active~label,.ui.checkbox label:active:after{color:rgba(0,0,0,.95)}.ui.checkbox input:focus~.box:before,.ui.checkbox input:focus~label:before{background:#fff;border-color:#96c8da}.ui.checkbox input:focus~.box:after,.ui.checkbox input:focus~label,.ui.checkbox input:focus~label:after{color:rgba(0,0,0,.95)}.ui.checkbox input:checked~.box:before,.ui.checkbox input:checked~label:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{opacity:1;color:rgba(0,0,0,.95)}.ui.checkbox input:not([type=radio]):indeterminate~.box:before,.ui.checkbox input:not([type=radio]):indeterminate~label:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox input:not([type=radio]):indeterminate~.box:after,.ui.checkbox input:not([type=radio]):indeterminate~label:after{opacity:1;color:rgba(0,0,0,.95)}.ui.checkbox input:checked:focus~.box:before,.ui.checkbox input:checked:focus~label:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:before{background:#fff;border-color:#96c8da}.ui.checkbox input:checked:focus~.box:after,.ui.checkbox input:checked:focus~label:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:after{color:rgba(0,0,0,.95)}.ui.read-only.checkbox,.ui.read-only.checkbox label{cursor:default}.ui.checkbox input[disabled]~.box:after,.ui.checkbox input[disabled]~label,.ui.disabled.checkbox .box:after,.ui.disabled.checkbox label{cursor:default!important;opacity:.5;color:#000}.ui.checkbox input.hidden{z-index:-1}.ui.checkbox input.hidden+label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.radio.checkbox{min-height:15px}.ui.radio.checkbox .box,.ui.radio.checkbox label{padding-left:1.85714em}.ui.radio.checkbox .box:before,.ui.radio.checkbox label:before{content:"";-webkit-transform:none;transform:none;width:15px;height:15px;border-radius:500rem;top:1px;left:0}.ui.radio.checkbox .box:after,.ui.radio.checkbox label:after{border:none;content:""!important;line-height:15px;top:1px;left:0;width:15px;height:15px;border-radius:500rem;-webkit-transform:scale(.46666667);transform:scale(.46666667);background-color:rgba(0,0,0,.87)}.ui.radio.checkbox input:focus~.box:before,.ui.radio.checkbox input:focus~label:before{background-color:#fff}.ui.radio.checkbox input:focus~.box:after,.ui.radio.checkbox input:focus~label:after{background-color:rgba(0,0,0,.95)}.ui.radio.checkbox input:indeterminate~.box:after,.ui.radio.checkbox input:indeterminate~label:after{opacity:0}.ui.radio.checkbox input:checked~.box:before,.ui.radio.checkbox input:checked~label:before{background-color:#fff}.ui.radio.checkbox input:checked~.box:after,.ui.radio.checkbox input:checked~label:after{background-color:rgba(0,0,0,.95)}.ui.radio.checkbox input:focus:checked~.box:before,.ui.radio.checkbox input:focus:checked~label:before{background-color:#fff}.ui.radio.checkbox input:focus:checked~.box:after,.ui.radio.checkbox input:focus:checked~label:after{background-color:rgba(0,0,0,.95)}.ui.slider.checkbox{min-height:1.25rem}.ui.slider.checkbox input{width:3.5rem;height:1.25rem}.ui.slider.checkbox .box,.ui.slider.checkbox label{padding-left:4.5rem;line-height:1rem;color:rgba(0,0,0,.4)}.ui.slider.checkbox .box:before,.ui.slider.checkbox label:before{display:block;position:absolute;content:"";border:none!important;left:0;z-index:1;top:.4rem;background-color:rgba(0,0,0,.05);width:3.5rem;height:.21428571rem;-webkit-transform:none;transform:none;border-radius:500rem;-webkit-transition:background .3s ease;transition:background .3s ease}.ui.slider.checkbox .box:after,.ui.slider.checkbox label:after{background:#fff -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:#fff -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fff linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),0 0 0 1px rgba(34,36,38,.15) inset;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15);width:1.5rem;height:1.5rem;top:-.25rem;left:0;-webkit-transform:none;transform:none;border-radius:500rem;-webkit-transition:left .3s ease;transition:left .3s ease}.ui.slider.checkbox input:focus~.box:before,.ui.slider.checkbox input:focus~label:before{background-color:rgba(0,0,0,.15);border:none}.ui.slider.checkbox .box:hover,.ui.slider.checkbox label:hover{color:rgba(0,0,0,.8)}.ui.slider.checkbox .box:hover:before,.ui.slider.checkbox label:hover:before{background:rgba(0,0,0,.15)}.ui.slider.checkbox input:checked~.box,.ui.slider.checkbox input:checked~label{color:rgba(0,0,0,.95)!important}.ui.slider.checkbox input:checked~.box:before,.ui.slider.checkbox input:checked~label:before{background-color:#545454!important}.ui.slider.checkbox input:checked~.box:after,.ui.slider.checkbox input:checked~label:after{left:2rem}.ui.slider.checkbox input:focus:checked~.box,.ui.slider.checkbox input:focus:checked~label{color:rgba(0,0,0,.95)!important}.ui.slider.checkbox input:focus:checked~.box:before,.ui.slider.checkbox input:focus:checked~label:before{background-color:#000!important}.ui.toggle.checkbox{min-height:1.5rem}.ui.toggle.checkbox input{width:3.5rem;height:1.5rem}.ui.toggle.checkbox .box,.ui.toggle.checkbox label{min-height:1.5rem;padding-left:4.5rem;color:rgba(0,0,0,.87)}.ui.toggle.checkbox label{padding-top:.15em}.ui.toggle.checkbox .box:before,.ui.toggle.checkbox label:before{display:block;position:absolute;content:"";z-index:1;-webkit-transform:none;transform:none;border:none;top:0;background:rgba(0,0,0,.05);-webkit-box-shadow:none;box-shadow:none;width:3.5rem;height:1.5rem;border-radius:500rem}.ui.toggle.checkbox .box:after,.ui.toggle.checkbox label:after{background:#fff -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:#fff -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fff linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;width:1.5rem;height:1.5rem;top:0;left:0;border-radius:500rem;-webkit-transition:background .3s ease,left .3s ease;transition:background .3s ease,left .3s ease}.ui.toggle.checkbox .box:after,.ui.toggle.checkbox input~.box:after,.ui.toggle.checkbox input~label:after,.ui.toggle.checkbox label:after{-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),0 0 0 1px rgba(34,36,38,.15) inset;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15)}.ui.toggle.checkbox input~.box:after,.ui.toggle.checkbox input~label:after{left:-.05rem}.ui.toggle.checkbox .box:hover:before,.ui.toggle.checkbox input:focus~.box:before,.ui.toggle.checkbox input:focus~label:before,.ui.toggle.checkbox label:hover:before{background-color:rgba(0,0,0,.15);border:none}.ui.toggle.checkbox input:checked~.box,.ui.toggle.checkbox input:checked~label{color:rgba(0,0,0,.95)!important}.ui.toggle.checkbox input:checked~.box:before,.ui.toggle.checkbox input:checked~label:before{background-color:#2185d0!important}.ui.toggle.checkbox input:checked~.box:after,.ui.toggle.checkbox input:checked~label:after{left:2.15rem;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),0 0 0 1px rgba(34,36,38,.15) inset;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15)}.ui.toggle.checkbox input:focus:checked~.box,.ui.toggle.checkbox input:focus:checked~label{color:rgba(0,0,0,.95)!important}.ui.toggle.checkbox input:focus:checked~.box:before,.ui.toggle.checkbox input:focus:checked~label:before{background-color:#0d71bb!important}.ui.fitted.checkbox .box,.ui.fitted.checkbox label{padding-left:0!important}.ui.fitted.slider.checkbox,.ui.fitted.toggle.checkbox{width:3.5rem}@font-face{font-family:Checkbox;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format("truetype")}.ui.checkbox .box:after,.ui.checkbox label:after{font-family:Checkbox}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{content:"\e800"}.ui.checkbox input:indeterminate~.box:after,.ui.checkbox input:indeterminate~label:after{font-size:12px;content:"\e801"} + */.ui.checkbox{position:relative;display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:none;vertical-align:baseline;font-style:normal;min-height:17px;font-size:1rem;line-height:17px;min-width:17px}.ui.checkbox input[type=checkbox],.ui.checkbox input[type=radio]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:none;z-index:3;width:17px;height:17px}.ui.checkbox .box,.ui.checkbox label{cursor:auto;position:relative;display:block;padding-left:1.85714em;outline:none;font-size:1em}.ui.checkbox .box:before,.ui.checkbox label:before{content:"";background:#fff;border-radius:.21428571rem;border:1px solid #d4d4d5}.ui.checkbox .box:after,.ui.checkbox .box:before,.ui.checkbox label:after,.ui.checkbox label:before{position:absolute;top:0;left:0;width:17px;height:17px;-webkit-transition:border .1s ease,opacity .1s ease,-webkit-transform .1s ease,-webkit-box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,-webkit-transform .1s ease,-webkit-box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease,-webkit-transform .1s ease,-webkit-box-shadow .1s ease}.ui.checkbox .box:after,.ui.checkbox label:after{font-size:14px;text-align:center;opacity:0;color:rgba(0,0,0,.87)}.ui.checkbox+label,.ui.checkbox label{color:rgba(0,0,0,.87);-webkit-transition:color .1s ease;transition:color .1s ease}.ui.checkbox+label{vertical-align:middle}.ui.checkbox .box:hover:before,.ui.checkbox label:hover:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox+label:hover,.ui.checkbox label:hover{color:rgba(0,0,0,.8)}.ui.checkbox .box:active:before,.ui.checkbox label:active:before{background:#f9fafb;border-color:rgba(34,36,38,.35)}.ui.checkbox .box:active:after,.ui.checkbox input:active~label,.ui.checkbox label:active:after{color:rgba(0,0,0,.95)}.ui.checkbox input:focus~.box:before,.ui.checkbox input:focus~label:before{background:#fff;border-color:#96c8da}.ui.checkbox input:focus~.box:after,.ui.checkbox input:focus~label,.ui.checkbox input:focus~label:after{color:rgba(0,0,0,.95)}.ui.checkbox input:checked~.box:before,.ui.checkbox input:checked~label:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{opacity:1;color:rgba(0,0,0,.95)}.ui.checkbox input:not([type=radio]):indeterminate~.box:before,.ui.checkbox input:not([type=radio]):indeterminate~label:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox input:not([type=radio]):indeterminate~.box:after,.ui.checkbox input:not([type=radio]):indeterminate~label:after{opacity:1;color:rgba(0,0,0,.95)}.ui.checkbox input:checked:focus~.box:before,.ui.checkbox input:checked:focus~label:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:before{background:#fff;border-color:#96c8da}.ui.checkbox input:checked:focus~.box:after,.ui.checkbox input:checked:focus~label:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:after{color:rgba(0,0,0,.95)}.ui.read-only.checkbox,.ui.read-only.checkbox label{cursor:default}.ui.checkbox input[disabled]~.box:after,.ui.checkbox input[disabled]~label,.ui.disabled.checkbox .box:after,.ui.disabled.checkbox label{cursor:default!important;opacity:.5;color:#000}.ui.checkbox input.hidden{z-index:-1}.ui.checkbox input.hidden+label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.radio.checkbox{min-height:15px}.ui.radio.checkbox .box,.ui.radio.checkbox label{padding-left:1.85714em}.ui.radio.checkbox .box:before,.ui.radio.checkbox label:before{content:"";-webkit-transform:none;transform:none;width:15px;height:15px;border-radius:500rem;top:1px;left:0}.ui.radio.checkbox .box:after,.ui.radio.checkbox label:after{border:none;content:""!important;line-height:15px;top:1px;left:0;width:15px;height:15px;border-radius:500rem;-webkit-transform:scale(.46666667);transform:scale(.46666667);background-color:rgba(0,0,0,.87)}.ui.radio.checkbox input:focus~.box:before,.ui.radio.checkbox input:focus~label:before{background-color:#fff}.ui.radio.checkbox input:focus~.box:after,.ui.radio.checkbox input:focus~label:after{background-color:rgba(0,0,0,.95)}.ui.radio.checkbox input:indeterminate~.box:after,.ui.radio.checkbox input:indeterminate~label:after{opacity:0}.ui.radio.checkbox input:checked~.box:before,.ui.radio.checkbox input:checked~label:before{background-color:#fff}.ui.radio.checkbox input:checked~.box:after,.ui.radio.checkbox input:checked~label:after{background-color:rgba(0,0,0,.95)}.ui.radio.checkbox input:focus:checked~.box:before,.ui.radio.checkbox input:focus:checked~label:before{background-color:#fff}.ui.radio.checkbox input:focus:checked~.box:after,.ui.radio.checkbox input:focus:checked~label:after{background-color:rgba(0,0,0,.95)}.ui.slider.checkbox{min-height:1.25rem}.ui.slider.checkbox input{width:3.5rem;height:1.25rem}.ui.slider.checkbox .box,.ui.slider.checkbox label{padding-left:4.5rem;line-height:1rem;color:rgba(0,0,0,.4)}.ui.slider.checkbox .box:before,.ui.slider.checkbox label:before{display:block;position:absolute;content:"";border:none!important;left:0;z-index:1;top:.4rem;background-color:rgba(0,0,0,.05);width:3.5rem;height:.21428571rem;-webkit-transform:none;transform:none;border-radius:500rem;-webkit-transition:background .3s ease;transition:background .3s ease}.ui.slider.checkbox .box:after,.ui.slider.checkbox label:after{background:#fff -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:#fff -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fff linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15);width:1.5rem;height:1.5rem;top:-.25rem;left:0;-webkit-transform:none;transform:none;border-radius:500rem;-webkit-transition:left .3s ease;transition:left .3s ease}.ui.slider.checkbox input:focus~.box:before,.ui.slider.checkbox input:focus~label:before{background-color:rgba(0,0,0,.15);border:none}.ui.slider.checkbox .box:hover,.ui.slider.checkbox label:hover{color:rgba(0,0,0,.8)}.ui.slider.checkbox .box:hover:before,.ui.slider.checkbox label:hover:before{background:rgba(0,0,0,.15)}.ui.slider.checkbox input:checked~.box,.ui.slider.checkbox input:checked~label{color:rgba(0,0,0,.95)!important}.ui.slider.checkbox input:checked~.box:before,.ui.slider.checkbox input:checked~label:before{background-color:#545454!important}.ui.slider.checkbox input:checked~.box:after,.ui.slider.checkbox input:checked~label:after{left:2rem}.ui.slider.checkbox input:focus:checked~.box,.ui.slider.checkbox input:focus:checked~label{color:rgba(0,0,0,.95)!important}.ui.slider.checkbox input:focus:checked~.box:before,.ui.slider.checkbox input:focus:checked~label:before{background-color:#000!important}.ui.toggle.checkbox{min-height:1.5rem}.ui.toggle.checkbox input{width:3.5rem;height:1.5rem}.ui.toggle.checkbox .box,.ui.toggle.checkbox label{min-height:1.5rem;padding-left:4.5rem;color:rgba(0,0,0,.87)}.ui.toggle.checkbox label{padding-top:.15em}.ui.toggle.checkbox .box:before,.ui.toggle.checkbox label:before{display:block;position:absolute;content:"";z-index:1;-webkit-transform:none;transform:none;border:none;top:0;background:rgba(0,0,0,.05);-webkit-box-shadow:none;box-shadow:none;width:3.5rem;height:1.5rem;border-radius:500rem}.ui.toggle.checkbox .box:after,.ui.toggle.checkbox label:after{background:#fff -webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.05)));background:#fff -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fff linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:""!important;opacity:1;z-index:2;border:none;width:1.5rem;height:1.5rem;top:0;left:0;border-radius:500rem;-webkit-transition:background .3s ease,left .3s ease;transition:background .3s ease,left .3s ease}.ui.toggle.checkbox .box:after,.ui.toggle.checkbox input~.box:after,.ui.toggle.checkbox input~label:after,.ui.toggle.checkbox label:after{-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15)}.ui.toggle.checkbox input~.box:after,.ui.toggle.checkbox input~label:after{left:-.05rem}.ui.toggle.checkbox .box:hover:before,.ui.toggle.checkbox input:focus~.box:before,.ui.toggle.checkbox input:focus~label:before,.ui.toggle.checkbox label:hover:before{background-color:rgba(0,0,0,.15);border:none}.ui.toggle.checkbox input:checked~.box,.ui.toggle.checkbox input:checked~label{color:rgba(0,0,0,.95)!important}.ui.toggle.checkbox input:checked~.box:before,.ui.toggle.checkbox input:checked~label:before{background-color:#2185d0!important}.ui.toggle.checkbox input:checked~.box:after,.ui.toggle.checkbox input:checked~label:after{left:2.15rem;-webkit-box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15),inset 0 0 0 1px rgba(34,36,38,.15)}.ui.toggle.checkbox input:focus:checked~.box,.ui.toggle.checkbox input:focus:checked~label{color:rgba(0,0,0,.95)!important}.ui.toggle.checkbox input:focus:checked~.box:before,.ui.toggle.checkbox input:focus:checked~label:before{background-color:#0d71bb!important}.ui.fitted.checkbox .box,.ui.fitted.checkbox label{padding-left:0!important}.ui.fitted.slider.checkbox,.ui.fitted.toggle.checkbox{width:3.5rem}@font-face{font-family:Checkbox;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format("truetype")}.ui.checkbox .box:after,.ui.checkbox label:after{font-family:Checkbox}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{content:"\e800"}.ui.checkbox input:indeterminate~.box:after,.ui.checkbox input:indeterminate~label:after{font-size:12px;content:"\e801"} /*! * # Semantic UI 2.4.0 - Dimmer * http://github.com/semantic-org/semantic-ui/ @@ -298,7 +298,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.dropdown{cursor:pointer;position:relative;display:inline-block;outline:none;text-align:left;-webkit-transition:width .1s ease,-webkit-box-shadow .1s ease;transition:width .1s ease,-webkit-box-shadow .1s ease;transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease,-webkit-box-shadow .1s ease;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;outline:none;top:100%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;padding:0;background:#fff;font-size:1em;text-shadow:none;text-align:left;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15);border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;-webkit-transition:opacity .1s ease;transition:opacity .1s ease;z-index:11;will-change:transform,opacity}.ui.dropdown .menu>*{white-space:nowrap}.ui.dropdown>input:not(.search):first-child,.ui.dropdown>select{display:none!important}.ui.dropdown>.dropdown.icon{position:relative;font-size:.85714286em;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon{width:auto;float:right;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon+.text{margin-right:1em}.ui.dropdown>.text{display:inline-block;-webkit-transition:none;transition:none}.ui.dropdown .menu>.item{position:relative;cursor:pointer;display:block;height:auto;text-align:left;border:none;line-height:1em;color:rgba(0,0,0,.87);padding:.78571429rem 1.14285714rem!important;font-size:1rem;text-transform:none;font-weight:400;-webkit-box-shadow:none;box-shadow:none;-webkit-touch-callout:none}.ui.dropdown .menu>.item:first-child{border-top-width:0}.ui.dropdown .menu .item>[class*="right floated"],.ui.dropdown>.text>[class*="right floated"]{float:right!important;margin-right:0!important;margin-left:1em!important}.ui.dropdown .menu .item>[class*="left floated"],.ui.dropdown>.text>[class*="left floated"]{float:left!important;margin-left:0!important;margin-right:1em!important}.ui.dropdown .menu .item>.flag.floated,.ui.dropdown .menu .item>.icon.floated,.ui.dropdown .menu .item>.image.floated,.ui.dropdown .menu .item>img.floated{margin-top:0}.ui.dropdown .menu>.header{margin:1rem 0 .75rem;padding:0 1.14285714rem;color:rgba(0,0,0,.85);font-size:.78571429em;font-weight:700;text-transform:uppercase}.ui.dropdown .menu>.divider{border-top:1px solid rgba(34,36,38,.1);height:0;margin:.5em 0}.ui.dropdown.dropdown .menu>.input{width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.14285714rem .78571429rem;min-width:10rem}.ui.dropdown .menu>.header+.input{margin-top:0}.ui.dropdown .menu>.input:not(.transparent) input{padding:.5em 1em}.ui.dropdown .menu>.input:not(.transparent) .button,.ui.dropdown .menu>.input:not(.transparent) .icon,.ui.dropdown .menu>.input:not(.transparent) .label{padding-top:.5em;padding-bottom:.5em}.ui.dropdown .menu>.item>.description,.ui.dropdown>.text>.description{float:right;margin:0 0 0 1em;color:rgba(0,0,0,.4)}.ui.dropdown .menu>.message{padding:.78571429rem 1.14285714rem;font-weight:400}.ui.dropdown .menu>.message:not(.ui){color:rgba(0,0,0,.4)}.ui.dropdown .menu .menu{top:0!important;left:100%;right:auto;margin:0 0 0 -.5em!important;border-radius:.28571429rem!important;z-index:21!important}.ui.dropdown .menu .menu:after{display:none}.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.icon,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.flag,.ui.dropdown>.text>.icon,.ui.dropdown>.text>.image,.ui.dropdown>.text>.label,.ui.dropdown>.text>img{margin-top:0}.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.icon,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.flag,.ui.dropdown>.text>.icon,.ui.dropdown>.text>.image,.ui.dropdown>.text>.label,.ui.dropdown>.text>img{margin-left:0;float:none;margin-right:.78571429rem}.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.image,.ui.dropdown>.text>img{display:inline-block;vertical-align:top;width:auto;margin-top:-.5em;margin-bottom:-.5em;max-height:2em}.ui.dropdown .ui.menu>.item:before,.ui.menu .ui.dropdown .menu>.item:before{display:none}.ui.menu .ui.dropdown .menu .active.item{border-left:none}.ui.buttons>.ui.dropdown:last-child .menu,.ui.menu .right.dropdown.item .menu,.ui.menu .right.menu .dropdown:last-child .menu{left:auto;right:0}.ui.label.dropdown .menu{min-width:100%}.ui.dropdown.icon.button>.dropdown.icon{margin:0}.ui.button.dropdown .menu{min-width:100%}.ui.selection.dropdown{cursor:pointer;word-wrap:break-word;line-height:1em;white-space:normal;outline:0;-webkit-transform:rotate(0deg);transform:rotate(0deg);min-width:14em;min-height:2.71428571em;background:#fff;display:inline-block;padding:.78571429em 2.1em .78571429em 1em;color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;-webkit-transition:width .1s ease,-webkit-box-shadow .1s ease;transition:width .1s ease,-webkit-box-shadow .1s ease;transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease,-webkit-box-shadow .1s ease}.ui.selection.dropdown.active,.ui.selection.dropdown.visible{z-index:10}select.ui.dropdown{height:38px;padding:.5em;border:1px solid rgba(34,36,38,.15);visibility:visible}.ui.selection.dropdown>.delete.icon,.ui.selection.dropdown>.dropdown.icon,.ui.selection.dropdown>.search.icon{cursor:pointer;position:absolute;width:auto;height:auto;line-height:1.21428571em;top:.78571429em;right:1em;z-index:3;margin:-.78571429em;padding:.91666667em;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.compact.selection.dropdown{min-width:0}.ui.selection.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch;border-top-width:0!important;width:auto;outline:none;margin:0 -1px;min-width:calc(100% + 2px);width:calc(100% + 2px);border-radius:0 0 .28571429rem .28571429rem;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15);-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.selection.dropdown .menu:after,.ui.selection.dropdown .menu:before{display:none}.ui.selection.dropdown .menu>.message{padding:.78571429rem 1.14285714rem}@media only screen and (max-width:767px){.ui.selection.dropdown .menu{max-height:8.01428571rem}}@media only screen and (min-width:768px){.ui.selection.dropdown .menu{max-height:10.68571429rem}}@media only screen and (min-width:992px){.ui.selection.dropdown .menu{max-height:16.02857143rem}}@media only screen and (min-width:1920px){.ui.selection.dropdown .menu{max-height:21.37142857rem}}.ui.selection.dropdown .menu>.item{border-top:1px solid #fafafa;padding:.78571429rem 1.14285714rem!important;white-space:normal;word-wrap:normal}.ui.selection.dropdown .menu>.hidden.addition.item{display:none}.ui.selection.dropdown:hover{border-color:rgba(34,36,38,.35);-webkit-box-shadow:none;box-shadow:none}.ui.selection.active.dropdown,.ui.selection.active.dropdown .menu{border-color:#96c8da;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.dropdown:focus{border-color:#96c8da;-webkit-box-shadow:none;box-shadow:none}.ui.selection.dropdown:focus .menu{border-color:#96c8da;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.visible.dropdown>.text:not(.default){font-weight:400;color:rgba(0,0,0,.8)}.ui.selection.active.dropdown:hover,.ui.selection.active.dropdown:hover .menu{border-color:#96c8da;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.active.selection.dropdown>.dropdown.icon,.ui.visible.selection.dropdown>.dropdown.icon{opacity:"";z-index:3}.ui.active.selection.dropdown{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.active.empty.selection.dropdown{border-radius:.28571429rem!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.active.empty.selection.dropdown .menu{border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.search.dropdown{min-width:""}.ui.search.dropdown>input.search{background:none transparent!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;cursor:text;top:0;left:1px;width:100%;outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);padding:inherit;position:absolute;z-index:2}.ui.search.dropdown>.text{cursor:text;position:relative;left:1px;z-index:3}.ui.search.selection.dropdown>input.search,.ui.search.selection.dropdown>span.sizer{line-height:1.21428571em;padding:.67857143em 2.1em .67857143em 1em}.ui.search.selection.dropdown>span.sizer{display:none;white-space:pre}.ui.search.dropdown.active>input.search,.ui.search.dropdown.visible>input.search{cursor:auto}.ui.search.dropdown.active>.text,.ui.search.dropdown.visible>.text{pointer-events:none}.ui.active.search.dropdown input.search:focus+.text .flag,.ui.active.search.dropdown input.search:focus+.text .icon{opacity:.45}.ui.active.search.dropdown input.search:focus+.text{color:hsla(0,0%,45.1%,.87)!important}.ui.search.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}@media only screen and (max-width:767px){.ui.search.dropdown .menu{max-height:8.01428571rem}}@media only screen and (min-width:768px){.ui.search.dropdown .menu{max-height:10.68571429rem}}@media only screen and (min-width:992px){.ui.search.dropdown .menu{max-height:16.02857143rem}}@media only screen and (min-width:1920px){.ui.search.dropdown .menu{max-height:21.37142857rem}}.ui.multiple.dropdown{padding:.22619048em 2.1em .22619048em .35714286em}.ui.multiple.dropdown .menu{cursor:auto}.ui.multiple.search.dropdown,.ui.multiple.search.dropdown>input.search{cursor:text}.ui.multiple.dropdown>.label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;vertical-align:top;white-space:normal;font-size:1em;padding:.35714286em .78571429em;margin:.14285714rem .28571429rem .14285714rem 0;-webkit-box-shadow:0 0 0 1px rgba(34,36,38,.15) inset;box-shadow:inset 0 0 0 1px rgba(34,36,38,.15)}.ui.multiple.dropdown .dropdown.icon{margin:"";padding:""}.ui.multiple.dropdown>.text{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.dropdown>.label~input.search{margin-left:.14285714em!important}.ui.multiple.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>.text{display:inline-block;position:absolute;top:0;left:0;padding:inherit;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.search.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>input.search{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;width:2.2em;line-height:1.21428571em}.ui.inline.dropdown{cursor:pointer;display:inline-block;color:inherit}.ui.inline.dropdown .dropdown.icon{margin:0 .21428571em;vertical-align:baseline}.ui.inline.dropdown>.text{font-weight:700}.ui.inline.dropdown .menu{cursor:auto;margin-top:.21428571em;border-radius:.28571429rem}.ui.dropdown .menu .active.item{background:transparent;font-weight:700;color:rgba(0,0,0,.95);-webkit-box-shadow:none;box-shadow:none;z-index:12}.ui.dropdown .menu>.item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95);z-index:13}.ui.loading.dropdown>i.icon{height:1em!important}.ui.loading.selection.dropdown>i.icon{padding:1.5em 1.28571429em!important}.ui.loading.dropdown>i.icon:before{border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.dropdown>i.icon:after,.ui.loading.dropdown>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em}.ui.loading.dropdown>i.icon:after{-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent;-webkit-animation:dropdown-spin .6s linear;animation:dropdown-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid transparent;border-top-color:#767676}.ui.loading.dropdown.button>i.icon:after,.ui.loading.dropdown.button>i.icon:before{display:none}@-webkit-keyframes dropdown-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes dropdown-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.default.dropdown:not(.button)>.text,.ui.dropdown:not(.button)>.default.text{color:hsla(0,0%,74.9%,.87)}.ui.default.dropdown:not(.button)>input:focus~.text,.ui.dropdown:not(.button)>input:focus~.default.text{color:hsla(0,0%,45.1%,.87)}.ui.loading.dropdown>.text{-webkit-transition:none;transition:none}.ui.dropdown .loading.menu{display:block;visibility:hidden;z-index:-1}.ui.dropdown>.loading.menu{left:0!important;right:auto!important}.ui.dropdown>.menu .loading.menu{left:100%!important;right:auto!important}.ui.dropdown .menu .selected.item,.ui.dropdown.selected{background:rgba(0,0,0,.03);color:rgba(0,0,0,.95)}.ui.dropdown>.filtered.text{visibility:hidden}.ui.dropdown .filtered.item{display:none!important}.ui.dropdown.error,.ui.dropdown.error>.default.text,.ui.dropdown.error>.text{color:#9f3a38}.ui.selection.dropdown.error{background:#fff6f6;border-color:#e0b4b4}.ui.dropdown.error>.menu,.ui.dropdown.error>.menu .menu,.ui.selection.dropdown.error:hover{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item{color:#9f3a38}.ui.multiple.selection.error.dropdown>.label{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item:hover{background-color:#fff2f2}.ui.dropdown.error>.menu .active.item{background-color:#fdcfcf}.ui.dropdown>.clear.dropdown.icon{opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.dropdown>.clear.dropdown.icon:hover{opacity:1}.ui.disabled.dropdown,.ui.dropdown .menu>.disabled.item{cursor:default;pointer-events:none;opacity:.45}.ui.dropdown .menu{left:0}.ui.dropdown .menu .right.menu,.ui.dropdown .right.menu>.menu{left:100%!important;right:auto!important;border-radius:.28571429rem!important}.ui.dropdown>.left.menu{left:auto!important;right:0!important}.ui.dropdown .menu .left.menu,.ui.dropdown>.left.menu .menu{left:auto;right:100%;margin:0 -.5em 0 0!important;border-radius:.28571429rem!important}.ui.dropdown .item .left.dropdown.icon,.ui.dropdown .left.menu .item .dropdown.icon{width:auto;float:left;margin:0}.ui.dropdown .item .left.dropdown.icon+.text,.ui.dropdown .left.menu .item .dropdown.icon+.text{margin-left:1em;margin-right:0}.ui.upward.dropdown>.menu{top:auto;bottom:100%;-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,.08);box-shadow:0 0 3px 0 rgba(0,0,0,.08);border-radius:.28571429rem .28571429rem 0 0}.ui.dropdown .upward.menu{top:auto!important;bottom:0!important}.ui.simple.upward.active.dropdown,.ui.simple.upward.dropdown:hover{border-radius:.28571429rem .28571429rem 0 0!important}.ui.upward.dropdown.button:not(.pointing):not(.floating).active{border-radius:.28571429rem .28571429rem 0 0}.ui.upward.selection.dropdown .menu{border-top-width:1px!important;border-bottom-width:0!important;-webkit-box-shadow:0 -2px 3px 0 rgba(0,0,0,.08);box-shadow:0 -2px 3px 0 rgba(0,0,0,.08)}.ui.upward.selection.dropdown:hover{-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.05);box-shadow:0 0 2px 0 rgba(0,0,0,.05)}.ui.active.upward.selection.dropdown,.ui.upward.selection.dropdown.visible{border-radius:0 0 .28571429rem .28571429rem!important}.ui.upward.selection.dropdown.visible{-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,.08);box-shadow:0 0 3px 0 rgba(0,0,0,.08)}.ui.upward.active.selection.dropdown:hover{-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,.05);box-shadow:0 0 3px 0 rgba(0,0,0,.05)}.ui.upward.active.selection.dropdown:hover .menu{-webkit-box-shadow:0 -2px 3px 0 rgba(0,0,0,.08);box-shadow:0 -2px 3px 0 rgba(0,0,0,.08)}.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{overflow-x:hidden;overflow-y:auto}.ui.scrolling.dropdown .menu{overflow-x:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{overflow-y:auto;min-width:100%!important;width:auto!important}.ui.dropdown .scrolling.menu{position:static;-webkit-box-shadow:none!important;box-shadow:none!important;border-radius:0!important;margin:0!important;border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.dropdown .scrolling.menu .item:first-child,.ui.dropdown .scrolling.menu>.item.item.item,.ui.scrolling.dropdown .menu .item.item.item,.ui.scrolling.dropdown .menu .item:first-child{border-top:none}.ui.dropdown>.animating.menu .scrolling.menu,.ui.dropdown>.visible.menu .scrolling.menu{display:block}@media (-ms-high-contrast:none){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{min-width:calc(100% - 17px)}}@media only screen and (max-width:767px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:10.28571429rem}}@media only screen and (min-width:768px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:15.42857143rem}}@media only screen and (min-width:992px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:20.57142857rem}}@media only screen and (min-width:1920px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:20.57142857rem}}.ui.simple.dropdown .menu:after,.ui.simple.dropdown .menu:before{display:none}.ui.simple.dropdown .menu{position:absolute;display:block;overflow:hidden;top:-9999px!important;opacity:0;width:0;height:0;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.simple.active.dropdown,.ui.simple.dropdown:hover{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.simple.active.dropdown>.menu,.ui.simple.dropdown:hover>.menu{overflow:visible;width:auto;height:auto;top:100%!important;opacity:1}.ui.simple.dropdown:hover>.menu>.item:hover>.menu,.ui.simple.dropdown>.menu>.item:active>.menu{overflow:visible;width:auto;height:auto;top:0!important;left:100%!important;opacity:1}.ui.simple.disabled.dropdown:hover .menu{display:none;height:0;width:0;overflow:hidden}.ui.simple.visible.dropdown>.menu{display:block}.ui.fluid.dropdown{display:block;width:100%;min-width:0}.ui.fluid.dropdown>.dropdown.icon{float:right}.ui.floating.dropdown .menu{left:0;right:auto;-webkit-box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)!important;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)!important;border-radius:.28571429rem!important}.ui.floating.dropdown>.menu{margin-top:.5em!important;border-radius:.28571429rem!important}.ui.pointing.dropdown>.menu{top:100%;margin-top:.78571429rem;border-radius:.28571429rem}.ui.pointing.dropdown>.menu:after{display:block;position:absolute;pointer-events:none;content:"";visibility:visible;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:.5em;height:.5em;-webkit-box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);background:#fff;z-index:2;top:-.25em;left:50%;margin:0 0 0 -.25em}.ui.top.left.pointing.dropdown>.menu{top:100%;bottom:auto;left:0;right:auto;margin:1em 0 0}.ui.top.left.pointing.dropdown>.menu:after{top:-.25em;left:1em;right:auto;margin:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.top.right.pointing.dropdown>.menu{top:100%;bottom:auto;right:0;left:auto;margin:1em 0 0}.ui.top.pointing.dropdown>.left.menu:after,.ui.top.right.pointing.dropdown>.menu:after{top:-.25em;left:auto!important;right:1em!important;margin:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.left.pointing.dropdown>.menu{top:0;left:100%;right:auto;margin:0 0 0 1em}.ui.left.pointing.dropdown>.menu:after{top:1em;left:-.25em;margin:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.ui.left:not(.top):not(.bottom).pointing.dropdown>.left.menu{left:auto!important;right:100%!important;margin:0 1em 0 0}.ui.left:not(.top):not(.bottom).pointing.dropdown>.left.menu:after{top:1em;left:auto;right:-.25em;margin:0;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ui.right.pointing.dropdown>.menu{top:0;left:auto;right:100%;margin:0 1em 0 0}.ui.right.pointing.dropdown>.menu:after{top:1em;left:auto;right:-.25em;margin:0;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ui.bottom.pointing.dropdown>.menu{top:auto;bottom:100%;left:0;right:auto;margin:0 0 1em}.ui.bottom.pointing.dropdown>.menu:after{top:auto;bottom:-.25em;right:auto;margin:0;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.ui.bottom.pointing.dropdown>.menu .menu{top:auto!important;bottom:0!important}.ui.bottom.left.pointing.dropdown>.menu{left:0;right:auto}.ui.bottom.left.pointing.dropdown>.menu:after{left:1em;right:auto}.ui.bottom.right.pointing.dropdown>.menu{right:0;left:auto}.ui.bottom.right.pointing.dropdown>.menu:after{left:auto;right:1em}.ui.pointing.upward.dropdown .menu,.ui.top.pointing.upward.dropdown .menu{top:auto!important;bottom:100%!important;margin:0 0 .78571429rem;border-radius:.28571429rem}.ui.pointing.upward.dropdown .menu:after,.ui.top.pointing.upward.dropdown .menu:after{top:100%!important;bottom:auto!important;-webkit-box-shadow:1px 1px 0 0 rgba(34,36,38,.15);box-shadow:1px 1px 0 0 rgba(34,36,38,.15);margin:-.25em 0 0}.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu{top:auto!important;bottom:0!important;margin:0 1em 0 0}.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after{top:auto!important;bottom:0!important;margin:0 0 1em;-webkit-box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);box-shadow:-1px -1px 0 0 rgba(34,36,38,.15)}.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu{top:auto!important;bottom:0!important;margin:0 0 0 1em}.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after{top:auto!important;bottom:0!important;margin:0 0 1em;-webkit-box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);box-shadow:-1px -1px 0 0 rgba(34,36,38,.15)}@font-face{font-family:Dropdown;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAVgAA8AAAAACFAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABWAAAABwAAAAchGgaq0dERUYAAAF0AAAAHAAAAB4AJwAPT1MvMgAAAZAAAABDAAAAVnW4TJdjbWFwAAAB1AAAAEsAAAFS8CcaqmN2dCAAAAIgAAAABAAAAAQAEQFEZ2FzcAAAAiQAAAAIAAAACP//AANnbHlmAAACLAAAAQoAAAGkrRHP9WhlYWQAAAM4AAAAMAAAADYPK8YyaGhlYQAAA2gAAAAdAAAAJANCAb1obXR4AAADiAAAACIAAAAiCBkAOGxvY2EAAAOsAAAAFAAAABQBnAIybWF4cAAAA8AAAAAfAAAAIAEVAF5uYW1lAAAD4AAAATAAAAKMFGlj5HBvc3QAAAUQAAAARgAAAHJoedjqd2ViZgAABVgAAAAGAAAABrO7W5UAAAABAAAAANXulPUAAAAA1r4hgAAAAADXu2Q1eNpjYGRgYOABYjEgZmJgBEIOIGYB8xgAA/YAN3jaY2BktGOcwMDKwMI4jTGNgYHBHUp/ZZBkaGFgYGJgZWbACgLSXFMYHFT/fLjFeOD/AQY9xjMMbkBhRpAcAN48DQYAeNpjYGBgZoBgGQZGBhDwAfIYwXwWBgMgzQGETAwMqn8+8H649f8/lHX9//9b7Pzf+fWgusCAkY0BzmUE6gHpQwGMDMMeAACbxg7SAAARAUQAAAAB//8AAnjadZBPSsNAGMXfS+yMqYgOhpSuSlKadmUhiVEhEMQzFF22m17BbbvzCh5BXCUn6EG8gjeQ4DepwYo4i+/ffL95j4EDA+CFC7jQuKyIeVHrI3wkleq9F7XrSInKteOeHdda8bOoaeepSc00NWPz/LRec9G8GabyGtEdF7h19z033GAMTK7zbM42xNEZpzYof0RtQ5CUHAQJ73OtVyutc+3b7Ou//b8XNlsPx3jgjUifABdhEohKJJL5iM5p39uqc7X1+sRQSqmGrUVhlsJ4lpmEUVwyT8SUYtg0P9DyNzPADDs+tjrGV6KRCRfsui3eHcL4/p8ZXvfMlcnEU+CLv7hDykOP+AKTPTxbAAB42mNgZGBgAGKuf5KP4vltvjLIMzGAwLV9ig0g+vruFFMQzdjACOJzMIClARh0CTJ42mNgZGBgPPD/AJD8wgAEjA0MjAyogAMAbOQEAQAAAAC7ABEAAAAAAKoAAAH0AAABgAAAAUAACAFAAAgAwAAXAAAAAAAAACoAKgAqADIAbACGAKAAugDSeNpjYGRgYOBkUGFgYgABEMkFhAwM/xn0QAIADdUBdAB42qWQvUoDQRSFv3GjaISUQaymSmGxJoGAsRC0iPYLsU50Y6IxrvlRtPCJJKUPIBb+PIHv4EN4djKuKAqCDHfmu+feOdwZoMCUAJNbAlYUMzaUlM14jjxbngOq7HnOia89z1Pk1vMCa9x7ztPkzfMyJbPj+ZGi6Xp+omxuPD+zaD7meaFg7mb8GrBqHmhwxoAxlm0uiRkpP9X5m26pKRoMxTGR1D49Dv/Yb/91o6l8qL6eu5n2hZQzn68utR9m3FU2cB4t9cdSLG2utI+44Eh/P9bqKO+oJ/WxmXssj77YkrjasZQD6SFddythk3Wtzrf+UF2p076Udla1VNzsERP3kkjVRKel7mp1udXYcHtZSlV7RfmJe1GiFWveluaeKD5/MuJcSk8Tpm/vvwPIbmJleNpjYGKAAFYG7ICTgYGRiZGZkYWRlZGNkZ2Rg5GTLT2nsiDDEEIZsZfmZRqZujmDaDcDAxcI7WIOpS2gtCWUdgQAZkcSmQAAAAFblbO6AAA=) format("woff");font-weight:400;font-style:normal}.ui.dropdown>.dropdown.icon{font-family:Dropdown;line-height:1;height:1em;width:1.23em;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-weight:400;font-style:normal;text-align:center;width:auto}.ui.dropdown>.dropdown.icon:before{content:"\f0d7"}.ui.dropdown .menu .item .dropdown.icon:before{content:"\f0da"}.ui.dropdown .item .left.dropdown.icon:before,.ui.dropdown .left.menu .item .dropdown.icon:before{content:"\f0d9"}.ui.vertical.menu .dropdown.item>.dropdown.icon:before{content:"\f0da"}.ui.dropdown>.clear.icon:before{content:"\f00d"} + */.ui.dropdown{cursor:pointer;position:relative;display:inline-block;outline:none;text-align:left;-webkit-transition:width .1s ease,-webkit-box-shadow .1s ease;transition:width .1s ease,-webkit-box-shadow .1s ease;transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease,-webkit-box-shadow .1s ease;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;outline:none;top:100%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;padding:0;background:#fff;font-size:1em;text-shadow:none;text-align:left;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15);border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;-webkit-transition:opacity .1s ease;transition:opacity .1s ease;z-index:11;will-change:transform,opacity}.ui.dropdown .menu>*{white-space:nowrap}.ui.dropdown>input:not(.search):first-child,.ui.dropdown>select{display:none!important}.ui.dropdown>.dropdown.icon{position:relative;font-size:.85714286em;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon{width:auto;float:right;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon+.text{margin-right:1em}.ui.dropdown>.text{display:inline-block;-webkit-transition:none;transition:none}.ui.dropdown .menu>.item{position:relative;cursor:pointer;display:block;height:auto;text-align:left;border:none;line-height:1em;color:rgba(0,0,0,.87);padding:.78571429rem 1.14285714rem!important;font-size:1rem;text-transform:none;font-weight:400;-webkit-box-shadow:none;box-shadow:none;-webkit-touch-callout:none}.ui.dropdown .menu>.item:first-child{border-top-width:0}.ui.dropdown .menu .item>[class*="right floated"],.ui.dropdown>.text>[class*="right floated"]{float:right!important;margin-right:0!important;margin-left:1em!important}.ui.dropdown .menu .item>[class*="left floated"],.ui.dropdown>.text>[class*="left floated"]{float:left!important;margin-left:0!important;margin-right:1em!important}.ui.dropdown .menu .item>.flag.floated,.ui.dropdown .menu .item>.icon.floated,.ui.dropdown .menu .item>.image.floated,.ui.dropdown .menu .item>img.floated{margin-top:0}.ui.dropdown .menu>.header{margin:1rem 0 .75rem;padding:0 1.14285714rem;color:rgba(0,0,0,.85);font-size:.78571429em;font-weight:700;text-transform:uppercase}.ui.dropdown .menu>.divider{border-top:1px solid rgba(34,36,38,.1);height:0;margin:.5em 0}.ui.dropdown.dropdown .menu>.input{width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.14285714rem .78571429rem;min-width:10rem}.ui.dropdown .menu>.header+.input{margin-top:0}.ui.dropdown .menu>.input:not(.transparent) input{padding:.5em 1em}.ui.dropdown .menu>.input:not(.transparent) .button,.ui.dropdown .menu>.input:not(.transparent) .icon,.ui.dropdown .menu>.input:not(.transparent) .label{padding-top:.5em;padding-bottom:.5em}.ui.dropdown .menu>.item>.description,.ui.dropdown>.text>.description{float:right;margin:0 0 0 1em;color:rgba(0,0,0,.4)}.ui.dropdown .menu>.message{padding:.78571429rem 1.14285714rem;font-weight:400}.ui.dropdown .menu>.message:not(.ui){color:rgba(0,0,0,.4)}.ui.dropdown .menu .menu{top:0!important;left:100%;right:auto;margin:0 0 0 -.5em!important;border-radius:.28571429rem!important;z-index:21!important}.ui.dropdown .menu .menu:after{display:none}.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.icon,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.flag,.ui.dropdown>.text>.icon,.ui.dropdown>.text>.image,.ui.dropdown>.text>.label,.ui.dropdown>.text>img{margin-top:0}.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.icon,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.flag,.ui.dropdown>.text>.icon,.ui.dropdown>.text>.image,.ui.dropdown>.text>.label,.ui.dropdown>.text>img{margin-left:0;float:none;margin-right:.78571429rem}.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.image,.ui.dropdown>.text>img{display:inline-block;vertical-align:top;width:auto;margin-top:-.5em;margin-bottom:-.5em;max-height:2em}.ui.dropdown .ui.menu>.item:before,.ui.menu .ui.dropdown .menu>.item:before{display:none}.ui.menu .ui.dropdown .menu .active.item{border-left:none}.ui.buttons>.ui.dropdown:last-child .menu,.ui.menu .right.dropdown.item .menu,.ui.menu .right.menu .dropdown:last-child .menu{left:auto;right:0}.ui.label.dropdown .menu{min-width:100%}.ui.dropdown.icon.button>.dropdown.icon{margin:0}.ui.button.dropdown .menu{min-width:100%}.ui.selection.dropdown{cursor:pointer;word-wrap:break-word;line-height:1em;white-space:normal;outline:0;-webkit-transform:rotate(0deg);transform:rotate(0deg);min-width:14em;min-height:2.71428571em;background:#fff;display:inline-block;padding:.78571429em 2.1em .78571429em 1em;color:rgba(0,0,0,.87);-webkit-box-shadow:none;box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;-webkit-transition:width .1s ease,-webkit-box-shadow .1s ease;transition:width .1s ease,-webkit-box-shadow .1s ease;transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease,-webkit-box-shadow .1s ease}.ui.selection.dropdown.active,.ui.selection.dropdown.visible{z-index:10}select.ui.dropdown{height:38px;padding:.5em;border:1px solid rgba(34,36,38,.15);visibility:visible}.ui.selection.dropdown>.delete.icon,.ui.selection.dropdown>.dropdown.icon,.ui.selection.dropdown>.search.icon{cursor:pointer;position:absolute;width:auto;height:auto;line-height:1.21428571em;top:.78571429em;right:1em;z-index:3;margin:-.78571429em;padding:.91666667em;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.compact.selection.dropdown{min-width:0}.ui.selection.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch;border-top-width:0!important;width:auto;outline:none;margin:0 -1px;min-width:calc(100% + 2px);width:calc(100% + 2px);border-radius:0 0 .28571429rem .28571429rem;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15);-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.selection.dropdown .menu:after,.ui.selection.dropdown .menu:before{display:none}.ui.selection.dropdown .menu>.message{padding:.78571429rem 1.14285714rem}@media only screen and (max-width:767px){.ui.selection.dropdown .menu{max-height:8.01428571rem}}@media only screen and (min-width:768px){.ui.selection.dropdown .menu{max-height:10.68571429rem}}@media only screen and (min-width:992px){.ui.selection.dropdown .menu{max-height:16.02857143rem}}@media only screen and (min-width:1920px){.ui.selection.dropdown .menu{max-height:21.37142857rem}}.ui.selection.dropdown .menu>.item{border-top:1px solid #fafafa;padding:.78571429rem 1.14285714rem!important;white-space:normal;word-wrap:normal}.ui.selection.dropdown .menu>.hidden.addition.item{display:none}.ui.selection.dropdown:hover{border-color:rgba(34,36,38,.35);-webkit-box-shadow:none;box-shadow:none}.ui.selection.active.dropdown,.ui.selection.active.dropdown .menu{border-color:#96c8da;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.dropdown:focus{border-color:#96c8da;-webkit-box-shadow:none;box-shadow:none}.ui.selection.dropdown:focus .menu{border-color:#96c8da;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.visible.dropdown>.text:not(.default){font-weight:400;color:rgba(0,0,0,.8)}.ui.selection.active.dropdown:hover,.ui.selection.active.dropdown:hover .menu{border-color:#96c8da;-webkit-box-shadow:0 2px 3px 0 rgba(34,36,38,.15);box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.active.selection.dropdown>.dropdown.icon,.ui.visible.selection.dropdown>.dropdown.icon{opacity:"";z-index:3}.ui.active.selection.dropdown{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.active.empty.selection.dropdown{border-radius:.28571429rem!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.active.empty.selection.dropdown .menu{border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.search.dropdown{min-width:""}.ui.search.dropdown>input.search{background:none transparent!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;cursor:text;top:0;left:1px;width:100%;outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);padding:inherit;position:absolute;z-index:2}.ui.search.dropdown>.text{cursor:text;position:relative;left:1px;z-index:3}.ui.search.selection.dropdown>input.search,.ui.search.selection.dropdown>span.sizer{line-height:1.21428571em;padding:.67857143em 2.1em .67857143em 1em}.ui.search.selection.dropdown>span.sizer{display:none;white-space:pre}.ui.search.dropdown.active>input.search,.ui.search.dropdown.visible>input.search{cursor:auto}.ui.search.dropdown.active>.text,.ui.search.dropdown.visible>.text{pointer-events:none}.ui.active.search.dropdown input.search:focus+.text .flag,.ui.active.search.dropdown input.search:focus+.text .icon{opacity:.45}.ui.active.search.dropdown input.search:focus+.text{color:hsla(0,0%,45.1%,.87)!important}.ui.search.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}@media only screen and (max-width:767px){.ui.search.dropdown .menu{max-height:8.01428571rem}}@media only screen and (min-width:768px){.ui.search.dropdown .menu{max-height:10.68571429rem}}@media only screen and (min-width:992px){.ui.search.dropdown .menu{max-height:16.02857143rem}}@media only screen and (min-width:1920px){.ui.search.dropdown .menu{max-height:21.37142857rem}}.ui.multiple.dropdown{padding:.22619048em 2.1em .22619048em .35714286em}.ui.multiple.dropdown .menu{cursor:auto}.ui.multiple.search.dropdown,.ui.multiple.search.dropdown>input.search{cursor:text}.ui.multiple.dropdown>.label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;vertical-align:top;white-space:normal;font-size:1em;padding:.35714286em .78571429em;margin:.14285714rem .28571429rem .14285714rem 0;-webkit-box-shadow:inset 0 0 0 1px rgba(34,36,38,.15);box-shadow:inset 0 0 0 1px rgba(34,36,38,.15)}.ui.multiple.dropdown .dropdown.icon{margin:"";padding:""}.ui.multiple.dropdown>.text{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.dropdown>.label~input.search{margin-left:.14285714em!important}.ui.multiple.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>.text{display:inline-block;position:absolute;top:0;left:0;padding:inherit;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.search.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>input.search{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;width:2.2em;line-height:1.21428571em}.ui.inline.dropdown{cursor:pointer;display:inline-block;color:inherit}.ui.inline.dropdown .dropdown.icon{margin:0 .21428571em;vertical-align:baseline}.ui.inline.dropdown>.text{font-weight:700}.ui.inline.dropdown .menu{cursor:auto;margin-top:.21428571em;border-radius:.28571429rem}.ui.dropdown .menu .active.item{background:transparent;font-weight:700;color:rgba(0,0,0,.95);-webkit-box-shadow:none;box-shadow:none;z-index:12}.ui.dropdown .menu>.item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95);z-index:13}.ui.loading.dropdown>i.icon{height:1em!important}.ui.loading.selection.dropdown>i.icon{padding:1.5em 1.28571429em!important}.ui.loading.dropdown>i.icon:before{border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.dropdown>i.icon:after,.ui.loading.dropdown>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em}.ui.loading.dropdown>i.icon:after{-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent;-webkit-animation:dropdown-spin .6s linear;animation:dropdown-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid transparent;border-top-color:#767676}.ui.loading.dropdown.button>i.icon:after,.ui.loading.dropdown.button>i.icon:before{display:none}@-webkit-keyframes dropdown-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes dropdown-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ui.default.dropdown:not(.button)>.text,.ui.dropdown:not(.button)>.default.text{color:hsla(0,0%,74.9%,.87)}.ui.default.dropdown:not(.button)>input:focus~.text,.ui.dropdown:not(.button)>input:focus~.default.text{color:hsla(0,0%,45.1%,.87)}.ui.loading.dropdown>.text{-webkit-transition:none;transition:none}.ui.dropdown .loading.menu{display:block;visibility:hidden;z-index:-1}.ui.dropdown>.loading.menu{left:0!important;right:auto!important}.ui.dropdown>.menu .loading.menu{left:100%!important;right:auto!important}.ui.dropdown .menu .selected.item,.ui.dropdown.selected{background:rgba(0,0,0,.03);color:rgba(0,0,0,.95)}.ui.dropdown>.filtered.text{visibility:hidden}.ui.dropdown .filtered.item{display:none!important}.ui.dropdown.error,.ui.dropdown.error>.default.text,.ui.dropdown.error>.text{color:#9f3a38}.ui.selection.dropdown.error{background:#fff6f6;border-color:#e0b4b4}.ui.dropdown.error>.menu,.ui.dropdown.error>.menu .menu,.ui.selection.dropdown.error:hover{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item{color:#9f3a38}.ui.multiple.selection.error.dropdown>.label{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item:hover{background-color:#fff2f2}.ui.dropdown.error>.menu .active.item{background-color:#fdcfcf}.ui.dropdown>.clear.dropdown.icon{opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.dropdown>.clear.dropdown.icon:hover{opacity:1}.ui.disabled.dropdown,.ui.dropdown .menu>.disabled.item{cursor:default;pointer-events:none;opacity:.45}.ui.dropdown .menu{left:0}.ui.dropdown .menu .right.menu,.ui.dropdown .right.menu>.menu{left:100%!important;right:auto!important;border-radius:.28571429rem!important}.ui.dropdown>.left.menu{left:auto!important;right:0!important}.ui.dropdown .menu .left.menu,.ui.dropdown>.left.menu .menu{left:auto;right:100%;margin:0 -.5em 0 0!important;border-radius:.28571429rem!important}.ui.dropdown .item .left.dropdown.icon,.ui.dropdown .left.menu .item .dropdown.icon{width:auto;float:left;margin:0}.ui.dropdown .item .left.dropdown.icon+.text,.ui.dropdown .left.menu .item .dropdown.icon+.text{margin-left:1em;margin-right:0}.ui.upward.dropdown>.menu{top:auto;bottom:100%;-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,.08);box-shadow:0 0 3px 0 rgba(0,0,0,.08);border-radius:.28571429rem .28571429rem 0 0}.ui.dropdown .upward.menu{top:auto!important;bottom:0!important}.ui.simple.upward.active.dropdown,.ui.simple.upward.dropdown:hover{border-radius:.28571429rem .28571429rem 0 0!important}.ui.upward.dropdown.button:not(.pointing):not(.floating).active{border-radius:.28571429rem .28571429rem 0 0}.ui.upward.selection.dropdown .menu{border-top-width:1px!important;border-bottom-width:0!important;-webkit-box-shadow:0 -2px 3px 0 rgba(0,0,0,.08);box-shadow:0 -2px 3px 0 rgba(0,0,0,.08)}.ui.upward.selection.dropdown:hover{-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.05);box-shadow:0 0 2px 0 rgba(0,0,0,.05)}.ui.active.upward.selection.dropdown,.ui.upward.selection.dropdown.visible{border-radius:0 0 .28571429rem .28571429rem!important}.ui.upward.selection.dropdown.visible{-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,.08);box-shadow:0 0 3px 0 rgba(0,0,0,.08)}.ui.upward.active.selection.dropdown:hover{-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,.05);box-shadow:0 0 3px 0 rgba(0,0,0,.05)}.ui.upward.active.selection.dropdown:hover .menu{-webkit-box-shadow:0 -2px 3px 0 rgba(0,0,0,.08);box-shadow:0 -2px 3px 0 rgba(0,0,0,.08)}.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{overflow-x:hidden;overflow-y:auto}.ui.scrolling.dropdown .menu{overflow-x:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{overflow-y:auto;min-width:100%!important;width:auto!important}.ui.dropdown .scrolling.menu{position:static;-webkit-box-shadow:none!important;box-shadow:none!important;border-radius:0!important;margin:0!important;border:none;border-top:1px solid rgba(34,36,38,.15)}.ui.dropdown .scrolling.menu .item:first-child,.ui.dropdown .scrolling.menu>.item.item.item,.ui.scrolling.dropdown .menu .item.item.item,.ui.scrolling.dropdown .menu .item:first-child{border-top:none}.ui.dropdown>.animating.menu .scrolling.menu,.ui.dropdown>.visible.menu .scrolling.menu{display:block}@media (-ms-high-contrast:none){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{min-width:calc(100% - 17px)}}@media only screen and (max-width:767px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:10.28571429rem}}@media only screen and (min-width:768px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:15.42857143rem}}@media only screen and (min-width:992px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:20.57142857rem}}@media only screen and (min-width:1920px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:20.57142857rem}}.ui.simple.dropdown .menu:after,.ui.simple.dropdown .menu:before{display:none}.ui.simple.dropdown .menu{position:absolute;display:block;overflow:hidden;top:-9999px!important;opacity:0;width:0;height:0;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.simple.active.dropdown,.ui.simple.dropdown:hover{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.simple.active.dropdown>.menu,.ui.simple.dropdown:hover>.menu{overflow:visible;width:auto;height:auto;top:100%!important;opacity:1}.ui.simple.dropdown:hover>.menu>.item:hover>.menu,.ui.simple.dropdown>.menu>.item:active>.menu{overflow:visible;width:auto;height:auto;top:0!important;left:100%!important;opacity:1}.ui.simple.disabled.dropdown:hover .menu{display:none;height:0;width:0;overflow:hidden}.ui.simple.visible.dropdown>.menu{display:block}.ui.fluid.dropdown{display:block;width:100%;min-width:0}.ui.fluid.dropdown>.dropdown.icon{float:right}.ui.floating.dropdown .menu{left:0;right:auto;-webkit-box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)!important;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)!important;border-radius:.28571429rem!important}.ui.floating.dropdown>.menu{margin-top:.5em!important;border-radius:.28571429rem!important}.ui.pointing.dropdown>.menu{top:100%;margin-top:.78571429rem;border-radius:.28571429rem}.ui.pointing.dropdown>.menu:after{display:block;position:absolute;pointer-events:none;content:"";visibility:visible;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:.5em;height:.5em;-webkit-box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);background:#fff;z-index:2;top:-.25em;left:50%;margin:0 0 0 -.25em}.ui.top.left.pointing.dropdown>.menu{top:100%;bottom:auto;left:0;right:auto;margin:1em 0 0}.ui.top.left.pointing.dropdown>.menu:after{top:-.25em;left:1em;right:auto;margin:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.top.right.pointing.dropdown>.menu{top:100%;bottom:auto;right:0;left:auto;margin:1em 0 0}.ui.top.pointing.dropdown>.left.menu:after,.ui.top.right.pointing.dropdown>.menu:after{top:-.25em;left:auto!important;right:1em!important;margin:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.left.pointing.dropdown>.menu{top:0;left:100%;right:auto;margin:0 0 0 1em}.ui.left.pointing.dropdown>.menu:after{top:1em;left:-.25em;margin:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.ui.left:not(.top):not(.bottom).pointing.dropdown>.left.menu{left:auto!important;right:100%!important;margin:0 1em 0 0}.ui.left:not(.top):not(.bottom).pointing.dropdown>.left.menu:after{top:1em;left:auto;right:-.25em;margin:0;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ui.right.pointing.dropdown>.menu{top:0;left:auto;right:100%;margin:0 1em 0 0}.ui.right.pointing.dropdown>.menu:after{top:1em;left:auto;right:-.25em;margin:0;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ui.bottom.pointing.dropdown>.menu{top:auto;bottom:100%;left:0;right:auto;margin:0 0 1em}.ui.bottom.pointing.dropdown>.menu:after{top:auto;bottom:-.25em;right:auto;margin:0;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.ui.bottom.pointing.dropdown>.menu .menu{top:auto!important;bottom:0!important}.ui.bottom.left.pointing.dropdown>.menu{left:0;right:auto}.ui.bottom.left.pointing.dropdown>.menu:after{left:1em;right:auto}.ui.bottom.right.pointing.dropdown>.menu{right:0;left:auto}.ui.bottom.right.pointing.dropdown>.menu:after{left:auto;right:1em}.ui.pointing.upward.dropdown .menu,.ui.top.pointing.upward.dropdown .menu{top:auto!important;bottom:100%!important;margin:0 0 .78571429rem;border-radius:.28571429rem}.ui.pointing.upward.dropdown .menu:after,.ui.top.pointing.upward.dropdown .menu:after{top:100%!important;bottom:auto!important;-webkit-box-shadow:1px 1px 0 0 rgba(34,36,38,.15);box-shadow:1px 1px 0 0 rgba(34,36,38,.15);margin:-.25em 0 0}.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu{top:auto!important;bottom:0!important;margin:0 1em 0 0}.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after{top:auto!important;bottom:0!important;margin:0 0 1em;-webkit-box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);box-shadow:-1px -1px 0 0 rgba(34,36,38,.15)}.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu{top:auto!important;bottom:0!important;margin:0 0 0 1em}.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after{top:auto!important;bottom:0!important;margin:0 0 1em;-webkit-box-shadow:-1px -1px 0 0 rgba(34,36,38,.15);box-shadow:-1px -1px 0 0 rgba(34,36,38,.15)}@font-face{font-family:Dropdown;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAVgAA8AAAAACFAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABWAAAABwAAAAchGgaq0dERUYAAAF0AAAAHAAAAB4AJwAPT1MvMgAAAZAAAABDAAAAVnW4TJdjbWFwAAAB1AAAAEsAAAFS8CcaqmN2dCAAAAIgAAAABAAAAAQAEQFEZ2FzcAAAAiQAAAAIAAAACP//AANnbHlmAAACLAAAAQoAAAGkrRHP9WhlYWQAAAM4AAAAMAAAADYPK8YyaGhlYQAAA2gAAAAdAAAAJANCAb1obXR4AAADiAAAACIAAAAiCBkAOGxvY2EAAAOsAAAAFAAAABQBnAIybWF4cAAAA8AAAAAfAAAAIAEVAF5uYW1lAAAD4AAAATAAAAKMFGlj5HBvc3QAAAUQAAAARgAAAHJoedjqd2ViZgAABVgAAAAGAAAABrO7W5UAAAABAAAAANXulPUAAAAA1r4hgAAAAADXu2Q1eNpjYGRgYOABYjEgZmJgBEIOIGYB8xgAA/YAN3jaY2BktGOcwMDKwMI4jTGNgYHBHUp/ZZBkaGFgYGJgZWbACgLSXFMYHFT/fLjFeOD/AQY9xjMMbkBhRpAcAN48DQYAeNpjYGBgZoBgGQZGBhDwAfIYwXwWBgMgzQGETAwMqn8+8H649f8/lHX9//9b7Pzf+fWgusCAkY0BzmUE6gHpQwGMDMMeAACbxg7SAAARAUQAAAAB//8AAnjadZBPSsNAGMXfS+yMqYgOhpSuSlKadmUhiVEhEMQzFF22m17BbbvzCh5BXCUn6EG8gjeQ4DepwYo4i+/ffL95j4EDA+CFC7jQuKyIeVHrI3wkleq9F7XrSInKteOeHdda8bOoaeepSc00NWPz/LRec9G8GabyGtEdF7h19z033GAMTK7zbM42xNEZpzYof0RtQ5CUHAQJ73OtVyutc+3b7Ou//b8XNlsPx3jgjUifABdhEohKJJL5iM5p39uqc7X1+sRQSqmGrUVhlsJ4lpmEUVwyT8SUYtg0P9DyNzPADDs+tjrGV6KRCRfsui3eHcL4/p8ZXvfMlcnEU+CLv7hDykOP+AKTPTxbAAB42mNgZGBgAGKuf5KP4vltvjLIMzGAwLV9ig0g+vruFFMQzdjACOJzMIClARh0CTJ42mNgZGBgPPD/AJD8wgAEjA0MjAyogAMAbOQEAQAAAAC7ABEAAAAAAKoAAAH0AAABgAAAAUAACAFAAAgAwAAXAAAAAAAAACoAKgAqADIAbACGAKAAugDSeNpjYGRgYOBkUGFgYgABEMkFhAwM/xn0QAIADdUBdAB42qWQvUoDQRSFv3GjaISUQaymSmGxJoGAsRC0iPYLsU50Y6IxrvlRtPCJJKUPIBb+PIHv4EN4djKuKAqCDHfmu+feOdwZoMCUAJNbAlYUMzaUlM14jjxbngOq7HnOia89z1Pk1vMCa9x7ztPkzfMyJbPj+ZGi6Xp+omxuPD+zaD7meaFg7mb8GrBqHmhwxoAxlm0uiRkpP9X5m26pKRoMxTGR1D49Dv/Yb/91o6l8qL6eu5n2hZQzn68utR9m3FU2cB4t9cdSLG2utI+44Eh/P9bqKO+oJ/WxmXssj77YkrjasZQD6SFddythk3Wtzrf+UF2p076Udla1VNzsERP3kkjVRKel7mp1udXYcHtZSlV7RfmJe1GiFWveluaeKD5/MuJcSk8Tpm/vvwPIbmJleNpjYGKAAFYG7ICTgYGRiZGZkYWRlZGNkZ2Rg5GTLT2nsiDDEEIZsZfmZRqZujmDaDcDAxcI7WIOpS2gtCWUdgQAZkcSmQAAAAFblbO6AAA=) format("woff");font-weight:400;font-style:normal}.ui.dropdown>.dropdown.icon{font-family:Dropdown;line-height:1;height:1em;width:1.23em;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-weight:400;font-style:normal;text-align:center;width:auto}.ui.dropdown>.dropdown.icon:before{content:"\f0d7"}.ui.dropdown .menu .item .dropdown.icon:before{content:"\f0da"}.ui.dropdown .item .left.dropdown.icon:before,.ui.dropdown .left.menu .item .dropdown.icon:before{content:"\f0d9"}.ui.vertical.menu .dropdown.item>.dropdown.icon:before{content:"\f0da"}.ui.dropdown>.clear.icon:before{content:"\f00d"} /*! * # Semantic UI 2.4.0 - Video * http://github.com/semantic-org/semantic-ui/ @@ -361,7 +361,7 @@ * Released under the MIT license * http://opensource.org/licenses/MIT * - */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:none;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);-webkit-box-shadow:0 0 0 0 transparent inset;box-shadow:inset 0 0 0 0 transparent;-webkit-transition:background-color .1s ease,color .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;transition:background-color .1s ease,color .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;-webkit-transform-origin:center top;transform-origin:center top;white-space:normal;text-align:left;text-transform:none;background:#fff;margin-top:.5em;width:18em;border-radius:.28571429rem;-webkit-box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);border:1px solid #d4d4d5;z-index:998}.ui.search>.results>:first-child{border-radius:.28571429rem .28571429rem 0 0}.ui.search>.results>:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.85714286em 1.14285714em;color:rgba(0,0,0,.87);line-height:1.33;border-bottom:1px solid rgba(34,36,38,.1)}.ui.search>.results .result:last-child{border-bottom:none!important}.ui.search>.results .result .image{float:right;overflow:hidden;background:none;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{margin:-.14285714em 0 0;font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;font-size:1em;color:rgba(0,0,0,.85)}.ui.search>.results .result .description{margin-top:0;font-size:.92857143em;color:rgba(0,0,0,.4)}.ui.search>.results .result .price{float:right;color:#21ba45}.ui.search>.results>.message{padding:1em}.ui.search>.results>.message .header{font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-size:1rem;font-weight:700;color:rgba(0,0,0,.87)}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:rgba(0,0,0,.87)}.ui.search>.results>.action{display:block;border-top:none;background:#f3f4f5;padding:.92857143em 1em;color:rgba(0,0,0,.87);font-weight:700;text-align:center}.ui.search>.prompt:focus{border-color:rgba(34,36,38,.35);background:#fff;color:rgba(0,0,0,.95)}.ui.loading.search .input>i.icon:before{border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>i.icon:after,.ui.loading.search .input>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em}.ui.loading.search .input>i.icon:after{-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid transparent;border-top-color:#767676;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent}.ui.category.search>.results .category .result:hover,.ui.search>.results .result:hover{background:#f9fafb}.ui.search .action:hover{background:#e0e0e0}.ui.category.search>.results .category.active{background:#f3f4f5}.ui.category.search>.results .category.active>.name{color:rgba(0,0,0,.87)}.ui.category.search>.results .category .result.active,.ui.search>.results .result.active{position:relative;border-left-color:rgba(34,36,38,.1);background:#f3f4f5;-webkit-box-shadow:none;box-shadow:none}.ui.search>.results .result.active .description,.ui.search>.results .result.active .title{color:rgba(0,0,0,.85)}.ui.disabled.search{cursor:default;pointer-events:none;opacity:.45}.ui.search.selection .prompt{border-radius:.28571429rem}.ui.search.selection>.icon.input>.remove.icon{pointer-events:none;position:absolute;left:auto;opacity:0;color:"";top:0;right:0;-webkit-transition:color .1s ease,opacity .1s ease;transition:color .1s ease,opacity .1s ease}.ui.search.selection>.icon.input>.active.remove.icon{cursor:pointer;opacity:.8;pointer-events:auto}.ui.search.selection>.icon.input:not([class*="left icon"])>.icon~.remove.icon{right:1.85714em}.ui.search.selection>.icon.input>.remove.icon:hover{opacity:1;color:#db2828}.ui.category.search .results{width:28em}.ui.category.search .results.animating,.ui.category.search .results.visible{display:table}.ui.category.search>.results .category{display:table-row;background:#f3f4f5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category:first-child .name+.result{border-radius:0 .28571429rem 0 0}.ui.category.search>.results .category:last-child .result:last-child{border-radius:0 0 .28571429rem 0}.ui.category.search>.results .category>.name{display:table-cell;text-overflow:ellipsis;width:100px;white-space:nowrap;background:transparent;font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-size:1em;padding:.4em 1em;font-weight:700;color:rgba(0,0,0,.4);border-bottom:1px solid rgba(34,36,38,.1)}.ui.category.search>.results .category .results{display:table-cell;background:#fff;border-left:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(34,36,38,.1)}.ui.category.search>.results .category .result{border-bottom:1px solid rgba(34,36,38,.1);-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease;padding:.85714286em 1.14285714em}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.mini.search{font-size:.78571429em}.ui.small.search{font-size:.92857143em}.ui.search{font-size:1em}.ui.large.search{font-size:1.14285714em}.ui.big.search{font-size:1.28571429em}.ui.huge.search{font-size:1.42857143em}.ui.massive.search{font-size:1.71428571em}@media only screen and (max-width:767px){.ui.search .results{max-width:calc(100vw - 2rem)}} + */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:none;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);-webkit-box-shadow:inset 0 0 0 0 transparent;box-shadow:inset 0 0 0 0 transparent;-webkit-transition:background-color .1s ease,color .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;transition:background-color .1s ease,color .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease,-webkit-box-shadow .1s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;-webkit-transform-origin:center top;transform-origin:center top;white-space:normal;text-align:left;text-transform:none;background:#fff;margin-top:.5em;width:18em;border-radius:.28571429rem;-webkit-box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);border:1px solid #d4d4d5;z-index:998}.ui.search>.results>:first-child{border-radius:.28571429rem .28571429rem 0 0}.ui.search>.results>:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.85714286em 1.14285714em;color:rgba(0,0,0,.87);line-height:1.33;border-bottom:1px solid rgba(34,36,38,.1)}.ui.search>.results .result:last-child{border-bottom:none!important}.ui.search>.results .result .image{float:right;overflow:hidden;background:none;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{margin:-.14285714em 0 0;font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:700;font-size:1em;color:rgba(0,0,0,.85)}.ui.search>.results .result .description{margin-top:0;font-size:.92857143em;color:rgba(0,0,0,.4)}.ui.search>.results .result .price{float:right;color:#21ba45}.ui.search>.results>.message{padding:1em}.ui.search>.results>.message .header{font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-size:1rem;font-weight:700;color:rgba(0,0,0,.87)}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:rgba(0,0,0,.87)}.ui.search>.results>.action{display:block;border-top:none;background:#f3f4f5;padding:.92857143em 1em;color:rgba(0,0,0,.87);font-weight:700;text-align:center}.ui.search>.prompt:focus{border-color:rgba(34,36,38,.35);background:#fff;color:rgba(0,0,0,.95)}.ui.loading.search .input>i.icon:before{border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>i.icon:after,.ui.loading.search .input>i.icon:before{position:absolute;content:"";top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em}.ui.loading.search .input>i.icon:after{-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border:.2em solid transparent;border-top-color:#767676;-webkit-box-shadow:0 0 0 1px transparent;box-shadow:0 0 0 1px transparent}.ui.category.search>.results .category .result:hover,.ui.search>.results .result:hover{background:#f9fafb}.ui.search .action:hover{background:#e0e0e0}.ui.category.search>.results .category.active{background:#f3f4f5}.ui.category.search>.results .category.active>.name{color:rgba(0,0,0,.87)}.ui.category.search>.results .category .result.active,.ui.search>.results .result.active{position:relative;border-left-color:rgba(34,36,38,.1);background:#f3f4f5;-webkit-box-shadow:none;box-shadow:none}.ui.search>.results .result.active .description,.ui.search>.results .result.active .title{color:rgba(0,0,0,.85)}.ui.disabled.search{cursor:default;pointer-events:none;opacity:.45}.ui.search.selection .prompt{border-radius:.28571429rem}.ui.search.selection>.icon.input>.remove.icon{pointer-events:none;position:absolute;left:auto;opacity:0;color:"";top:0;right:0;-webkit-transition:color .1s ease,opacity .1s ease;transition:color .1s ease,opacity .1s ease}.ui.search.selection>.icon.input>.active.remove.icon{cursor:pointer;opacity:.8;pointer-events:auto}.ui.search.selection>.icon.input:not([class*="left icon"])>.icon~.remove.icon{right:1.85714em}.ui.search.selection>.icon.input>.remove.icon:hover{opacity:1;color:#db2828}.ui.category.search .results{width:28em}.ui.category.search .results.animating,.ui.category.search .results.visible{display:table}.ui.category.search>.results .category{display:table-row;background:#f3f4f5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category:first-child .name+.result{border-radius:0 .28571429rem 0 0}.ui.category.search>.results .category:last-child .result:last-child{border-radius:0 0 .28571429rem 0}.ui.category.search>.results .category>.name{display:table-cell;text-overflow:ellipsis;width:100px;white-space:nowrap;background:transparent;font-family:Lato,Helvetica Neue,Arial,Helvetica,sans-serif;font-size:1em;padding:.4em 1em;font-weight:700;color:rgba(0,0,0,.4);border-bottom:1px solid rgba(34,36,38,.1)}.ui.category.search>.results .category .results{display:table-cell;background:#fff;border-left:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(34,36,38,.1)}.ui.category.search>.results .category .result{border-bottom:1px solid rgba(34,36,38,.1);-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease;padding:.85714286em 1.14285714em}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.mini.search{font-size:.78571429em}.ui.small.search{font-size:.92857143em}.ui.search{font-size:1em}.ui.large.search{font-size:1.14285714em}.ui.big.search{font-size:1.28571429em}.ui.huge.search{font-size:1.42857143em}.ui.massive.search{font-size:1.71428571em}@media only screen and (max-width:767px){.ui.search .results{max-width:calc(100vw - 2rem)}} /*! * # Semantic UI 2.4.0 - Shape * http://github.com/semantic-org/semantic-ui/ diff --git a/packages/cssnano-preset-default/src/index.js b/packages/cssnano-preset-default/src/index.js index 0dc74456f..e1ccb345b 100644 --- a/packages/cssnano-preset-default/src/index.js +++ b/packages/cssnano-preset-default/src/index.js @@ -43,51 +43,51 @@ import postcssNormalizeTimingFunctions from 'lerna:postcss-normalize-timing-func import rawCache from 'lerna:cssnano-util-raw-cache'; const defaultOpts = { - convertValues: { - length: false, - }, - normalizeCharset: { - add: false, - }, - cssDeclarationSorter: { - exclude: true, - }, + convertValues: { + length: false, + }, + normalizeCharset: { + add: false, + }, + cssDeclarationSorter: { + exclude: true, + }, }; -export default function defaultPreset (opts = {}) { - const options = Object.assign({}, defaultOpts, opts); +export default function defaultPreset(opts = {}) { + const options = Object.assign({}, defaultOpts, opts); - const plugins = [ - [postcssDiscardComments, options.discardComments], - [postcssMinifyGradients, options.minifyGradients], - [postcssReduceInitial, options.reduceInitial], - [postcssSvgo, options.svgo], - [postcssNormalizeDisplayValues, options.normalizeDisplayValues], - [postcssReduceTransforms, options.reduceTransforms], - [postcssColormin, options.colormin], - [postcssNormalizeTimingFunctions, options.normalizeTimingFunctions], - [postcssCalc, options.calc], - [postcssConvertValues, options.convertValues], - [postcssOrderedValues, options.orderedValues], - [postcssMinifySelectors, options.minifySelectors], - [postcssMinifyParams, options.minifyParams], - [postcssNormalizeCharset, options.normalizeCharset], - [postcssDiscardOverridden, options.discardOverridden], - [postcssNormalizeString, options.normalizeString], - [postcssNormalizeUnicode, options.normalizeUnicode], - [postcssMinifyFontValues, options.minifyFontValues], - [postcssNormalizeUrl, options.normalizeUrl], - [postcssNormalizeRepeatStyle, options.normalizeRepeatStyle], - [postcssNormalizePositions, options.normalizePositions], - [postcssNormalizeWhitespace, options.normalizeWhitespace], - [postcssMergeLonghand, options.mergeLonghand], - [postcssDiscardDuplicates, options.discardDuplicates], - [postcssMergeRules, options.mergeRules], - [postcssDiscardEmpty, options.discardEmpty], - [postcssUniqueSelectors, options.uniqueSelectors], - [cssDeclarationSorter, options.cssDeclarationSorter], - [rawCache, options.rawCache], - ]; + const plugins = [ + [postcssDiscardComments, options.discardComments], + [postcssMinifyGradients, options.minifyGradients], + [postcssReduceInitial, options.reduceInitial], + [postcssSvgo, options.svgo], + [postcssNormalizeDisplayValues, options.normalizeDisplayValues], + [postcssReduceTransforms, options.reduceTransforms], + [postcssColormin, options.colormin], + [postcssNormalizeTimingFunctions, options.normalizeTimingFunctions], + [postcssCalc, options.calc], + [postcssConvertValues, options.convertValues], + [postcssOrderedValues, options.orderedValues], + [postcssMinifySelectors, options.minifySelectors], + [postcssMinifyParams, options.minifyParams], + [postcssNormalizeCharset, options.normalizeCharset], + [postcssDiscardOverridden, options.discardOverridden], + [postcssNormalizeString, options.normalizeString], + [postcssNormalizeUnicode, options.normalizeUnicode], + [postcssMinifyFontValues, options.minifyFontValues], + [postcssNormalizeUrl, options.normalizeUrl], + [postcssNormalizeRepeatStyle, options.normalizeRepeatStyle], + [postcssNormalizePositions, options.normalizePositions], + [postcssNormalizeWhitespace, options.normalizeWhitespace], + [postcssMergeLonghand, options.mergeLonghand], + [postcssDiscardDuplicates, options.discardDuplicates], + [postcssMergeRules, options.mergeRules], + [postcssDiscardEmpty, options.discardEmpty], + [postcssUniqueSelectors, options.uniqueSelectors], + [cssDeclarationSorter, options.cssDeclarationSorter], + [rawCache, options.rawCache], + ]; - return {plugins}; + return { plugins }; } diff --git a/packages/cssnano-util-get-arguments/src/__tests__/index.js b/packages/cssnano-util-get-arguments/src/__tests__/index.js index ae895e29a..84f1e8657 100644 --- a/packages/cssnano-util-get-arguments/src/__tests__/index.js +++ b/packages/cssnano-util-get-arguments/src/__tests__/index.js @@ -2,37 +2,49 @@ import test from 'ava'; import valueParser from 'postcss-value-parser'; import getArguments from '../'; -test('should get arguments', t => { - const parsed = valueParser('linear-gradient(to bottom left, red, blue)'); - t.deepEqual(getArguments(parsed.nodes[0]), [ - [{ - type: 'word', - sourceIndex: 16, - value: 'to', - }, { - type: 'space', - sourceIndex: 18, - value: ' ', - }, { - type: 'word', - sourceIndex: 19, - value: 'bottom', - }, { - type: 'space', - sourceIndex: 25, - value: ' ', - }, { - type: 'word', - sourceIndex: 26, - value: 'left', - }], [{ - type: 'word', - sourceIndex: 32, - value: 'red', - }], [{ - type: 'word', - sourceIndex: 37, - value: 'blue', - }], - ]); +test('should get arguments', (t) => { + const parsed = valueParser('linear-gradient(to bottom left, red, blue)'); + t.deepEqual(getArguments(parsed.nodes[0]), [ + [ + { + type: 'word', + sourceIndex: 16, + value: 'to', + }, + { + type: 'space', + sourceIndex: 18, + value: ' ', + }, + { + type: 'word', + sourceIndex: 19, + value: 'bottom', + }, + { + type: 'space', + sourceIndex: 25, + value: ' ', + }, + { + type: 'word', + sourceIndex: 26, + value: 'left', + }, + ], + [ + { + type: 'word', + sourceIndex: 32, + value: 'red', + }, + ], + [ + { + type: 'word', + sourceIndex: 37, + value: 'blue', + }, + ], + ]); }); diff --git a/packages/cssnano-util-get-arguments/src/index.js b/packages/cssnano-util-get-arguments/src/index.js index 62f167bc2..674063efa 100644 --- a/packages/cssnano-util-get-arguments/src/index.js +++ b/packages/cssnano-util-get-arguments/src/index.js @@ -1,10 +1,13 @@ -export default function getArguments (node) { - return node.nodes.reduce((list, child) => { - if (child.type !== 'div') { - list[list.length - 1].push(child); - } else { - list.push([]); - } - return list; - }, [[]]); +export default function getArguments(node) { + return node.nodes.reduce( + (list, child) => { + if (child.type !== 'div') { + list[list.length - 1].push(child); + } else { + list.push([]); + } + return list; + }, + [[]] + ); } diff --git a/packages/cssnano-util-get-match/src/__tests__/index.js b/packages/cssnano-util-get-match/src/__tests__/index.js index 6f84af7f0..e99bb9c80 100644 --- a/packages/cssnano-util-get-match/src/__tests__/index.js +++ b/packages/cssnano-util-get-match/src/__tests__/index.js @@ -1,15 +1,15 @@ import test from 'ava'; import getMatchFactory from '../'; -test('should get match', t => { - const matches = [ - ['foo', ['bar', 'baz']], - ['quux', ['bar', 'foo']], - ['baz', ['foo', 'bar']], - ]; +test('should get match', (t) => { + const matches = [ + ['foo', ['bar', 'baz']], + ['quux', ['bar', 'foo']], + ['baz', ['foo', 'bar']], + ]; - const getMatch = getMatchFactory(matches); + const getMatch = getMatchFactory(matches); - t.deepEqual(getMatch(['bar', 'foo']), 'quux'); - t.false(getMatch(['quux'])); + t.deepEqual(getMatch(['bar', 'foo']), 'quux'); + t.false(getMatch(['quux'])); }); diff --git a/packages/cssnano-util-get-match/src/index.js b/packages/cssnano-util-get-match/src/index.js index b4d675b6b..f4684967e 100644 --- a/packages/cssnano-util-get-match/src/index.js +++ b/packages/cssnano-util-get-match/src/index.js @@ -1,11 +1,13 @@ -export default function getMatchFactory (map) { - return function getMatch (args) { - const match = args.reduce((list, arg, i) => { - return list.filter(keyword => keyword[1][i] === arg); - }, map); - if (match.length) { - return match[0][0]; - } - return false; - }; +export default function getMatchFactory(map) { + return function getMatch(args) { + const match = args.reduce((list, arg, i) => { + return list.filter((keyword) => keyword[1][i] === arg); + }, map); + + if (match.length) { + return match[0][0]; + } + + return false; + }; } diff --git a/packages/cssnano-util-raw-cache/src/index.js b/packages/cssnano-util-raw-cache/src/index.js index b8b328d73..3a6a2e195 100644 --- a/packages/cssnano-util-raw-cache/src/index.js +++ b/packages/cssnano-util-raw-cache/src/index.js @@ -1,19 +1,19 @@ -import {plugin} from 'postcss'; +import { plugin } from 'postcss'; export default plugin('cssnano-util-raw-cache', () => { - return (css, result) => { - result.root.rawCache = { - colon: ':', - indent: '', - beforeDecl: '', - beforeRule: '', - beforeOpen: '', - beforeClose: '', - beforeComment: '', - after: '', - emptyBody: '', - commentLeft: '', - commentRight: '', - }; + return (css, result) => { + result.root.rawCache = { + colon: ':', + indent: '', + beforeDecl: '', + beforeRule: '', + beforeOpen: '', + beforeClose: '', + beforeComment: '', + after: '', + emptyBody: '', + commentLeft: '', + commentRight: '', }; + }; }); diff --git a/packages/cssnano-util-same-parent/src/__tests__/index.js b/packages/cssnano-util-same-parent/src/__tests__/index.js index 30b3ea07b..f75c71278 100644 --- a/packages/cssnano-util-same-parent/src/__tests__/index.js +++ b/packages/cssnano-util-same-parent/src/__tests__/index.js @@ -2,57 +2,68 @@ import test from 'ava'; import postcss from 'postcss'; import sameParent from '..'; -test('should calculate same parent', t => { - return postcss().process('h1 {} h2 {}').then(result => { - const h1 = result.root.nodes[0]; - const h2 = result.root.nodes[1]; - - t.true(sameParent(h1, h2)); +test('should calculate same parent', (t) => { + return postcss() + .process('h1 {} h2 {}') + .then((result) => { + const h1 = result.root.nodes[0]; + const h2 = result.root.nodes[1]; + + t.true(sameParent(h1, h2)); }); }); -test('should calculate same parent (detached nodes)', t => { - return postcss().process('h1 {} h2 {}').then(result => { - const h1 = result.root.nodes[0]; - const h2 = result.root.nodes[1]; +test('should calculate same parent (detached nodes)', (t) => { + return postcss() + .process('h1 {} h2 {}') + .then((result) => { + const h1 = result.root.nodes[0]; + const h2 = result.root.nodes[1]; - h1.remove(); - h2.remove(); + h1.remove(); + h2.remove(); - t.true(sameParent(h1, h2)); + t.true(sameParent(h1, h2)); }); }); -test('should calculate same parent (at rules)', t => { - return postcss().process('@media screen{h1 {} h2 {}}').then(result => { - const h1 = result.root.nodes[0].nodes[0]; - const h2 = result.root.nodes[0].nodes[1]; +test('should calculate same parent (at rules)', (t) => { + return postcss() + .process('@media screen{h1 {} h2 {}}') + .then((result) => { + const h1 = result.root.nodes[0].nodes[0]; + const h2 = result.root.nodes[0].nodes[1]; - t.true(sameParent(h1, h2)); + t.true(sameParent(h1, h2)); }); }); +test('should calculate same parent (multiple at rules)', (t) => { + return postcss() + .process('@media screen{h1 {}} @media screen{h2 {}}') + .then((result) => { + const h1 = result.root.nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0]; -test('should calculate same parent (multiple at rules)', t => { - return postcss().process('@media screen{h1 {}} @media screen{h2 {}}').then(result => { - const h1 = result.root.nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0]; - - t.true(sameParent(h1, h2)); + t.true(sameParent(h1, h2)); }); }); -test('should calculate same parent (multiple at rules (uppercase))', t => { - return postcss().process('@media screen{h1 {}} @MEDIA screen{h2 {}}').then(result => { - const h1 = result.root.nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0]; +test('should calculate same parent (multiple at rules (uppercase))', (t) => { + return postcss() + .process('@media screen{h1 {}} @MEDIA screen{h2 {}}') + .then((result) => { + const h1 = result.root.nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0]; - t.true(sameParent(h1, h2)); + t.true(sameParent(h1, h2)); }); }); -test('should calculate same parent (nested at rules)', t => { - return postcss().process(` +test('should calculate same parent (nested at rules)', (t) => { + return postcss() + .process( + ` @media screen { @supports(pointer: course) { h1 {} @@ -63,16 +74,19 @@ test('should calculate same parent (nested at rules)', t => { h2 {} } } - `).then(result => { - const h1 = result.root.nodes[0].nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0].nodes[0]; - t.true(sameParent(h1, h2)); + ` + ) + .then((result) => { + const h1 = result.root.nodes[0].nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0].nodes[0]; + t.true(sameParent(h1, h2)); }); }); - -test('should calculate not same parent (nested at rules)', t => { - return postcss().process(` +test('should calculate not same parent (nested at rules)', (t) => { + return postcss() + .process( + ` @media screen { @supports(pointer: fine) { h1 {} @@ -83,15 +97,19 @@ test('should calculate not same parent (nested at rules)', t => { h2 {} } } - `).then(result => { - const h1 = result.root.nodes[0].nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0].nodes[0]; - t.false(sameParent(h1, h2)); + ` + ) + .then((result) => { + const h1 = result.root.nodes[0].nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0].nodes[0]; + t.false(sameParent(h1, h2)); }); }); -test('should calculate not same parent (nested at rules) (2)', t => { - return postcss().process(` +test('should calculate not same parent (nested at rules) (2)', (t) => { + return postcss() + .process( + ` @media print { @supports(pointer: course) { h1 {} @@ -102,15 +120,19 @@ test('should calculate not same parent (nested at rules) (2)', t => { h2 {} } } - `).then(result => { - const h1 = result.root.nodes[0].nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0].nodes[0]; - t.false(sameParent(h1, h2)); + ` + ) + .then((result) => { + const h1 = result.root.nodes[0].nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0].nodes[0]; + t.false(sameParent(h1, h2)); }); }); -test('should calculate not same parent (nested at rules) (3)', t => { - return postcss().process(` +test('should calculate not same parent (nested at rules) (3)', (t) => { + return postcss() + .process( + ` @supports(pointer: course) { h1 {} } @@ -119,15 +141,19 @@ test('should calculate not same parent (nested at rules) (3)', t => { h2 {} } } - `).then(result => { - const h1 = result.root.nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0].nodes[0]; - t.false(sameParent(h1, h2)); + ` + ) + .then((result) => { + const h1 = result.root.nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0].nodes[0]; + t.false(sameParent(h1, h2)); }); }); -test('should calculate not same parent (nested at rules) (4)', t => { - return postcss().process(` +test('should calculate not same parent (nested at rules) (4)', (t) => { + return postcss() + .process( + ` @media screen { h1 {} } @@ -136,9 +162,11 @@ test('should calculate not same parent (nested at rules) (4)', t => { h2 {} } } - `).then(result => { - const h1 = result.root.nodes[0].nodes[0]; - const h2 = result.root.nodes[1].nodes[0].nodes[0]; - t.false(sameParent(h1, h2)); + ` + ) + .then((result) => { + const h1 = result.root.nodes[0].nodes[0]; + const h2 = result.root.nodes[1].nodes[0].nodes[0]; + t.false(sameParent(h1, h2)); }); }); diff --git a/packages/cssnano-util-same-parent/src/index.js b/packages/cssnano-util-same-parent/src/index.js index 6a2514bf3..946f876b0 100644 --- a/packages/cssnano-util-same-parent/src/index.js +++ b/packages/cssnano-util-same-parent/src/index.js @@ -3,14 +3,14 @@ * @param {postcss.ChildNode} nodeB * @return {boolean} */ -function checkMatch (nodeA, nodeB) { - if (nodeA.type === 'atrule' && nodeB.type === 'atrule') { - return ( - nodeA.params === nodeB.params && - nodeA.name.toLowerCase() === nodeB.name.toLowerCase() - ); - } - return nodeA.type === nodeB.type; +function checkMatch(nodeA, nodeB) { + if (nodeA.type === 'atrule' && nodeB.type === 'atrule') { + return ( + nodeA.params === nodeB.params && + nodeA.name.toLowerCase() === nodeB.name.toLowerCase() + ); + } + return nodeA.type === nodeB.type; } /** @@ -18,22 +18,22 @@ function checkMatch (nodeA, nodeB) { * @param {postcss.ChildNode} nodeB * @return {boolean} */ -export default function sameParent (nodeA, nodeB) { - if (!nodeA.parent) { - // A is orphaned, return if B is orphaned as well - return !nodeB.parent; - } +export default function sameParent(nodeA, nodeB) { + if (!nodeA.parent) { + // A is orphaned, return if B is orphaned as well + return !nodeB.parent; + } - if (!nodeB.parent) { - // B is orphaned and A is not - return false; - } + if (!nodeB.parent) { + // B is orphaned and A is not + return false; + } - // Check if parents match - if (!checkMatch(nodeA.parent, nodeB.parent)) { - return false; - } + // Check if parents match + if (!checkMatch(nodeA.parent, nodeB.parent)) { + return false; + } - // Check parents' parents - return sameParent(nodeA.parent, nodeB.parent); + // Check parents' parents + return sameParent(nodeA.parent, nodeB.parent); } diff --git a/packages/cssnano/quickstart.js b/packages/cssnano/quickstart.js index f6051128b..31e249368 100644 --- a/packages/cssnano/quickstart.js +++ b/packages/cssnano/quickstart.js @@ -23,9 +23,9 @@ h1 { */ const postcssOpts = { - // from: 'app.css', - // to: 'app.min.css', - // map: {inline: true}, + // from: 'app.css', + // to: 'app.min.css', + // map: {inline: true}, }; /* @@ -35,13 +35,14 @@ const postcssOpts = { */ const cssnanoOpts = { - preset: 'default', + preset: 'default', }; /* * Compress the CSS asynchronously and log it to the console. */ -cssnano.process(css, postcssOpts, cssnanoOpts).then(result => { - console.log(result.css); +cssnano.process(css, postcssOpts, cssnanoOpts).then((result) => { + // eslint-disable-next-line no-console + console.log(result.css); }); diff --git a/packages/cssnano/src/__tests__/_processCss.js b/packages/cssnano/src/__tests__/_processCss.js index 0f3e99b99..663735134 100644 --- a/packages/cssnano/src/__tests__/_processCss.js +++ b/packages/cssnano/src/__tests__/_processCss.js @@ -1,11 +1,11 @@ import cssnano from '..'; -export default function processCss (t, fixture, expected, options = {}) { - return cssnano.process(fixture, options).then(({css}) => { - t.deepEqual(css, expected); - }); +export default function processCss(t, fixture, expected, options = {}) { + return cssnano.process(fixture, options).then(({ css }) => { + t.deepEqual(css, expected); + }); } -export function passthrough (t, fixture, options = {}) { - return processCss(t, fixture, fixture, options); +export function passthrough(t, fixture, options = {}) { + return processCss(t, fixture, fixture, options); } diff --git a/packages/cssnano/src/__tests__/_webpack.config.js b/packages/cssnano/src/__tests__/_webpack.config.js index 4a943ad29..354d839ed 100644 --- a/packages/cssnano/src/__tests__/_webpack.config.js +++ b/packages/cssnano/src/__tests__/_webpack.config.js @@ -1,22 +1,24 @@ const path = require('path'); module.exports = { - entry: { - index: path.join(__dirname, '..'), - }, - output: { - path: path.resolve('./_webpackOutput/'), - filename: 'bundle.js', - }, - module: { - rules: [{ - test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/, - }], - }, - // because client side doesn't have fs :) - node: { - fs: 'empty', - }, + entry: { + index: path.join(__dirname, '..'), + }, + output: { + path: path.resolve('./_webpackOutput/'), + filename: 'bundle.js', + }, + module: { + rules: [ + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + }, + ], + }, + // because client side doesn't have fs :) + node: { + fs: 'empty', + }, }; diff --git a/packages/cssnano/src/__tests__/api.js b/packages/cssnano/src/__tests__/api.js index 60e3fbc61..e39ce3a3f 100644 --- a/packages/cssnano/src/__tests__/api.js +++ b/packages/cssnano/src/__tests__/api.js @@ -1,30 +1,28 @@ import postcss from 'postcss'; import ava from 'ava'; import nano from '..'; -import {usePostCSSPlugin} from '../../../../util/testHelpers'; +import { usePostCSSPlugin } from '../../../../util/testHelpers'; -function pluginMacro (t, instance) { - const css = 'h1 { color: #ffffff }'; - const min = 'h1{color:#fff}'; +function pluginMacro(t, instance) { + const css = 'h1 { color: #ffffff }'; + const min = 'h1{color:#fff}'; - return instance.process(css).then((result) => { - t.deepEqual(result.css, min); - }); + return instance.process(css).then((result) => { + t.deepEqual(result.css, min); + }); } ava('can be used as a postcss plugin', pluginMacro, postcss().use(nano())); ava('can be used as a postcss plugin (2)', pluginMacro, postcss([nano()])); ava('can be used as a postcss plugin (3)', pluginMacro, postcss(nano)); -ava( - 'should use the postcss plugin api', - usePostCSSPlugin, - nano() -); +ava('should use the postcss plugin api', usePostCSSPlugin, nano()); -ava('should work with sourcemaps', t => { - return nano.process('h1{z-index:1}', {map: {inline: true}}).then(({css}) => { - const hasMap = /sourceMappingURL=data:application\/json;base64/.test(css); - t.truthy(hasMap); +ava('should work with sourcemaps', (t) => { + return nano + .process('h1{z-index:1}', { map: { inline: true } }) + .then(({ css }) => { + const hasMap = /sourceMappingURL=data:application\/json;base64/.test(css); + t.truthy(hasMap); }); }); diff --git a/packages/cssnano/src/__tests__/fixtures.js b/packages/cssnano/src/__tests__/fixtures.js index 389ae02aa..c359d4fe5 100644 --- a/packages/cssnano/src/__tests__/fixtures.js +++ b/packages/cssnano/src/__tests__/fixtures.js @@ -2,18 +2,18 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should keep spaces in background repeat', - processCss, - `h1 { + 'should keep spaces in background repeat', + processCss, + `h1 { background: url(image.png) no-repeat }`, - `h1{background:url(image.png) no-repeat}` + `h1{background:url(image.png) no-repeat}` ); test( - 'should handle css mixins', - processCss, - `paper-card { + 'should handle css mixins', + processCss, + `paper-card { --paper-card-content: { padding-top: 0; }; @@ -21,15 +21,15 @@ test( width: 768px; max-width: calc(100% - 32px); }`, - `paper-card{--paper-card-content:{padding-top:0};margin:0 auto 16px;width:768px;max-width:calc(100% - 32px)}` - // Switch back once css-declaration-sorter has been fixed - // `paper-card{margin:0 auto 16px;max-width:calc(100% - 32px);width:768px;--paper-card-content:{padding-top:0};}` + `paper-card{--paper-card-content:{padding-top:0};margin:0 auto 16px;width:768px;max-width:calc(100% - 32px)}` + // Switch back once css-declaration-sorter has been fixed + // `paper-card{margin:0 auto 16px;max-width:calc(100% - 32px);width:768px;--paper-card-content:{padding-top:0};}` ); test( - 'should handle css mixins (2)', - processCss, - `paper-card { + 'should handle css mixins (2)', + processCss, + `paper-card { --paper-card-header: { height: 128px; padding: 0 48px; @@ -48,16 +48,15 @@ test( }; width: 384px; }`, - `paper-card{--paper-card-header:{height:128px;padding:0 48px;background:var(--primary-color);@apply(--layout-vertical);@apply(--layout-end-justified)};--paper-card-header-color:#fff;--paper-card-content:{padding:64px};--paper-card-actions:{@apply(--layout-horizontal);@apply(--layout-end-justified)};width:384px}` - // Switch back once css-declaration-sorter has been fixed - // `paper-card{--paper-card-header-color:#fff;width:384px;--paper-card-header:{background:var(--primary-color);height:128px;padding:0 48px;@apply(--layout-vertical);@apply(--layout-end-justified)};--paper-card-content:{padding:64px};--paper-card-actions:{@apply(--layout-horizontal);@apply(--layout-end-justified)};}` - + `paper-card{--paper-card-header:{height:128px;padding:0 48px;background:var(--primary-color);@apply(--layout-vertical);@apply(--layout-end-justified)};--paper-card-header-color:#fff;--paper-card-content:{padding:64px};--paper-card-actions:{@apply(--layout-horizontal);@apply(--layout-end-justified)};width:384px}` + // Switch back once css-declaration-sorter has been fixed + // `paper-card{--paper-card-header-color:#fff;width:384px;--paper-card-header:{background:var(--primary-color);height:128px;padding:0 48px;@apply(--layout-vertical);@apply(--layout-end-justified)};--paper-card-content:{padding:64px};--paper-card-actions:{@apply(--layout-horizontal);@apply(--layout-end-justified)};}` ); test( - 'should dedupe charset definitions', - processCss, - `@charset "utf-8"; + 'should dedupe charset definitions', + processCss, + `@charset "utf-8"; a { display: block; @@ -68,38 +67,38 @@ test( div { font-family: €42; }`, - `@charset "utf-8";a{display:block}div{font-family:€42}` + `@charset "utf-8";a{display:block}div{font-family:€42}` ); test( - 'should dedupe selectors', - processCss, - `h1, h2 { + 'should dedupe selectors', + processCss, + `h1, h2 { color: red; } h2, h1 { font-weight: 400; }`, - `h1,h2{color:red;font-weight:400}` + `h1,h2{color:red;font-weight:400}` ); test( - 'should dedupe semicolons', - processCss, - `div { + 'should dedupe semicolons', + processCss, + `div { font-weight: 900;;;; color: red;; }`, - `div{font-weight:900;color:red}` - // Switch back once css-declaration-sorter has been fixed - // `div{color:red;font-weight:900}` + `div{font-weight:900;color:red}` + // Switch back once css-declaration-sorter has been fixed + // `div{color:red;font-weight:900}` ); test( - 'should discard duplicate keyframes', - processCss, - `@keyframes fadeOut { + 'should discard duplicate keyframes', + processCss, + `@keyframes fadeOut { 0% { opacity: 1; } @@ -120,22 +119,22 @@ test( .fadeOut { animation-name: fadeOut; }`, - `@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}` + `@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}` ); test( - 'should handle css variables', - processCss, - `.Button--action:hover:not(.is-disabled) { + 'should handle css variables', + processCss, + `.Button--action:hover:not(.is-disabled) { background-color: var(--wc-variant-background-light); }`, - `.Button--action:hover:not(.is-disabled){background-color:var(--wc-variant-background-light)}` + `.Button--action:hover:not(.is-disabled){background-color:var(--wc-variant-background-light)}` ); test( - 'should handle padding shorthand', - processCss, - `h1 { + 'should handle padding shorthand', + processCss, + `h1 { padding: 10px 20px 30px 40px; } @@ -150,65 +149,65 @@ test( h4 { padding: 10px; }`, - `h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}` + `h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}` ); test( - 'should normalize urls', - processCss, - `body { + 'should normalize urls', + processCss, + `body { background: url("http://somewebsite.com/assets/css/../images/test.jpg"); }`, - `body{background:url(http://somewebsite.com/assets/images/test.jpg)}` + `body{background:url(http://somewebsite.com/assets/images/test.jpg)}` ); test( - 'should optimise gradient colour stops', - processCss, - `div { + 'should optimise gradient colour stops', + processCss, + `div { background-image: -webkit-linear-gradient(black, green, yellow); }`, - `div{background-image:-webkit-linear-gradient(#000,green,#ff0)}` + `div{background-image:-webkit-linear-gradient(#000,green,#ff0)}` ); test( - 'should not mangle multiple gradients', - processCss, - `.two-gradients { + 'should not mangle multiple gradients', + processCss, + `.two-gradients { background: linear-gradient(#fff, #999) no-repeat border-box, linear-gradient(#eee, #777) no-repeat border-box; background-size: 98px 50px, 18px 50px; background-position: 0 0, 98px 0; background-origin: padding-box, padding-box; }`, - `.two-gradients{background:linear-gradient(#fff,#999) no-repeat border-box,linear-gradient(#eee,#777) no-repeat border-box;background-size:98px 50px,18px 50px;background-position:0 0,98px 0;background-origin:padding-box,padding-box}` - // Switch back once css-declaration-sorter has been fixed - // `.two-gradients{background:linear-gradient(#fff,#999) no-repeat border-box,linear-gradient(#eee,#777) no-repeat border-box;background-origin:padding-box,padding-box;background-position:0 0,98px 0;background-size:98px 50px,18px 50px}` + `.two-gradients{background:linear-gradient(#fff,#999) no-repeat border-box,linear-gradient(#eee,#777) no-repeat border-box;background-size:98px 50px,18px 50px;background-position:0 0,98px 0;background-origin:padding-box,padding-box}` + // Switch back once css-declaration-sorter has been fixed + // `.two-gradients{background:linear-gradient(#fff,#999) no-repeat border-box,linear-gradient(#eee,#777) no-repeat border-box;background-origin:padding-box,padding-box;background-position:0 0,98px 0;background-size:98px 50px,18px 50px}` ); test( - 'should optimise border longhand', - processCss, - `h1 { + 'should optimise border longhand', + processCss, + `h1 { border-width: 1px 1px 1px 1px; border-color: red #f00 red #f00; border-style: solid solid solid solid; }`, - `h1{border:1px solid red}` + `h1{border:1px solid red}` ); test( - 'should trim whitespace in border radius', - processCss, - `div { + 'should trim whitespace in border radius', + processCss, + `div { border-radius: 100% / 10%; }`, - `div{border-radius:100%/10%}` + `div{border-radius:100%/10%}` ); test( - 'should trim whitespace in selector combinators', - processCss, - `p + p { + 'should trim whitespace in selector combinators', + processCss, + `p + p { font-style: italic; } @@ -219,22 +218,22 @@ test( p > a { font-weight: 700; }`, - `p+p{font-style:italic}h1~p{font-size:2em}p>a{font-weight:700}` + `p+p{font-style:italic}h1~p{font-size:2em}p>a{font-weight:700}` ); test( - 'should trim whitespace in border radius', - processCss, - `div { + 'should trim whitespace in border radius', + processCss, + `div { border-radius: 100% / 10%; }`, - `div{border-radius:100%/10%}` + `div{border-radius:100%/10%}` ); test( - 'should optimise duration', - processCss, - `.short { + 'should optimise duration', + processCss, + `.short { animation-duration: 200ms; } @@ -245,13 +244,13 @@ test( .negative { animation-duration: -569ms; }`, - `.short{animation-duration:.2s}.long{animation-duration:2s}.negative{animation-duration:-569ms}` + `.short{animation-duration:.2s}.long{animation-duration:2s}.negative{animation-duration:-569ms}` ); test( - 'should optimise font face', - processCss, - `@font-face { + 'should optimise font face', + processCss, + `@font-face { font-family: Glyphicons Halflings; src: url(../fonts/bootstrap/glyphicons-halflings-regular.eot); src: url(../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"), @@ -264,69 +263,69 @@ test( .icon { font-family: Glyphicons Halflings; }`, - `@font-face{font-family:Glyphicons Halflings;src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot);src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/bootstrap/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.icon{font-family:Glyphicons Halflings}` + `@font-face{font-family:Glyphicons Halflings;src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot);src:url(../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/bootstrap/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/bootstrap/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.icon{font-family:Glyphicons Halflings}` ); test( - 'should optimise ie9 hack', - processCss, - `h1 { + 'should optimise ie9 hack', + processCss, + `h1 { margin-top: 10px \\9; }`, - `h1{margin-top:10px\\9}` + `h1{margin-top:10px\\9}` ); test( - 'should optimise !important', - processCss, - `p { + 'should optimise !important', + processCss, + `p { margin: 100px !important; }`, - `p{margin:100px!important}` + `p{margin:100px!important}` ); test( - 'should optimise margin longhand', - processCss, - `h1 { + 'should optimise margin longhand', + processCss, + `h1 { margin-top: 9px; margin-right: 10px; margin-bottom: 11px; margin-left: 12px; }`, - `h1{margin:9px 10px 11px 12px}` + `h1{margin:9px 10px 11px 12px}` ); test( - 'should optimise margin longhand (2)', - processCss, - `h1 { + 'should optimise margin longhand (2)', + processCss, + `h1 { margin-top: 9px; margin-right: 10px; margin-bottom: 9px; margin-left: 10px; }`, - `h1{margin:9px 10px}` + `h1{margin:9px 10px}` ); test( - 'should optimise margin longhand (3)', - processCss, - `h1 { + 'should optimise margin longhand (3)', + processCss, + `h1 { margin-top: 8px; margin-right: 12px !important; margin-bottom: 14px; margin-left: 10px !important; }`, - `h1{margin-top:8px;margin-right:12px!important;margin-bottom:14px;margin-left:10px!important}` - // Switch back once css-declaration-sorter has been fixed - // `h1{margin-bottom:14px;margin-left:10px!important;margin-right:12px!important;margin-top:8px}` + `h1{margin-top:8px;margin-right:12px!important;margin-bottom:14px;margin-left:10px!important}` + // Switch back once css-declaration-sorter has been fixed + // `h1{margin-bottom:14px;margin-left:10px!important;margin-right:12px!important;margin-top:8px}` ); test( - 'should optimise margin shorthand', - processCss, - `h1 { + 'should optimise margin shorthand', + processCss, + `h1 { /* No expected optimisation */ margin: 10px 20px 30px 40px; } @@ -345,51 +344,51 @@ test( /* Expected to transform to 1 value */ margin: 10px 10px 10px 10px; }`, - `h1{margin:10px 20px 30px 40px}h2{margin:10px 20px 30px}h3{margin:10px 20px}h4{margin:10px}` + `h1{margin:10px 20px 30px 40px}h2{margin:10px 20px 30px}h3{margin:10px 20px}h4{margin:10px}` ); test( - 'should optimise padding longhand', - processCss, - `div { + 'should optimise padding longhand', + processCss, + `div { padding-left: 1px; padding-bottom: 2px; padding-top: 3px; padding-right: 4px; }`, - `div{padding:3px 4px 2px 1px}` + `div{padding:3px 4px 2px 1px}` ); test( - 'should preserve calc spaces', - processCss, - `div { + 'should preserve calc spaces', + processCss, + `div { width: calc(100vw / 2 - 6px + 0); }`, - `div{width:calc(50vw - 6px)}` + `div{width:calc(50vw - 6px)}` ); test( - 'should reduce calc', - processCss, - `h1 { + 'should reduce calc', + processCss, + `h1 { width: calc(3px * 2 - 1px); }`, - `h1{width:5px}` + `h1{width:5px}` ); test( - 'should optimise svg', - processCss, - `.box { + 'should optimise svg', + processCss, + `.box { background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20version%3D%221.1%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%201%201%22%20preserveAspectRatio%3D%22none%22%3E%3ClinearGradient%20id%3D%22gradient%22%20gradientUnits%3D%22userSpaceOnUse%22%20x1%3D%220%25%22%20y1%3D%220%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%3E%3Cstop%20offset%3D%220%25%22%20stop-color%3D%22%23414042%22%2F%3E%3Cstop%20offset%3D%22100%25%22%20stop-color%3D%22%23ffffff%22%20stop-opacity%3D%220%22%2F%3E%3C%2FlinearGradient%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%221%22%20height%3D%221%22%20fill%3D%22url(%23gradient)%22%20%2F%3E%3C%2Fsvg%3E'); }`, - `.box{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1' preserveAspectRatio='none'%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='0%25' y1='0%25' x2='100%25' y2='0%25'%3E%3Cstop offset='0%25' stop-color='%23414042'/%3E%3Cstop offset='100%25' stop-color='%23fff' stop-opacity='0'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M0 0h1v1H0z'/%3E%3C/svg%3E")}` + `.box{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1' preserveAspectRatio='none'%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='0%25' y1='0%25' x2='100%25' y2='0%25'%3E%3Cstop offset='0%25' stop-color='%23414042'/%3E%3Cstop offset='100%25' stop-color='%23fff' stop-opacity='0'/%3E%3C/linearGradient%3E%3Cpath fill='url(%23a)' d='M0 0h1v1H0z'/%3E%3C/svg%3E")}` ); test( - 'should remove leading zeroes from reduced calc values', - processCss, - `.box { margin: calc(-.5 * 1rem); }`, - `.box{margin:-.5rem}` + 'should remove leading zeroes from reduced calc values', + processCss, + `.box { margin: calc(-.5 * 1rem); }`, + `.box{margin:-.5rem}` ); diff --git a/packages/cssnano/src/__tests__/issue26.js b/packages/cssnano/src/__tests__/issue26.js index c97fce6f1..9a59fa704 100644 --- a/packages/cssnano/src/__tests__/issue26.js +++ b/packages/cssnano/src/__tests__/issue26.js @@ -26,18 +26,18 @@ const expected = `@media print{.test{-webkit-box-shadow:none;box-shadow:none;-we // Switch back once css-declaration-sorter has been fixed // const expected = `@media print{.test{-webkit-border-radius:0;-webkit-box-shadow:none;border-radius:0;box-shadow:none}}.test{width:500px}`; -ava('it should compress whitespace after node.clone()', t => { - const processor = postcss([ - postcss.plugin('cloner', () => { - return css => { - css.walkAtRules(rule => { - css.prepend(rule.clone()); - rule.remove(); - }); - }; - }), - nano(), - ]); +ava('it should compress whitespace after node.clone()', (t) => { + const processor = postcss([ + postcss.plugin('cloner', () => { + return (css) => { + css.walkAtRules((rule) => { + css.prepend(rule.clone()); + rule.remove(); + }); + }; + }), + nano(), + ]); - return processor.process(fixture).then(r => t.deepEqual(r.css, expected)); + return processor.process(fixture).then((r) => t.deepEqual(r.css, expected)); }); diff --git a/packages/cssnano/src/__tests__/issue315.js b/packages/cssnano/src/__tests__/issue315.js index cf6bb378e..c4172145f 100644 --- a/packages/cssnano/src/__tests__/issue315.js +++ b/packages/cssnano/src/__tests__/issue315.js @@ -3,13 +3,18 @@ import postcss from 'postcss'; import fontMagician from 'postcss-font-magician'; import cssnano from '..'; -test('should work with postcss-font-magician', t => { - const css = ` +test('should work with postcss-font-magician', (t) => { + const css = ` body { - font-family: "Alice"; + font-family: "Alice"; } `; - return postcss([fontMagician, cssnano]).process(css).then(result => { - t.deepEqual(result.css, `@font-face{font-family:Alice;font-style:normal;font-weight:400;src:local("Alice Regular"),local(Alice-Regular),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgo.eot#) format("eot"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrg4.woff2) format("woff2"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgg.woff) format("woff")}body{font-family:Alice}`); + return postcss([fontMagician, cssnano]) + .process(css) + .then((result) => { + t.deepEqual( + result.css, + `@font-face{font-family:Alice;font-style:normal;font-weight:400;src:local("Alice Regular"),local(Alice-Regular),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgo.eot#) format("eot"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrg4.woff2) format("woff2"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgg.woff) format("woff")}body{font-family:Alice}` + ); }); }); diff --git a/packages/cssnano/src/__tests__/issue420.js b/packages/cssnano/src/__tests__/issue420.js index dbc726870..4b6d2915e 100644 --- a/packages/cssnano/src/__tests__/issue420.js +++ b/packages/cssnano/src/__tests__/issue420.js @@ -3,15 +3,21 @@ import postcss from 'postcss'; import fontMagician from 'postcss-font-magician'; import cssnano from '..'; -test('should work with postcss-font-magician with `display` parameter', t => { - const css = ` +test('should work with postcss-font-magician with `display` parameter', (t) => { + const css = ` body { - font-family: "Alice"; + font-family: "Alice"; } `; - return postcss([fontMagician({display: "optional"}), cssnano]).process(css).then(result => { - t.deepEqual(result.css, `@font-face{font-family:Alice;font-style:normal;font-weight:400;src:local("Alice Regular"),local(Alice-Regular),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgo.eot#) format("eot"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrg4.woff2) format("woff2"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgg.woff) format("woff");font-display:optional}body{font-family:Alice}`); - // Switch back once css-declaration-sorter has been fixed - // t.deepEqual(result.css, `@font-face{font-display:optional;font-family:Alice;font-style:normal;font-weight:400;src:local("Alice Regular"),local(Alice-Regular),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgo.eot#) format("eot"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrg4.woff2) format("woff2"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgg.woff) format("woff")}body{font-family:Alice}`); + + return postcss([fontMagician({ display: 'optional' }), cssnano]) + .process(css) + .then((result) => { + t.deepEqual( + result.css, + `@font-face{font-family:Alice;font-style:normal;font-weight:400;src:local("Alice Regular"),local(Alice-Regular),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgo.eot#) format("eot"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrg4.woff2) format("woff2"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgg.woff) format("woff");font-display:optional}body{font-family:Alice}` + ); + // Switch back once css-declaration-sorter has been fixed + // t.deepEqual(result.css, `@font-face{font-display:optional;font-family:Alice;font-style:normal;font-weight:400;src:local("Alice Regular"),local(Alice-Regular),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgo.eot#) format("eot"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrg4.woff2) format("woff2"),url(//fonts.gstatic.com/s/alice/v9/OpNCnoEEmtHa6GcOrgg.woff) format("woff")}body{font-family:Alice}`); }); }); diff --git a/packages/cssnano/src/__tests__/issue579.js b/packages/cssnano/src/__tests__/issue579.js index 99de62eaf..2fe3ec794 100644 --- a/packages/cssnano/src/__tests__/issue579.js +++ b/packages/cssnano/src/__tests__/issue579.js @@ -2,15 +2,21 @@ import test from 'ava'; import postcss from 'postcss'; import cssnano from '..'; -test('should support `env()` and `constant()` is an iPhone X-only feature', t => { - const css = ` +test('should support `env()` and `constant()` is an iPhone X-only feature', (t) => { + const css = ` @supports (height: env(safe-area-inset-bottom)) { .footer { padding-bottom: calc(env(safe-area-inset-bottom) * 3) !important; } } `; - return postcss([cssnano]).process(css).then(result => { - t.deepEqual(result.css, '@supports (height:env(safe-area-inset-bottom)){.footer{padding-bottom:calc(env(safe-area-inset-bottom)*3)!important}}'); + + return postcss([cssnano]) + .process(css) + .then((result) => { + t.deepEqual( + result.css, + '@supports (height:env(safe-area-inset-bottom)){.footer{padding-bottom:calc(env(safe-area-inset-bottom)*3)!important}}' + ); }); }); diff --git a/packages/cssnano/src/__tests__/knownIssues.js b/packages/cssnano/src/__tests__/knownIssues.js index ead751100..b77dbf9d0 100644 --- a/packages/cssnano/src/__tests__/knownIssues.js +++ b/packages/cssnano/src/__tests__/knownIssues.js @@ -10,10 +10,10 @@ import processCss from './_processCss'; */ test.failing( - 'should merge duplicate padding values', - processCss, - `body { padding: 50px; } body { padding: 0; }`, - `body{padding:0}` + 'should merge duplicate padding values', + processCss, + `body { padding: 50px; } body { padding: 0; }`, + `body{padding:0}` ); /* @@ -27,8 +27,8 @@ test.failing( */ test.failing( - 'should correctly handle escaped css', - processCss, - `\\64 \\69 \\76 { \\63 \\6f \\6c \\6f \\72 : \\72 \\67 \\62 \\61 \\28 \\32 \\35 \\35 \\2c \\30 \\2c \\30 \\2c \\2e \\37 \\35 \\29 }`, - `\\64\\69\\76{\\63\\6f\\6c\\6f\\72:\\72\\67\\62\\61\\28\\32\\35\\35\\2c\\30\\2c\\30\\2c\\2e\\37\\35\\29}`, + 'should correctly handle escaped css', + processCss, + `\\64 \\69 \\76 { \\63 \\6f \\6c \\6f \\72 : \\72 \\67 \\62 \\61 \\28 \\32 \\35 \\35 \\2c \\30 \\2c \\30 \\2c \\2e \\37 \\35 \\29 }`, + `\\64\\69\\76{\\63\\6f\\6c\\6f\\72:\\72\\67\\62\\61\\28\\32\\35\\35\\2c\\30\\2c\\30\\2c\\2e\\37\\35\\29}` ); diff --git a/packages/cssnano/src/__tests__/postcss-calc.js b/packages/cssnano/src/__tests__/postcss-calc.js index 0ffe0b9a1..c10f6126a 100644 --- a/packages/cssnano/src/__tests__/postcss-calc.js +++ b/packages/cssnano/src/__tests__/postcss-calc.js @@ -1,108 +1,107 @@ import test from 'ava'; import processCss from './_processCss'; - test( - 'should optimise inside calc', - processCss, - 'h1{width:calc(var(--h) * 1em)}', - 'h1{width:calc(var(--h)*1em)}', + 'should optimise inside calc', + processCss, + 'h1{width:calc(var(--h) * 1em)}', + 'h1{width:calc(var(--h)*1em)}' ); test( - 'should optimise inside calc (1)', - processCss, - 'h1{width:calc(1.5em / var(--h))}', - 'h1{width:calc(1.5em/var(--h))}', + 'should optimise inside calc (1)', + processCss, + 'h1{width:calc(1.5em / var(--h))}', + 'h1{width:calc(1.5em/var(--h))}' ); test( - 'should optimise inside calc (2)', - processCss, - 'h1{--a:calc(var(--x, 1) * 10vw)}', - 'h1{--a:calc(var(--x, 1)*10vw)}', + 'should optimise inside calc (2)', + processCss, + 'h1{--a:calc(var(--x, 1) * 10vw)}', + 'h1{--a:calc(var(--x, 1)*10vw)}' ); test( - 'should optimise inside calc (3)', - processCss, - 'h1{width:calc(calc(2.25rem + 2px) - 1px * 2)}', - 'h1{width:2.25rem}', + 'should optimise inside calc (3)', + processCss, + 'h1{width:calc(calc(2.25rem + 2px) - 1px * 2)}', + 'h1{width:2.25rem}' ); test( - 'should optimise inside calc (4)', - processCss, - 'h1{width:calc(env(safe-area-inset-bottom) * 3) !important}', - 'h1{width:calc(env(safe-area-inset-bottom)*3)!important}', + 'should optimise inside calc (4)', + processCss, + 'h1{width:calc(env(safe-area-inset-bottom) * 3) !important}', + 'h1{width:calc(env(safe-area-inset-bottom)*3)!important}' ); test( - 'should optimise inside calc (5)', - processCss, - 'h1{width:calc(14px + 6 * ((100vw - 320px) / 448))}', - 'h1{width:calc(14px + 6*(100vw - 320px)/448)}', + 'should optimise inside calc (5)', + processCss, + 'h1{width:calc(14px + 6 * ((100vw - 320px) / 448))}', + 'h1{width:calc(14px + 6*(100vw - 320px)/448)}' ); test( - 'should optimise inside calc (6)', - processCss, - 'h1{width:calc((100px - 1em) + (-50px + 1em))}', - 'h1{width:50px}', + 'should optimise inside calc (6)', + processCss, + 'h1{width:calc((100px - 1em) + (-50px + 1em))}', + 'h1{width:50px}' ); test( - 'should optimise inside calc (7)', - processCss, - 'h1{width:calc(50% + (5em + 5%))}', - 'h1{width:calc(55% + 5em)}', + 'should optimise inside calc (7)', + processCss, + 'h1{width:calc(50% + (5em + 5%))}', + 'h1{width:calc(55% + 5em)}' ); test( - 'should optimise inside calc (8)', - processCss, - 'h1{width:calc((99.99% * 1/1) - 0rem)}', - 'h1{width:99.99%}', + 'should optimise inside calc (8)', + processCss, + 'h1{width:calc((99.99% * 1/1) - 0rem)}', + 'h1{width:99.99%}' ); test( - 'should optimise inside calc (8)', - processCss, - 'h1{margin:1px 1px calc(0.5em + 1px)}', - 'h1{margin:1px 1px calc(.5em + 1px)}', + 'should optimise inside calc (8)', + processCss, + 'h1{margin:1px 1px calc(0.5em + 1px)}', + 'h1{margin:1px 1px calc(.5em + 1px)}' ); test( - 'should keep spaces in calc', - processCss, - 'h1{width:calc(100% * 120px)}', - 'h1{width:calc(100%*120px)}', + 'should keep spaces in calc', + processCss, + 'h1{width:calc(100% * 120px)}', + 'h1{width:calc(100%*120px)}' ); test( - 'should keep spaces in calc (2)', - processCss, - 'h1{width:calc(100% + 120px)}', - 'h1{width:calc(100% + 120px)}', + 'should keep spaces in calc (2)', + processCss, + 'h1{width:calc(100% + 120px)}', + 'h1{width:calc(100% + 120px)}' ); test( - 'should keep spaces in calc (3)', - processCss, - 'h1{width:calc(1.5em + var(--h))}', - 'h1{width:calc(1.5em + var(--h))}', + 'should keep spaces in calc (3)', + processCss, + 'h1{width:calc(1.5em + var(--h))}', + 'h1{width:calc(1.5em + var(--h))}' ); test( - 'should keep spaces in calc (4)', - processCss, - 'h1{width:calc(1.5em - var(--h))}', - 'h1{width:calc(1.5em - var(--h))}', + 'should keep spaces in calc (4)', + processCss, + 'h1{width:calc(1.5em - var(--h))}', + 'h1{width:calc(1.5em - var(--h))}' ); test( - 'should keep spaces in calc (5)', - processCss, - 'h1{width:calc(100% - var(--my-var))}', - 'h1{width:calc(100% - var(--my-var))}', + 'should keep spaces in calc (5)', + processCss, + 'h1{width:calc(100% - var(--my-var))}', + 'h1{width:calc(100% - var(--my-var))}' ); diff --git a/packages/cssnano/src/__tests__/postcss-convert-values.js b/packages/cssnano/src/__tests__/postcss-convert-values.js index 825a24429..6d369a878 100644 --- a/packages/cssnano/src/__tests__/postcss-convert-values.js +++ b/packages/cssnano/src/__tests__/postcss-convert-values.js @@ -2,141 +2,141 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should convert milliseconds to seconds', - processCss, - 'h1{transition-duration:500ms}', - 'h1{transition-duration:.5s}', + 'should convert milliseconds to seconds', + processCss, + 'h1{transition-duration:500ms}', + 'h1{transition-duration:.5s}' ); test( - 'should not convert negative milliseconds to seconds', - processCss, - 'h1{animation-duration:-569ms}', - 'h1{animation-duration:-569ms}', + 'should not convert negative milliseconds to seconds', + processCss, + 'h1{animation-duration:-569ms}', + 'h1{animation-duration:-569ms}' ); test( - 'should not remove the unit from zero values (duration)', - processCss, - 'h1{transition-duration:0s}', - 'h1{transition-duration:0s}', + 'should not remove the unit from zero values (duration)', + processCss, + 'h1{transition-duration:0s}', + 'h1{transition-duration:0s}' ); test( - 'should remove unnecessary plus signs', - processCss, - 'h1{width:+14px}', - 'h1{width:14px}', + 'should remove unnecessary plus signs', + processCss, + 'h1{width:+14px}', + 'h1{width:14px}' ); test( - 'should strip the units from length properties', - processCss, - 'h1{margin:0em 0% 0px 0pc}', - 'h1{margin:0}', + 'should strip the units from length properties', + processCss, + 'h1{margin:0em 0% 0px 0pc}', + 'h1{margin:0}' ); test( - 'should trim trailing zeros', - processCss, - 'h1{width:109.00000000000px}', - 'h1{width:109px}', + 'should trim trailing zeros', + processCss, + 'h1{width:109.00000000000px}', + 'h1{width:109px}' ); test( - 'should trim trailing zeros + unit', - processCss, - 'h1{width:0.00px}', - 'h1{width:0}', + 'should trim trailing zeros + unit', + processCss, + 'h1{width:0.00px}', + 'h1{width:0}' ); test( - 'should not mangle flex basis', - processCss, - 'h1{flex-basis:0%}', - 'h1{flex-basis:0%}', + 'should not mangle flex basis', + processCss, + 'h1{flex-basis:0%}', + 'h1{flex-basis:0%}' ); test( - 'should not mangle values without units', - processCss, - 'h1{z-index:1}', - 'h1{z-index:1}', + 'should not mangle values without units', + processCss, + 'h1{z-index:1}', + 'h1{z-index:1}' ); test( - 'should not mangle values outside of its domain', - processCss, - 'h1{background:url(a.png)}', - 'h1{background:url(a.png)}', + 'should not mangle values outside of its domain', + processCss, + 'h1{background:url(a.png)}', + 'h1{background:url(a.png)}' ); test( - 'should optimise fractions', - processCss, - 'h1{opacity:1.}h2{opacity:.0}', - 'h1{opacity:1}h2{opacity:0}', + 'should optimise fractions', + processCss, + 'h1{opacity:1.}h2{opacity:.0}', + 'h1{opacity:1}h2{opacity:0}' ); test( - 'should optimise fractions with units', - processCss, - 'h1{width:10.px}h2{width:.0px}', - 'h1{width:10px}h2{width:0}', + 'should optimise fractions with units', + processCss, + 'h1{width:10.px}h2{width:.0px}', + 'h1{width:10px}h2{width:0}' ); test( - 'should optimise fractions inside calc', - processCss, - 'h1{width:calc(10px + .0px)}', - 'h1{width:10px}', + 'should optimise fractions inside calc', + processCss, + 'h1{width:calc(10px + .0px)}', + 'h1{width:10px}' ); test( - 'should handle leading zero in rem values', - processCss, - '.one{top:0.25rem}', - '.one{top:.25rem}', + 'should handle leading zero in rem values', + processCss, + '.one{top:0.25rem}', + '.one{top:.25rem}' ); test( - 'should handle slash separated values', - processCss, - '.one{background:50% .0%/100.0% 100.0%}', - '.one{background:50% 0/100% 100%}', + 'should handle slash separated values', + processCss, + '.one{background:50% .0%/100.0% 100.0%}', + '.one{background:50% 0/100% 100%}' ); test( - 'should handle comma separated values', - processCss, - '.one{background:50% .0%,100.0% 100.0%}', - '.one{background:50% 0,100% 100%}', + 'should handle comma separated values', + processCss, + '.one{background:50% .0%,100.0% 100.0%}', + '.one{background:50% 0,100% 100%}' ); test( - 'should not mangle duration values', - processCss, - '.long{animation-duration:2s}', - '.long{animation-duration:2s}', + 'should not mangle duration values', + processCss, + '.long{animation-duration:2s}', + '.long{animation-duration:2s}' ); test( - 'should not mangle padding values', - processCss, - 'h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}', - 'h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}', + 'should not mangle padding values', + processCss, + 'h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}', + 'h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}' ); test( - 'should trim leading zeroes from negative values', - processCss, - 'h1,h2{letter-spacing:-0.1rem}', - 'h1,h2{letter-spacing:-.1rem}', + 'should trim leading zeroes from negative values', + processCss, + 'h1,h2{letter-spacing:-0.1rem}', + 'h1,h2{letter-spacing:-.1rem}' ); test( - 'should support viewports units', - processCss, - 'h1,h2{letter-spacing:-0.1vmin}', - 'h1,h2{letter-spacing:-.1vmin}', + 'should support viewports units', + processCss, + 'h1,h2{letter-spacing:-0.1vmin}', + 'h1,h2{letter-spacing:-.1vmin}' ); diff --git a/packages/cssnano/src/__tests__/postcss-discard-comments.js b/packages/cssnano/src/__tests__/postcss-discard-comments.js index 42b79f4c5..83185fc00 100644 --- a/packages/cssnano/src/__tests__/postcss-discard-comments.js +++ b/packages/cssnano/src/__tests__/postcss-discard-comments.js @@ -1,122 +1,122 @@ import test from 'ava'; -import processCss, {passthrough} from './_processCss'; +import processCss, { passthrough } from './_processCss'; test( - 'should remove non-special comments', - processCss, - 'h1{font-weight:700!important/*test comment*/}', - 'h1{font-weight:700!important}', + 'should remove non-special comments', + processCss, + 'h1{font-weight:700!important/*test comment*/}', + 'h1{font-weight:700!important}' ); test( - 'should remove non-special comments 2', - processCss, - 'h1{/*test comment*/font-weight:700}', - 'h1{font-weight:700}', + 'should remove non-special comments 2', + processCss, + 'h1{/*test comment*/font-weight:700}', + 'h1{font-weight:700}' ); test( - 'should remove non-special comments 3', - processCss, - '/*test comment*/h1{font-weight:700}/*test comment*/', - 'h1{font-weight:700}', + 'should remove non-special comments 3', + processCss, + '/*test comment*/h1{font-weight:700}/*test comment*/', + 'h1{font-weight:700}' ); test( - 'should remove non-special comments 4', - processCss, - 'h1{font-weight:/*test comment*/700}', - 'h1{font-weight:700}', + 'should remove non-special comments 4', + processCss, + 'h1{font-weight:/*test comment*/700}', + 'h1{font-weight:700}' ); test( - 'should remove non-special comments 5', - processCss, - 'h1{margin:10px/*test*/20px}', - 'h1{margin:10px 20px}', + 'should remove non-special comments 5', + processCss, + 'h1{margin:10px/*test*/20px}', + 'h1{margin:10px 20px}' ); test( - 'should remove non-special comments 6', - processCss, - 'h1{margin:10px /*test*/ 20px /*test*/ 10px /*test*/ 20px}', - 'h1{margin:10px 20px}', + 'should remove non-special comments 6', + processCss, + 'h1{margin:10px /*test*/ 20px /*test*/ 10px /*test*/ 20px}', + 'h1{margin:10px 20px}' ); test( - 'should remove non-special comments 7', - processCss, - '/*comment*/*/*comment*/{margin:10px}', - '*{margin:10px}', + 'should remove non-special comments 7', + processCss, + '/*comment*/*/*comment*/{margin:10px}', + '*{margin:10px}' ); test( - 'should remove non-special comments 8', - processCss, - 'h1,/*comment*/ h2, h3/*comment*/{margin:20px}', - 'h1,h2,h3{margin:20px}', + 'should remove non-special comments 8', + processCss, + 'h1,/*comment*/ h2, h3/*comment*/{margin:20px}', + 'h1,h2,h3{margin:20px}' ); test( - 'should remove non-special comments 9', - processCss, - '@keyframes /*test*/ fade{0%{opacity:0}100%{opacity:1}}a{animation:fade}', - '@keyframes fade{0%{opacity:0}to{opacity:1}}a{animation:fade}', + 'should remove non-special comments 9', + processCss, + '@keyframes /*test*/ fade{0%{opacity:0}100%{opacity:1}}a{animation:fade}', + '@keyframes fade{0%{opacity:0}to{opacity:1}}a{animation:fade}' ); test( - 'should remove non-special comments 10', - processCss, - '@media only screen /*desktop*/ and (min-width:900px){body{margin:0 auto}}', - '@media only screen and (min-width:900px){body{margin:0 auto}}', + 'should remove non-special comments 10', + processCss, + '@media only screen /*desktop*/ and (min-width:900px){body{margin:0 auto}}', + '@media only screen and (min-width:900px){body{margin:0 auto}}' ); test( - 'should remove non-special comments 11', - processCss, - '@media only screen and (min-width:900px)/*test*/{body{margin:0 auto}}', - '@media only screen and (min-width:900px){body{margin:0 auto}}', + 'should remove non-special comments 11', + processCss, + '@media only screen and (min-width:900px)/*test*/{body{margin:0 auto}}', + '@media only screen and (min-width:900px){body{margin:0 auto}}' ); test( - 'should remove non-special comments 12', - processCss, - 'h1{margin/*test*/:20px}', - 'h1{margin:20px}', + 'should remove non-special comments 12', + processCss, + 'h1{margin/*test*/:20px}', + 'h1{margin:20px}' ); test( - 'should remove non-special comments 13', - processCss, - 'h1{margin:20px! /* test */ important}', - 'h1{margin:20px!important}', + 'should remove non-special comments 13', + processCss, + 'h1{margin:20px! /* test */ important}', + 'h1{margin:20px!important}' ); test( - 'should keep special comments', - processCss, - 'h1{font-weight:700!important/*!test comment*/}', - 'h1{font-weight:700!important/*!test comment*/}', + 'should keep special comments', + processCss, + 'h1{font-weight:700!important/*!test comment*/}', + 'h1{font-weight:700!important/*!test comment*/}' ); test( - 'should keep special comments 2', - passthrough, - 'h1{/*!test comment*/font-weight:700}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{font-weight:700/*!test comment*/}', + 'should keep special comments 2', + passthrough, + 'h1{/*!test comment*/font-weight:700}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{font-weight:700/*!test comment*/}', ); test( - 'should keep special comments 3', - processCss, - '/*!test comment*/h1{font-weight:700}/*!test comment*/', - '/*!test comment*/h1{font-weight:700}/*!test comment*/', + 'should keep special comments 3', + processCss, + '/*!test comment*/h1{font-weight:700}/*!test comment*/', + '/*!test comment*/h1{font-weight:700}/*!test comment*/' ); test( - 'should pass through when it doesn\'t find a comment', - processCss, - 'h1{color:#000;font-weight:700}', - 'h1{color:#000;font-weight:700}', + "should pass through when it doesn't find a comment", + processCss, + 'h1{color:#000;font-weight:700}', + 'h1{color:#000;font-weight:700}' ); diff --git a/packages/cssnano/src/__tests__/postcss-discard-duplicates.js b/packages/cssnano/src/__tests__/postcss-discard-duplicates.js index 41d379e2d..d98122764 100644 --- a/packages/cssnano/src/__tests__/postcss-discard-duplicates.js +++ b/packages/cssnano/src/__tests__/postcss-discard-duplicates.js @@ -2,50 +2,50 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should remove duplicate rules', - processCss, - 'h1{font-weight:700}h1{font-weight:700}', - 'h1{font-weight:700}', + 'should remove duplicate rules', + processCss, + 'h1{font-weight:700}h1{font-weight:700}', + 'h1{font-weight:700}' ); test( - 'should remove duplicate declarations', - processCss, - 'h1{font-weight:700;font-weight:700}', - 'h1{font-weight:700}', + 'should remove duplicate declarations', + processCss, + 'h1{font-weight:700;font-weight:700}', + 'h1{font-weight:700}' ); test( - 'should remove duplicates inside @media queries', - processCss, - '@media print{h1{display:block}h1{display:block}}', - '@media print{h1{display:block}}', + 'should remove duplicates inside @media queries', + processCss, + '@media print{h1{display:block}h1{display:block}}', + '@media print{h1{display:block}}' ); test( - 'should remove duplicate @media queries', - processCss, - '@media print{h1{display:block}}@media print{h1{display:block}}', - '@media print{h1{display:block}}', + 'should remove duplicate @media queries', + processCss, + '@media print{h1{display:block}}@media print{h1{display:block}}', + '@media print{h1{display:block}}' ); test( - 'should remove declarations before rules', - processCss, - 'h1{font-weight:700;font-weight:700}h1{font-weight:700}', - 'h1{font-weight:700}', + 'should remove declarations before rules', + processCss, + 'h1{font-weight:700;font-weight:700}h1{font-weight:700}', + 'h1{font-weight:700}' ); test( - 'should not remove declarations when selectors are different', - processCss, - 'h1{font-weight:700}h2{font-weight:700}', - 'h1,h2{font-weight:700}', + 'should not remove declarations when selectors are different', + processCss, + 'h1{font-weight:700}h2{font-weight:700}', + 'h1,h2{font-weight:700}' ); test( - 'should not remove across contexts', - processCss, - 'h1{display:block}@media print{h1{display:block}}', - 'h1{display:block}@media print{h1{display:block}}', + 'should not remove across contexts', + processCss, + 'h1{display:block}@media print{h1{display:block}}', + 'h1{display:block}@media print{h1{display:block}}' ); diff --git a/packages/cssnano/src/__tests__/postcss-discard-overridden.js b/packages/cssnano/src/__tests__/postcss-discard-overridden.js index e758b616b..8daf4836d 100644 --- a/packages/cssnano/src/__tests__/postcss-discard-overridden.js +++ b/packages/cssnano/src/__tests__/postcss-discard-overridden.js @@ -2,15 +2,15 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should discard overridden rules', - processCss, - '@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}', - '@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}', + 'should discard overridden rules', + processCss, + '@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}', + '@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}' ); test( - 'should discard overridden rules in media queries', - processCss, - '@media screen and (max-width:500px){@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(358deg)}}}@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}', - '@media screen and (max-width:500px){@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(358deg)}}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}', + 'should discard overridden rules in media queries', + processCss, + '@media screen and (max-width:500px){@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(358deg)}}}@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}', + '@media screen and (max-width:500px){@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(358deg)}}}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{animation-name:a}' ); diff --git a/packages/cssnano/src/__tests__/postcss-merge-longhand.js b/packages/cssnano/src/__tests__/postcss-merge-longhand.js index 8ceb93b33..94f2022bf 100644 --- a/packages/cssnano/src/__tests__/postcss-merge-longhand.js +++ b/packages/cssnano/src/__tests__/postcss-merge-longhand.js @@ -1,228 +1,226 @@ import test from 'ava'; -import processCss, {passthrough} from './_processCss'; +import processCss, { passthrough } from './_processCss'; test( - 'should merge margin values', - processCss, - 'h1{margin-top:10px;margin-right:20px;margin-bottom:30px;margin-left:40px}', - 'h1{margin:10px 20px 30px 40px}', + 'should merge margin values', + processCss, + 'h1{margin-top:10px;margin-right:20px;margin-bottom:30px;margin-left:40px}', + 'h1{margin:10px 20px 30px 40px}' ); test( - 'should merge margin values with !important', - processCss, - 'h1{margin-top:10px!important;margin-right:20px!important;margin-bottom:30px!important;margin-left:40px!important}', - 'h1{margin:10px 20px 30px 40px!important}', + 'should merge margin values with !important', + processCss, + 'h1{margin-top:10px!important;margin-right:20px!important;margin-bottom:30px!important;margin-left:40px!important}', + 'h1{margin:10px 20px 30px 40px!important}' ); test( - 'should merge & then condense margin values', - processCss, - 'h1{margin-top:10px;margin-bottom:10px;margin-left:10px;margin-right:10px}', - 'h1{margin:10px}', + 'should merge & then condense margin values', + processCss, + 'h1{margin-top:10px;margin-bottom:10px;margin-left:10px;margin-right:10px}', + 'h1{margin:10px}' ); test( - 'should not merge margin values with mixed !important', - passthrough, - 'h1{margin-top:10px!important;margin-right:20px;margin-bottom:30px!important;margin-left:40px}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{margin-bottom:30px!important;margin-left:40px;margin-right:20px;margin-top:10px!important}', + 'should not merge margin values with mixed !important', + passthrough, + 'h1{margin-top:10px!important;margin-right:20px;margin-bottom:30px!important;margin-left:40px}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{margin-bottom:30px!important;margin-left:40px;margin-right:20px;margin-top:10px!important}', ); test( - 'should merge padding values', - processCss, - 'h1{padding-top:10px;padding-right:20px;padding-bottom:30px;padding-left:40px}', - 'h1{padding:10px 20px 30px 40px}', + 'should merge padding values', + processCss, + 'h1{padding-top:10px;padding-right:20px;padding-bottom:30px;padding-left:40px}', + 'h1{padding:10px 20px 30px 40px}' ); test( - 'should merge padding values with !important', - processCss, - 'h1{padding-top:10px!important;padding-right:20px!important;padding-bottom:30px!important;padding-left:40px!important}', - 'h1{padding:10px 20px 30px 40px!important}', + 'should merge padding values with !important', + processCss, + 'h1{padding-top:10px!important;padding-right:20px!important;padding-bottom:30px!important;padding-left:40px!important}', + 'h1{padding:10px 20px 30px 40px!important}' ); test( - 'should not merge padding values with mixed !important', - passthrough, - 'h1{padding-top:10px!important;padding-right:20px;padding-bottom:30px!important;padding-left:40px}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{padding-bottom:30px!important;padding-left:40px;padding-right:20px;padding-top:10px!important}', + 'should not merge padding values with mixed !important', + passthrough, + 'h1{padding-top:10px!important;padding-right:20px;padding-bottom:30px!important;padding-left:40px}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{padding-bottom:30px!important;padding-left:40px;padding-right:20px;padding-top:10px!important}', ); test( - 'should merge identical border values', - processCss, - 'h1{border-top:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #000;border-right:1px solid #000}', - 'h1{border:1px solid #000}', + 'should merge identical border values', + processCss, + 'h1{border-top:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #000;border-right:1px solid #000}', + 'h1{border:1px solid #000}' ); test( - 'should merge identical border values with !important', - processCss, - 'h1{border-top:1px solid #000!important;border-bottom:1px solid #000!important;border-left:1px solid #000!important;border-right:1px solid #000!important}', - 'h1{border:1px solid #000!important}', + 'should merge identical border values with !important', + processCss, + 'h1{border-top:1px solid #000!important;border-bottom:1px solid #000!important;border-left:1px solid #000!important;border-right:1px solid #000!important}', + 'h1{border:1px solid #000!important}' ); test( - 'should not merge identical border values with mixed !important', - passthrough, - 'h1{border-top:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #000!important;border-right:1px solid #000!important}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{border-bottom:1px solid #000;border-left:1px solid #000!important;border-right:1px solid #000!important;border-top:1px solid #000}', + 'should not merge identical border values with mixed !important', + passthrough, + 'h1{border-top:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #000!important;border-right:1px solid #000!important}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{border-bottom:1px solid #000;border-left:1px solid #000!important;border-right:1px solid #000!important;border-top:1px solid #000}', ); test( - 'should merge border values', - processCss, - 'h1{border-color:red;border-width:1px;border-style:dashed}', - 'h1{border:1px dashed red}', + 'should merge border values', + processCss, + 'h1{border-color:red;border-width:1px;border-style:dashed}', + 'h1{border:1px dashed red}' ); test( - 'should merge border values with !important', - processCss, - 'h1{border-color:red!important;border-width:1px!important;border-style:dashed!important}', - 'h1{border:1px dashed red!important}', + 'should merge border values with !important', + processCss, + 'h1{border-color:red!important;border-width:1px!important;border-style:dashed!important}', + 'h1{border:1px dashed red!important}' ); test( - 'should merge border values with identical values for all sides', - processCss, - 'h1{border-color:red red red red;border-width:1px 1px 1px 1px;border-style:solid solid solid solid}', - 'h1{border:1px solid red}', + 'should merge border values with identical values for all sides', + processCss, + 'h1{border-color:red red red red;border-width:1px 1px 1px 1px;border-style:solid solid solid solid}', + 'h1{border:1px solid red}' ); test( - 'should not merge border values with mixed !important', - passthrough, - 'h1{border-color:red;border-width:1px!important;border-style:dashed!important}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{border-color:red;border-style:dashed!important;border-width:1px!important}', + 'should not merge border values with mixed !important', + passthrough, + 'h1{border-color:red;border-width:1px!important;border-style:dashed!important}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{border-color:red;border-style:dashed!important;border-width:1px!important}', ); test( - 'should convert 4 values to 1', - processCss, - 'h1{margin:10px 10px 10px 10px}', - 'h1{margin:10px}', + 'should convert 4 values to 1', + processCss, + 'h1{margin:10px 10px 10px 10px}', + 'h1{margin:10px}' ); test( - 'should convert 3 values to 1', - processCss, - 'h1{margin:10px 10px 10px}', - 'h1{margin:10px}', + 'should convert 3 values to 1', + processCss, + 'h1{margin:10px 10px 10px}', + 'h1{margin:10px}' ); test( - 'should convert 3 values to 2', - processCss, - 'h1{margin:10px 20px 10px}', - 'h1{margin:10px 20px}', + 'should convert 3 values to 2', + processCss, + 'h1{margin:10px 20px 10px}', + 'h1{margin:10px 20px}' ); test( - 'should convert 2 values to 1', - processCss, - 'h1{margin:10px 10px}', - 'h1{margin:10px}', + 'should convert 2 values to 1', + processCss, + 'h1{margin:10px 10px}', + 'h1{margin:10px}' ); test( - 'should convert 1 value to 1', - processCss, - 'h1{margin:10px}', - 'h1{margin:10px}', + 'should convert 1 value to 1', + processCss, + 'h1{margin:10px}', + 'h1{margin:10px}' ); test( - 'should convert 4 values to 2', - processCss, - 'h1{margin:10px 20px 10px 20px}', - 'h1{margin:10px 20px}', + 'should convert 4 values to 2', + processCss, + 'h1{margin:10px 20px 10px 20px}', + 'h1{margin:10px 20px}' ); test( - 'should convert 4 values to 3', - processCss, - 'h1{margin:10px 20px 30px 20px}', - 'h1{margin:10px 20px 30px}', + 'should convert 4 values to 3', + processCss, + 'h1{margin:10px 20px 30px 20px}', + 'h1{margin:10px 20px 30px}' ); test( - 'should convert 4 values to 4', - processCss, - 'h1{margin:10px 20px 30px 40px}', - 'h1{margin:10px 20px 30px 40px}', + 'should convert 4 values to 4', + processCss, + 'h1{margin:10px 20px 30px 40px}', + 'h1{margin:10px 20px 30px 40px}' ); test( - 'save fallbacks if after them goes custom css props', - processCss, - 'h1{padding:1em;padding:var(--variable)}', - 'h1{padding:1em;padding:var(--variable)}' + 'save fallbacks if after them goes custom css props', + processCss, + 'h1{padding:1em;padding:var(--variable)}', + 'h1{padding:1em;padding:var(--variable)}' ); test( - 'overwrite custom css props if after them goes same props', - processCss, - 'h1{padding:var(--variable);padding:1em}', - 'h1{padding:1em}' + 'overwrite custom css props if after them goes same props', + processCss, + 'h1{padding:var(--variable);padding:1em}', + 'h1{padding:1em}' ); test( - 'overwrite custom css props if after them goes same props (2)', - processCss, - 'h1{padding:var(--first);padding:var(--second)}', - 'h1{padding:var(--second)}' + 'overwrite custom css props if after them goes same props (2)', + processCss, + 'h1{padding:var(--first);padding:var(--second)}', + 'h1{padding:var(--second)}' ); test( - 'should not break unmergeable rules with custom props', - processCss, - 'h1{padding:var(--variable)}', - 'h1{padding:var(--variable)}' + 'should not break unmergeable rules with custom props', + processCss, + 'h1{padding:var(--variable)}', + 'h1{padding:var(--variable)}' ); test( - 'should not merge rule if it includes mixed values', - passthrough, - 'h1{padding-top:10px;padding-right:15px;padding-bottom:20px;padding-left:var(--variable)}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{padding-bottom:20px;padding-left:var(--variable);padding-right:15px;padding-top:10px}' + 'should not merge rule if it includes mixed values', + passthrough, + 'h1{padding-top:10px;padding-right:15px;padding-bottom:20px;padding-left:var(--variable)}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{padding-bottom:20px;padding-left:var(--variable);padding-right:15px;padding-top:10px}' ); - test( - 'should merge rules with custom props', - processCss, - 'h1{padding-top:var(--variable);padding-right:var(--variable);padding-bottom:var(--variable);padding-left:var(--variable)}', - 'h1{padding:var(--variable)}' + 'should merge rules with custom props', + processCss, + 'h1{padding-top:var(--variable);padding-right:var(--variable);padding-bottom:var(--variable);padding-left:var(--variable)}', + 'h1{padding:var(--variable)}' ); -test( - 'should merge props and dont remove fallbacks', - processCss, - 'h1{padding-top:10px;padding-right:15px;padding-bottom:20px;padding-left:25px;padding-top:var(--variable);padding-right:var(--variable);padding-bottom:var(--variable);padding-left:var(--variable)}', - 'h1{padding:10px 15px 20px 25px;padding:var(--variable)}' +test( + 'should merge props and dont remove fallbacks', + processCss, + 'h1{padding-top:10px;padding-right:15px;padding-bottom:20px;padding-left:25px;padding-top:var(--variable);padding-right:var(--variable);padding-bottom:var(--variable);padding-left:var(--variable)}', + 'h1{padding:10px 15px 20px 25px;padding:var(--variable)}' ); - -test( - 'should merge props and overwrite', - processCss, - 'h1{padding-top:var(--variable);padding-right:var(--variable);padding-bottom:var(--variable);padding-left:var(--variable);padding-top:10px;padding-right:15px;padding-bottom:20px;padding-left:25px}', - 'h1{padding:10px 15px 20px 25px}' +test( + 'should merge props and overwrite', + processCss, + 'h1{padding-top:var(--variable);padding-right:var(--variable);padding-bottom:var(--variable);padding-left:var(--variable);padding-top:10px;padding-right:15px;padding-bottom:20px;padding-left:25px}', + 'h1{padding:10px 15px 20px 25px}' ); test( - 'should overwrite some props and save fallbacks', - processCss, - 'h1{padding-top:10px;padding-right:var(--variable);padding-right:15px;padding-bottom:var(--variable);padding-bottom:20px;padding-left:25px;padding-top:var(--variable);padding-left:var(--variable)}', - 'h1{padding:10px 15px 20px 25px;padding-top:var(--variable);padding-left:var(--variable)}' - // Switch back once css-declaration-sorter has been fixed - // 'h1{padding:10px 15px 20px 25px;padding-left:var(--variable);padding-top:var(--variable)}' + 'should overwrite some props and save fallbacks', + processCss, + 'h1{padding-top:10px;padding-right:var(--variable);padding-right:15px;padding-bottom:var(--variable);padding-bottom:20px;padding-left:25px;padding-top:var(--variable);padding-left:var(--variable)}', + 'h1{padding:10px 15px 20px 25px;padding-top:var(--variable);padding-left:var(--variable)}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{padding:10px 15px 20px 25px;padding-left:var(--variable);padding-top:var(--variable)}' ); diff --git a/packages/cssnano/src/__tests__/postcss-merge-rules.js b/packages/cssnano/src/__tests__/postcss-merge-rules.js index 7356de0b7..b30d4ff50 100644 --- a/packages/cssnano/src/__tests__/postcss-merge-rules.js +++ b/packages/cssnano/src/__tests__/postcss-merge-rules.js @@ -1,251 +1,251 @@ import test from 'ava'; -import processCss, {passthrough} from './_processCss'; +import processCss, { passthrough } from './_processCss'; test( - 'should merge based on declarations', - processCss, - 'h1{display:block}h2{display:block}', - 'h1,h2{display:block}', + 'should merge based on declarations', + processCss, + 'h1{display:block}h2{display:block}', + 'h1,h2{display:block}' ); test( - 'should merge based on declarations (2)', - processCss, - 'h1{color:red;line-height:1.5;font-size:2em;}h2{color:red;line-height:1.5;font-size:2em;}', - 'h1,h2{color:red;line-height:1.5;font-size:2em}', - // Switch back once css-declaration-sorter has been fixed - // 'h1,h2{color:red;font-size:2em;line-height:1.5}', + 'should merge based on declarations (2)', + processCss, + 'h1{color:red;line-height:1.5;font-size:2em;}h2{color:red;line-height:1.5;font-size:2em;}', + 'h1,h2{color:red;line-height:1.5;font-size:2em}' + // Switch back once css-declaration-sorter has been fixed + // 'h1,h2{color:red;font-size:2em;line-height:1.5}', ); test( - 'should merge based on declarations, with a different property order', - processCss, - 'h1{color:red;line-height:1.5;font-size:2em;}h2{font-size:2em;color:red;line-height:1.5;}', - 'h1,h2{color:red;line-height:1.5;font-size:2em}', - // Switch back once css-declaration-sorter has been fixed - // 'h1,h2{color:red;font-size:2em;line-height:1.5}', + 'should merge based on declarations, with a different property order', + processCss, + 'h1{color:red;line-height:1.5;font-size:2em;}h2{font-size:2em;color:red;line-height:1.5;}', + 'h1,h2{color:red;line-height:1.5;font-size:2em}' + // Switch back once css-declaration-sorter has been fixed + // 'h1,h2{color:red;font-size:2em;line-height:1.5}', ); test( - 'should merge based on selectors', - processCss, - 'h1{display:block}h1{text-decoration:underline}', - 'h1{display:block;text-decoration:underline}', + 'should merge based on selectors', + processCss, + 'h1{display:block}h1{text-decoration:underline}', + 'h1{display:block;text-decoration:underline}' ); test( - 'should merge based on selectors (2)', - processCss, - 'h1{color:red;display:block}h1{text-decoration:underline}', - 'h1{color:red;display:block;text-decoration:underline}', + 'should merge based on selectors (2)', + processCss, + 'h1{color:red;display:block}h1{text-decoration:underline}', + 'h1{color:red;display:block;text-decoration:underline}' ); test( - 'should merge based on selectors (3)', - processCss, - 'h1{font-size:2em;color:#000}h1{background:#fff;line-height:1.5;}', - 'h1{font-size:2em;color:#000;background:#fff;line-height:1.5}', - // Switch back once css-declaration-sorter has been fixed - // 'h1{background:#fff;color:#000;font-size:2em;line-height:1.5}', + 'should merge based on selectors (3)', + processCss, + 'h1{font-size:2em;color:#000}h1{background:#fff;line-height:1.5;}', + 'h1{font-size:2em;color:#000;background:#fff;line-height:1.5}' + // Switch back once css-declaration-sorter has been fixed + // 'h1{background:#fff;color:#000;font-size:2em;line-height:1.5}', ); test( - 'should merge in media queries', - processCss, - '@media print{h1{display:block;}h1{color:red;}}', - '@media print{h1{display:block;color:red}}', - // Switch back once css-declaration-sorter has been fixed - // '@media print{h1{color:red;display:block}}', + 'should merge in media queries', + processCss, + '@media print{h1{display:block;}h1{color:red;}}', + '@media print{h1{display:block;color:red}}' + // Switch back once css-declaration-sorter has been fixed + // '@media print{h1{color:red;display:block}}', ); test( - 'should merge in media queries (2)', - processCss, - '@media print{h1{display:block}p{display:block}}', - '@media print{h1,p{display:block}}', + 'should merge in media queries (2)', + processCss, + '@media print{h1{display:block}p{display:block}}', + '@media print{h1,p{display:block}}' ); test( - 'should merge in media queries (3)', - processCss, - '@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}h3{text-decoration:none}', - '@media print{h1{color:red}h1,h2{text-decoration:none}}h3{text-decoration:none}', + 'should merge in media queries (3)', + processCss, + '@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}h3{text-decoration:none}', + '@media print{h1{color:red}h1,h2{text-decoration:none}}h3{text-decoration:none}' ); test( - 'should merge in media queries (4)', - processCss, - 'h3{text-decoration:none}@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}', - 'h3{text-decoration:none}@media print{h1{color:red}h1,h2{text-decoration:none}}', + 'should merge in media queries (4)', + processCss, + 'h3{text-decoration:none}@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}', + 'h3{text-decoration:none}@media print{h1{color:red}h1,h2{text-decoration:none}}' ); test( - 'should not merge across media queries', - processCss, - '@media screen and (max-width:480px){h1{display:block}}@media screen and (min-width:480px){h2{display:block}}', - '@media screen and (max-width:480px){h1{display:block}}@media screen and (min-width:480px){h2{display:block}}', + 'should not merge across media queries', + processCss, + '@media screen and (max-width:480px){h1{display:block}}@media screen and (min-width:480px){h2{display:block}}', + '@media screen and (max-width:480px){h1{display:block}}@media screen and (min-width:480px){h2{display:block}}' ); test( - 'should not merge across media queries (2)', - processCss, - '@media screen and (max-width:200px){h1{color:red}}@media screen and (min-width:480px){h1{display:block}}', - '@media screen and (max-width:200px){h1{color:red}}@media screen and (min-width:480px){h1{display:block}}', + 'should not merge across media queries (2)', + processCss, + '@media screen and (max-width:200px){h1{color:red}}@media screen and (min-width:480px){h1{display:block}}', + '@media screen and (max-width:200px){h1{color:red}}@media screen and (min-width:480px){h1{display:block}}' ); test( - 'should not merge in different contexts', - processCss, - 'h1{display:block}@media print{h1{color:red}}', - 'h1{display:block}@media print{h1{color:red}}', + 'should not merge in different contexts', + processCss, + 'h1{display:block}@media print{h1{color:red}}', + 'h1{display:block}@media print{h1{color:red}}' ); test( - 'should not merge in different contexts (2)', - processCss, - '@media print{h1{display:block}}h1{color:red}', - '@media print{h1{display:block}}h1{color:red}', + 'should not merge in different contexts (2)', + processCss, + '@media print{h1{display:block}}h1{color:red}', + '@media print{h1{display:block}}h1{color:red}' ); test( - 'should perform partial merging of selectors', - processCss, - 'h1{color:red}h2{color:red;text-decoration:underline}', - 'h1,h2{color:red}h2{text-decoration:underline}', + 'should perform partial merging of selectors', + processCss, + 'h1{color:red}h2{color:red;text-decoration:underline}', + 'h1,h2{color:red}h2{text-decoration:underline}' ); test( - 'should perform partial merging of selectors (2)', - processCss, - 'h1{color:red}h2{color:red;text-decoration:underline}h3{color:green;text-decoration:underline}', - 'h1,h2{color:red}h2,h3{text-decoration:underline}h3{color:green}', + 'should perform partial merging of selectors (2)', + processCss, + 'h1{color:red}h2{color:red;text-decoration:underline}h3{color:green;text-decoration:underline}', + 'h1,h2{color:red}h2,h3{text-decoration:underline}h3{color:green}' ); test( - 'should perform partial merging of selectors (3)', - processCss, - 'h1{color:red;text-decoration:underline}h2{text-decoration:underline;color:green}h3{font-weight:bold;color:green}', - 'h1{color:red}h1,h2{text-decoration:underline}h2,h3{color:green}h3{font-weight:700}', + 'should perform partial merging of selectors (3)', + processCss, + 'h1{color:red;text-decoration:underline}h2{text-decoration:underline;color:green}h3{font-weight:bold;color:green}', + 'h1{color:red}h1,h2{text-decoration:underline}h2,h3{color:green}h3{font-weight:700}' ); test( - 'should perform partial merging of selectors (4)', - processCss, - '.test0{color:red;border:none;margin:0}.test1{color:green;border:none;margin:0}', - '.test0{color:red}.test0,.test1{border:none;margin:0}.test1{color:green}', + 'should perform partial merging of selectors (4)', + processCss, + '.test0{color:red;border:none;margin:0}.test1{color:green;border:none;margin:0}', + '.test0{color:red}.test0,.test1{border:none;margin:0}.test1{color:green}' ); test( - 'should perform partial merging of selectors (5)', - processCss, - 'h1{color:red;font-weight:bold}h2{font-weight:bold}h3{text-decoration:none}', - 'h1{color:red}h1,h2{font-weight:700}h3{text-decoration:none}', + 'should perform partial merging of selectors (5)', + processCss, + 'h1{color:red;font-weight:bold}h2{font-weight:bold}h3{text-decoration:none}', + 'h1{color:red}h1,h2{font-weight:700}h3{text-decoration:none}' ); test( - 'should perform partial merging of selectors (6)', - processCss, - '.test-1,.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', - '.another-test,.test-1,.test-2{margin-top:10px}.another-test{margin-bottom:30px}', + 'should perform partial merging of selectors (6)', + processCss, + '.test-1,.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', + '.another-test,.test-1,.test-2{margin-top:10px}.another-test{margin-bottom:30px}' ); test( - 'should perform partial merging of selectors (7)', - processCss, - '.test-1{margin-top:10px;margin-bottom:20px}.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', - '.test-1{margin-bottom:20px}.another-test,.test-1,.test-2{margin-top:10px}.another-test{margin-bottom:30px}', + 'should perform partial merging of selectors (7)', + processCss, + '.test-1{margin-top:10px;margin-bottom:20px}.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', + '.test-1{margin-bottom:20px}.another-test,.test-1,.test-2{margin-top:10px}.another-test{margin-bottom:30px}' ); test( - 'should perform partial merging of selectors in the opposite direction', - processCss, - 'h1{color:black}h2{color:black;font-weight:bold}h3{color:black;font-weight:bold}', - 'h1{color:#000}h2,h3{color:#000;font-weight:700}', + 'should perform partial merging of selectors in the opposite direction', + processCss, + 'h1{color:black}h2{color:black;font-weight:bold}h3{color:black;font-weight:bold}', + 'h1{color:#000}h2,h3{color:#000;font-weight:700}' ); test( - 'should not perform partial merging of selectors if the output would be longer', - processCss, - '.test0{color:red;border:none;margin:0;}.longlonglonglong{color:green;border:none;margin:0;}', - '.test0{color:red;border:none;margin:0}.longlonglonglong{color:green;border:none;margin:0}', + 'should not perform partial merging of selectors if the output would be longer', + processCss, + '.test0{color:red;border:none;margin:0;}.longlonglonglong{color:green;border:none;margin:0;}', + '.test0{color:red;border:none;margin:0}.longlonglonglong{color:green;border:none;margin:0}' ); test( - 'should merge vendor prefixed selectors when vendors are the same', - processCss, - 'code ::-moz-selection{background:red}code::-moz-selection{background:red}', - 'code::-moz-selection,code ::-moz-selection{background:red}', + 'should merge vendor prefixed selectors when vendors are the same', + processCss, + 'code ::-moz-selection{background:red}code::-moz-selection{background:red}', + 'code::-moz-selection,code ::-moz-selection{background:red}' ); test( - 'should not merge mixed vendor prefixes', - processCss, - 'code ::-webkit-selection{background:red}code::-moz-selection{background:red}', - 'code ::-webkit-selection{background:red}code::-moz-selection{background:red}', + 'should not merge mixed vendor prefixes', + processCss, + 'code ::-webkit-selection{background:red}code::-moz-selection{background:red}', + 'code ::-webkit-selection{background:red}code::-moz-selection{background:red}' ); test( - 'should not merge mixed vendor prefixed and non-vendor prefixed', - processCss, - 'code ::selection{background:red}code ::-moz-selection{background:red}', - 'code ::selection{background:red}code ::-moz-selection{background:red}', + 'should not merge mixed vendor prefixed and non-vendor prefixed', + processCss, + 'code ::selection{background:red}code ::-moz-selection{background:red}', + 'code ::selection{background:red}code ::-moz-selection{background:red}' ); test( - 'should merge text-* properties', - processCss, - 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline}', - 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}', + 'should merge text-* properties', + processCss, + 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline}', + 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}' ); test( - 'should merge text-* properties (2)', - processCss, - 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:green}', - 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}h2{color:green}', + 'should merge text-* properties (2)', + processCss, + 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:green}', + 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}h2{color:green}' ); test( - 'should merge text-* properties (3)', - processCss, - 'h1{background:white;color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:red}', - 'h1{background:#fff}h1,h2{color:red;text-align:right;text-decoration:underline}', + 'should merge text-* properties (3)', + processCss, + 'h1{background:white;color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:red}', + 'h1{background:#fff}h1,h2{color:red;text-align:right;text-decoration:underline}' ); test( - 'should merge text-* properties (4)', - processCss, - 'h1{color:red;text-align:center;text-transform:small-caps}h2{text-align:center;color:red}', - 'h1{text-transform:small-caps}h1,h2{color:red;text-align:center}', + 'should merge text-* properties (4)', + processCss, + 'h1{color:red;text-align:center;text-transform:small-caps}h2{text-align:center;color:red}', + 'h1{text-transform:small-caps}h1,h2{color:red;text-align:center}' ); test( - 'should merge text-* properties (5)', - processCss, - 'h1{text-align:left;text-transform:small-caps}h2{text-align:right;text-transform:small-caps}', - 'h1{text-align:left}h1,h2{text-transform:small-caps}h2{text-align:right}', + 'should merge text-* properties (5)', + processCss, + 'h1{text-align:left;text-transform:small-caps}h2{text-align:right;text-transform:small-caps}', + 'h1{text-align:left}h1,h2{text-transform:small-caps}h2{text-align:right}' ); test( - 'should not incorrectly extract transform properties', - processCss, - '@keyframes a{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}a{animation:a}', - '@keyframes a{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}to{transform-origin:right bottom;transform:rotate(0);opacity:1}}a{animation:a}', - // Switch back once css-declaration-sorter has been fixed - // '@keyframes a{0%{opacity:0;transform:rotate(-90deg);transform-origin:right bottom}to{opacity:1;transform:rotate(0);transform-origin:right bottom}}a{animation:a}', + 'should not incorrectly extract transform properties', + processCss, + '@keyframes a{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}a{animation:a}', + '@keyframes a{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}to{transform-origin:right bottom;transform:rotate(0);opacity:1}}a{animation:a}' + // Switch back once css-declaration-sorter has been fixed + // '@keyframes a{0%{opacity:0;transform:rotate(-90deg);transform-origin:right bottom}to{opacity:1;transform:rotate(0);transform-origin:right bottom}}a{animation:a}', ); test( - 'should not incorrectly extract background properties', - passthrough, - '.iPhone{background:url(a.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-102px -74px}.logo{background:url(b.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-2px -146px}', - // Switch back once css-declaration-sorter has been fixed - // '.iPhone{background:url(a.png);background-image:url(../../../sprites/c.png);background-position:-102px -74px;background-repeat:no-repeat}.logo{background:url(b.png);background-image:url(../../../sprites/c.png);background-position:-2px -146px;background-repeat:no-repeat}', + 'should not incorrectly extract background properties', + passthrough, + '.iPhone{background:url(a.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-102px -74px}.logo{background:url(b.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-2px -146px}' + // Switch back once css-declaration-sorter has been fixed + // '.iPhone{background:url(a.png);background-image:url(../../../sprites/c.png);background-position:-102px -74px;background-repeat:no-repeat}.logo{background:url(b.png);background-image:url(../../../sprites/c.png);background-position:-2px -146px;background-repeat:no-repeat}', ); test( - 'should not incorrectly extract display properties', - processCss, - '.box1{display:inline-block;display:block}.box2{display:inline-block}', - '.box1{display:inline-block;display:block}.box2{display:inline-block}', + 'should not incorrectly extract display properties', + processCss, + '.box1{display:inline-block;display:block}.box2{display:inline-block}', + '.box1{display:inline-block;display:block}.box2{display:inline-block}' ); diff --git a/packages/cssnano/src/__tests__/postcss-minify-font-weight.js b/packages/cssnano/src/__tests__/postcss-minify-font-weight.js index 590d6dec3..b5ec8c2c9 100644 --- a/packages/cssnano/src/__tests__/postcss-minify-font-weight.js +++ b/packages/cssnano/src/__tests__/postcss-minify-font-weight.js @@ -2,22 +2,22 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should convert normal to 400', - processCss, - 'h1{font-weight: normal}', - 'h1{font-weight:400}', + 'should convert normal to 400', + processCss, + 'h1{font-weight: normal}', + 'h1{font-weight:400}' ); test( - 'should convert bold to 700', - processCss, - 'h1{font-weight: bold}', - 'h1{font-weight:700}', + 'should convert bold to 700', + processCss, + 'h1{font-weight: bold}', + 'h1{font-weight:700}' ); test( - 'should not update the font-style property', - processCss, - 'h1{font-style: normal}', - 'h1{font-style:normal}', + 'should not update the font-style property', + processCss, + 'h1{font-style: normal}', + 'h1{font-style:normal}' ); diff --git a/packages/cssnano/src/__tests__/postcss-minify-gradients.js b/packages/cssnano/src/__tests__/postcss-minify-gradients.js index e43bb2488..bd98467f8 100644 --- a/packages/cssnano/src/__tests__/postcss-minify-gradients.js +++ b/packages/cssnano/src/__tests__/postcss-minify-gradients.js @@ -2,106 +2,106 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'linear: should convert "to top" to 0deg', - processCss, - 'background:linear-gradient(to top,#ffe500,#121)', - 'background:linear-gradient(0deg,#ffe500,#121)', + 'linear: should convert "to top" to 0deg', + processCss, + 'background:linear-gradient(to top,#ffe500,#121)', + 'background:linear-gradient(0deg,#ffe500,#121)' ); test( - 'linear: should convert "to right" to 90deg', - processCss, - 'background:linear-gradient(to right,#ffe500,#121)', - 'background:linear-gradient(90deg,#ffe500,#121)', + 'linear: should convert "to right" to 90deg', + processCss, + 'background:linear-gradient(to right,#ffe500,#121)', + 'background:linear-gradient(90deg,#ffe500,#121)' ); test( - 'linear: should convert "to bottom" to 180deg', - processCss, - 'background:linear-gradient(to bottom,#ffe500,#121)', - 'background:linear-gradient(180deg,#ffe500,#121)', + 'linear: should convert "to bottom" to 180deg', + processCss, + 'background:linear-gradient(to bottom,#ffe500,#121)', + 'background:linear-gradient(180deg,#ffe500,#121)' ); test( - 'linear: should convert "to left" to 270deg', - processCss, - 'background:linear-gradient(to left,#ffe500,#121)', - 'background:linear-gradient(270deg,#ffe500,#121)', + 'linear: should convert "to left" to 270deg', + processCss, + 'background:linear-gradient(to left,#ffe500,#121)', + 'background:linear-gradient(270deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to top" to 0deg', - processCss, - 'background:repeating-linear-gradient(to top,#ffe500,#121)', - 'background:repeating-linear-gradient(0deg,#ffe500,#121)', + 'repeating-linear: should convert "to top" to 0deg', + processCss, + 'background:repeating-linear-gradient(to top,#ffe500,#121)', + 'background:repeating-linear-gradient(0deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to right" to 90deg', - processCss, - 'background:repeating-linear-gradient(to right,#ffe500,#121)', - 'background:repeating-linear-gradient(90deg,#ffe500,#121)', + 'repeating-linear: should convert "to right" to 90deg', + processCss, + 'background:repeating-linear-gradient(to right,#ffe500,#121)', + 'background:repeating-linear-gradient(90deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to bottom" to 180deg', - processCss, - 'background:repeating-linear-gradient(to bottom,#ffe500,#121)', - 'background:repeating-linear-gradient(180deg,#ffe500,#121)', + 'repeating-linear: should convert "to bottom" to 180deg', + processCss, + 'background:repeating-linear-gradient(to bottom,#ffe500,#121)', + 'background:repeating-linear-gradient(180deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to left" to 270deg', - processCss, - 'background:repeating-linear-gradient(to left,#ffe500,#121)', - 'background:repeating-linear-gradient(270deg,#ffe500,#121)', + 'repeating-linear: should convert "to left" to 270deg', + processCss, + 'background:repeating-linear-gradient(to left,#ffe500,#121)', + 'background:repeating-linear-gradient(270deg,#ffe500,#121)' ); test( - 'linear: should not convert "to top right" to an angle', - processCss, - 'background:linear-gradient(to top right,#ffe500,#121)', - 'background:linear-gradient(to top right,#ffe500,#121)', + 'linear: should not convert "to top right" to an angle', + processCss, + 'background:linear-gradient(to top right,#ffe500,#121)', + 'background:linear-gradient(to top right,#ffe500,#121)' ); test( - 'linear: should not convert "to bottom left" to an angle', - processCss, - 'background:linear-gradient(to bottom left,#ffe500,#121)', - 'background:linear-gradient(to bottom left,#ffe500,#121)', + 'linear: should not convert "to bottom left" to an angle', + processCss, + 'background:linear-gradient(to bottom left,#ffe500,#121)', + 'background:linear-gradient(to bottom left,#ffe500,#121)' ); test( - 'linear: should reduce length values if they are the same', - processCss, - 'background:linear-gradient(45deg,#ffe500 50%,#121 50%)', - 'background:linear-gradient(45deg,#ffe500 50%,#121 0)', + 'linear: should reduce length values if they are the same', + processCss, + 'background:linear-gradient(45deg,#ffe500 50%,#121 50%)', + 'background:linear-gradient(45deg,#ffe500 50%,#121 0)' ); test( - 'linear: should reduce length values if they are less', - processCss, - 'background:linear-gradient(45deg,#ffe500 50%,#121 25%)', - 'background:linear-gradient(45deg,#ffe500 50%,#121 0)', + 'linear: should reduce length values if they are less', + processCss, + 'background:linear-gradient(45deg,#ffe500 50%,#121 25%)', + 'background:linear-gradient(45deg,#ffe500 50%,#121 0)' ); test( - 'linear: should not reduce length values with different units', - processCss, - 'background:linear-gradient(45deg,#ffe500 25px,#121 20%)', - 'background:linear-gradient(45deg,#ffe500 25px,#121 20%)', + 'linear: should not reduce length values with different units', + processCss, + 'background:linear-gradient(45deg,#ffe500 25px,#121 20%)', + 'background:linear-gradient(45deg,#ffe500 25px,#121 20%)' ); test( - 'linear: should remove the (unnecessary) start/end length values', - processCss, - 'background:linear-gradient(#ffe500 0%,#121 100%)', - 'background:linear-gradient(#ffe500,#121)', + 'linear: should remove the (unnecessary) start/end length values', + processCss, + 'background:linear-gradient(#ffe500 0%,#121 100%)', + 'background:linear-gradient(#ffe500,#121)' ); test( - 'repeating-radial: should reduce length values if they are the same', - processCss, - 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 5px,#ffe500 10px)', - 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 0,#ffe500 10px)', + 'repeating-radial: should reduce length values if they are the same', + processCss, + 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 5px,#ffe500 10px)', + 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 0,#ffe500 10px)' ); diff --git a/packages/cssnano/src/__tests__/postcss-minify-params.js b/packages/cssnano/src/__tests__/postcss-minify-params.js index 3178c2021..c94a284fd 100644 --- a/packages/cssnano/src/__tests__/postcss-minify-params.js +++ b/packages/cssnano/src/__tests__/postcss-minify-params.js @@ -2,8 +2,8 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should normalise @media queries (2)', - processCss, - '@media only screen \n and ( min-width: 400px, min-height: 500px ){h1{color:#00f}}', - '@media only screen and (min-width:400px,min-height:500px){h1{color:#00f}}', + 'should normalise @media queries (2)', + processCss, + '@media only screen \n and ( min-width: 400px, min-height: 500px ){h1{color:#00f}}', + '@media only screen and (min-width:400px,min-height:500px){h1{color:#00f}}' ); diff --git a/packages/cssnano/src/__tests__/postcss-minify-selectors.js b/packages/cssnano/src/__tests__/postcss-minify-selectors.js index a1c15df6e..6e70e11a0 100644 --- a/packages/cssnano/src/__tests__/postcss-minify-selectors.js +++ b/packages/cssnano/src/__tests__/postcss-minify-selectors.js @@ -2,190 +2,190 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should trim spaces in simple selectors', - processCss, - 'h1, h2, h3{color:#00f}', - 'h1,h2,h3{color:#00f}', + 'should trim spaces in simple selectors', + processCss, + 'h1, h2, h3{color:#00f}', + 'h1,h2,h3{color:#00f}' ); test( - 'should trim spaces around combinators', - processCss, - 'h1 + p, h1 > p, h1 ~ p{color:#00f}', - 'h1+p,h1>p,h1~p{color:#00f}', + 'should trim spaces around combinators', + processCss, + 'h1 + p, h1 > p, h1 ~ p{color:#00f}', + 'h1+p,h1>p,h1~p{color:#00f}' ); test( - 'should not trim meaningful spaces', - processCss, - 'h1 p,h2 p{color:#00f}', - 'h1 p,h2 p{color:#00f}', + 'should not trim meaningful spaces', + processCss, + 'h1 p,h2 p{color:#00f}', + 'h1 p,h2 p{color:#00f}' ); test( - 'should reduce meaningful spaces', - processCss, - 'h1 p,h2 p{color:#00f}', - 'h1 p,h2 p{color:#00f}', + 'should reduce meaningful spaces', + processCss, + 'h1 p,h2 p{color:#00f}', + 'h1 p,h2 p{color:#00f}' ); test( - 'should remove qualified universal selectors', - processCss, - '*#id,*.test,*:not(.green),*[href]{color:#00f}', - '#id,.test,:not(.green),[href]{color:#00f}', + 'should remove qualified universal selectors', + processCss, + '*#id,*.test,*:not(.green),*[href]{color:#00f}', + '#id,.test,:not(.green),[href]{color:#00f}' ); test( - 'should remove complex qualified universal selectors', - processCss, - '[class] + *[href] *:not(*.green){color:#00f}', - '[class]+[href] :not(.green){color:#00f}', + 'should remove complex qualified universal selectors', + processCss, + '[class] + *[href] *:not(*.green){color:#00f}', + '[class]+[href] :not(.green){color:#00f}' ); test( - 'should remove complex qualified universal selectors (2)', - processCss, - '*:not(*.green) ~ *{color:#00f}', - ':not(.green)~*{color:#00f}', + 'should remove complex qualified universal selectors (2)', + processCss, + '*:not(*.green) ~ *{color:#00f}', + ':not(.green)~*{color:#00f}' ); test( - 'should not remove meaningful universal selectors', - processCss, - '* + *, * > *, * h1, * ~ *{color:#00f}', - '*+*,*>*,* h1,*~*{color:#00f}', + 'should not remove meaningful universal selectors', + processCss, + '* + *, * > *, * h1, * ~ *{color:#00f}', + '*+*,*>*,* h1,*~*{color:#00f}' ); test( - 'should preserve the universal selector in attribute selectors', - processCss, - 'h1[class=" *.js "] + *.js{color:#00f}', - 'h1[class=" *.js "]+.js{color:#00f}', + 'should preserve the universal selector in attribute selectors', + processCss, + 'h1[class=" *.js "] + *.js{color:#00f}', + 'h1[class=" *.js "]+.js{color:#00f}' ); test( - 'should preserve the universal selector in filenames', - processCss, - '[filename="*.js"]{color:#00f}', - '[filename="*.js"]{color:#00f}', + 'should preserve the universal selector in filenames', + processCss, + '[filename="*.js"]{color:#00f}', + '[filename="*.js"]{color:#00f}' ); test( - 'should preserve the universal selector in file globs', - processCss, - '[glob="/**/*.js"]{color:#00f}', - '[glob="/**/*.js"]{color:#00f}', + 'should preserve the universal selector in file globs', + processCss, + '[glob="/**/*.js"]{color:#00f}', + '[glob="/**/*.js"]{color:#00f}' ); test( - 'should preserve escaped zero plus sequences', - processCss, - '.\\31 0\\+,.\\31 5\\+,.\\32 0\\+{color:#00f}', - '.\\31 0\\+,.\\31 5\\+,.\\32 0\\+{color:#00f}', + 'should preserve escaped zero plus sequences', + processCss, + '.\\31 0\\+,.\\31 5\\+,.\\32 0\\+{color:#00f}', + '.\\31 0\\+,.\\31 5\\+,.\\32 0\\+{color:#00f}' ); test( - 'should handle deep combinators', - processCss, - 'body /deep/ .theme-element{color:#00f}', - 'body /deep/ .theme-element{color:#00f}', + 'should handle deep combinators', + processCss, + 'body /deep/ .theme-element{color:#00f}', + 'body /deep/ .theme-element{color:#00f}' ); test( - 'should sort using natural sort', - processCss, - '.item1, .item10, .item11, .item2{color:#00f}', - '.item1,.item2,.item10,.item11{color:#00f}', + 'should sort using natural sort', + processCss, + '.item1, .item10, .item11, .item2{color:#00f}', + '.item1,.item2,.item10,.item11{color:#00f}' ); test( - 'should dedupe selectors', - processCss, - 'h1,h2,h3,h4,h5,h5,h6{color:#00f}', - 'h1,h2,h3,h4,h5,h6{color:#00f}', + 'should dedupe selectors', + processCss, + 'h1,h2,h3,h4,h5,h5,h6{color:#00f}', + 'h1,h2,h3,h4,h5,h6{color:#00f}' ); test( - 'should trim spaces in :not()', - processCss, - 'h1:not(.article, .comments){color:#00f}', - 'h1:not(.article,.comments){color:#00f}', + 'should trim spaces in :not()', + processCss, + 'h1:not(.article, .comments){color:#00f}', + 'h1:not(.article,.comments){color:#00f}' ); test( - 'should trim spaces in :not() (2)', - processCss, - 'h1:not(.article, .comments), h2:not(.lead, .recommendation){color:#00f}', - 'h1:not(.article,.comments),h2:not(.lead,.recommendation){color:#00f}', + 'should trim spaces in :not() (2)', + processCss, + 'h1:not(.article, .comments), h2:not(.lead, .recommendation){color:#00f}', + 'h1:not(.article,.comments),h2:not(.lead,.recommendation){color:#00f}' ); test( - 'should dedupe simple selectors inside :not()', - processCss, - 'h1:not(h2, h3, h4, h5, h5, h6){color:#00f}', - 'h1:not(h2,h3,h4,h5,h6){color:#00f}', + 'should dedupe simple selectors inside :not()', + processCss, + 'h1:not(h2, h3, h4, h5, h5, h6){color:#00f}', + 'h1:not(h2,h3,h4,h5,h6){color:#00f}' ); test( - 'should normalise attribute selectors', - processCss, - 'a[ color= "blue" ]{color:#00f}', - 'a[color=blue]{color:#00f}', + 'should normalise attribute selectors', + processCss, + 'a[ color= "blue" ]{color:#00f}', + 'a[color=blue]{color:#00f}' ); test( - 'should normalise attribute selectors (2)', - processCss, - 'a[class^="options["]:after{color:#00f}', - 'a[class^="options["]:after{color:#00f}', + 'should normalise attribute selectors (2)', + processCss, + 'a[class^="options["]:after{color:#00f}', + 'a[class^="options["]:after{color:#00f}' ); test( - 'should normalise attribute selectors (3)', - processCss, - 'a[class="woop_woop_woop"]{color:#00f}', - 'a[class=woop_woop_woop]{color:#00f}', + 'should normalise attribute selectors (3)', + processCss, + 'a[class="woop_woop_woop"]{color:#00f}', + 'a[class=woop_woop_woop]{color:#00f}' ); test( - 'should normalise attribute selectors (4)', - processCss, - 'a[class="woop \\\nwoop woop"]{color:#00f}', - 'a[class="woop woop woop"]{color:#00f}', + 'should normalise attribute selectors (4)', + processCss, + 'a[class="woop \\\nwoop woop"]{color:#00f}', + 'a[class="woop woop woop"]{color:#00f}' ); test( - 'should not be responsible for normalising comments', - processCss, - 'h1 /*!test comment*/, h2{color:#00f}', - 'h1 /*!test comment*/,h2{color:#00f}', + 'should not be responsible for normalising comments', + processCss, + 'h1 /*!test comment*/, h2{color:#00f}', + 'h1 /*!test comment*/,h2{color:#00f}' ); test( - 'should not be responsible for normalising coments (2)', - processCss, - '/*!test comment*/h1, h2{color:#00f}', - '/*!test comment*/h1,h2{color:#00f}', + 'should not be responsible for normalising coments (2)', + processCss, + '/*!test comment*/h1, h2{color:#00f}', + '/*!test comment*/h1,h2{color:#00f}' ); test( - 'should not change strings', - processCss, - ':not([attr=" h1 a + b /* not a comment */ end of :not from 100% "]){color:#00f}', - ':not([attr=" h1 a + b /* not a comment */ end of :not from 100% "]){color:#00f}', + 'should not change strings', + processCss, + ':not([attr=" h1 a + b /* not a comment */ end of :not from 100% "]){color:#00f}', + ':not([attr=" h1 a + b /* not a comment */ end of :not from 100% "]){color:#00f}' ); test( - 'should not change strings (2)', - processCss, - ':not([attr=" h1 a + b /* not a comment */ not end of `:not`: ) from 100% "]){color:#00f}', - ':not([attr=" h1 a + b /* not a comment */ not end of `:not`: ) from 100% "]){color:#00f}', + 'should not change strings (2)', + processCss, + ':not([attr=" h1 a + b /* not a comment */ not end of `:not`: ) from 100% "]){color:#00f}', + ':not([attr=" h1 a + b /* not a comment */ not end of `:not`: ) from 100% "]){color:#00f}' ); test( - 'should not change strings (3)', - processCss, - '[a=":not( *.b, h1, h1 )"]{color:#00f}', - '[a=":not( *.b, h1, h1 )"]{color:#00f}', + 'should not change strings (3)', + processCss, + '[a=":not( *.b, h1, h1 )"]{color:#00f}', + '[a=":not( *.b, h1, h1 )"]{color:#00f}' ); diff --git a/packages/cssnano/src/__tests__/postcss-normalize-url.js b/packages/cssnano/src/__tests__/postcss-normalize-url.js index 5435bb58b..3a4b172ec 100644 --- a/packages/cssnano/src/__tests__/postcss-normalize-url.js +++ b/packages/cssnano/src/__tests__/postcss-normalize-url.js @@ -2,149 +2,149 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should strip double quotes', - processCss, - 'h1{background:url("cat.jpg")}', - 'h1{background:url(cat.jpg)}', + 'should strip double quotes', + processCss, + 'h1{background:url("cat.jpg")}', + 'h1{background:url(cat.jpg)}' ); test( - 'should strip single quotes', - processCss, - 'h1{background:url(\'cat.jpg\')}', - 'h1{background:url(cat.jpg)}', + 'should strip single quotes', + processCss, + "h1{background:url('cat.jpg')}", + 'h1{background:url(cat.jpg)}' ); test( - 'should escape special characters', - processCss, - 'h1{background:url("http://website.com/assets)_test.png")}', - 'h1{background:url(http://website.com/assets\\)_test.png)}', + 'should escape special characters', + processCss, + 'h1{background:url("http://website.com/assets)_test.png")}', + 'h1{background:url(http://website.com/assets\\)_test.png)}' ); test( - 'should not escape more than one special character', - processCss, - 'h1{background:url("http://website.com/assets_(test).png")}', - 'h1{background:url("http://website.com/assets_(test).png")}', + 'should not escape more than one special character', + processCss, + 'h1{background:url("http://website.com/assets_(test).png")}', + 'h1{background:url("http://website.com/assets_(test).png")}' ); test( - 'should remove the default port', - processCss, - 'h1{background:url(http://website.com:80/image.png)}', - 'h1{background:url(http://website.com/image.png)}', + 'should remove the default port', + processCss, + 'h1{background:url(http://website.com:80/image.png)}', + 'h1{background:url(http://website.com/image.png)}' ); test( - 'should not remove the fragment', - processCss, - 'h1{background:url(test.svg#icon)}', - 'h1{background:url(test.svg#icon)}', + 'should not remove the fragment', + processCss, + 'h1{background:url(test.svg#icon)}', + 'h1{background:url(test.svg#icon)}' ); test( - 'should not remove the fragment in absolute urls', - processCss, - 'h1{background:url(http://website.com/test.svg#icon)}', - 'h1{background:url(http://website.com/test.svg#icon)}', + 'should not remove the fragment in absolute urls', + processCss, + 'h1{background:url(http://website.com/test.svg#icon)}', + 'h1{background:url(http://website.com/test.svg#icon)}' ); test( - 'should normalize directory traversal', - processCss, - 'h1{background:url(http://website.com/assets/css/../font/t.eot)}', - 'h1{background:url(http://website.com/assets/font/t.eot)}', + 'should normalize directory traversal', + processCss, + 'h1{background:url(http://website.com/assets/css/../font/t.eot)}', + 'h1{background:url(http://website.com/assets/font/t.eot)}' ); test( - 'should normalize directory traversal in relative urls', - processCss, - 'h1{background:url(css/../font/t.eot)}', - 'h1{background:url(font/t.eot)}', + 'should normalize directory traversal in relative urls', + processCss, + 'h1{background:url(css/../font/t.eot)}', + 'h1{background:url(font/t.eot)}' ); test( - 'should trim current directory indicator in relative urls', - processCss, - 'h1{background:url(./images/cat.png)}', - 'h1{background:url(images/cat.png)}', + 'should trim current directory indicator in relative urls', + processCss, + 'h1{background:url(./images/cat.png)}', + 'h1{background:url(images/cat.png)}' ); test( - 'should do the above tests, stripping quotes', - processCss, - 'h1{background:url("./css/../font/t.eot")}', - 'h1{background:url(font/t.eot)}', + 'should do the above tests, stripping quotes', + processCss, + 'h1{background:url("./css/../font/t.eot")}', + 'h1{background:url(font/t.eot)}' ); test( - 'should normalize urls with special characters', - processCss, - 'h1{background:url("http://website.com/test/../(images)/1.png")}', - 'h1{background:url("http://website.com/(images)/1.png")}', + 'should normalize urls with special characters', + processCss, + 'h1{background:url("http://website.com/test/../(images)/1.png")}', + 'h1{background:url("http://website.com/(images)/1.png")}' ); test( - 'should normalize relative urls with special characters', - processCss, - 'h1{background:url("test/../(images)/1.png")}', - 'h1{background:url("(images)/1.png")}', + 'should normalize relative urls with special characters', + processCss, + 'h1{background:url("test/../(images)/1.png")}', + 'h1{background:url("(images)/1.png")}' ); test( - 'should minimise whitespace inside the url function', - processCss, - 'h1{background:url( test.png )}', - 'h1{background:url(test.png)}', + 'should minimise whitespace inside the url function', + processCss, + 'h1{background:url( test.png )}', + 'h1{background:url(test.png)}' ); test( - 'should minimise whitespace inside the url string', - processCss, - 'h1{background:url(" test.png ")}', - 'h1{background:url(test.png)}', + 'should minimise whitespace inside the url string', + processCss, + 'h1{background:url(" test.png ")}', + 'h1{background:url(test.png)}' ); test( - 'should minimise whitespace with special characters', - processCss, - 'h1{background:url(" test (2015).png ")}', - 'h1{background:url("test (2015).png")}', + 'should minimise whitespace with special characters', + processCss, + 'h1{background:url(" test (2015).png ")}', + 'h1{background:url("test (2015).png")}' ); test( - 'should join multiline url functions', - processCss, - 'h1{background:url("some really long string \\\nspanning multiple lines")}', - 'h1{background:url("some really long string spanning multiple lines")}', + 'should join multiline url functions', + processCss, + 'h1{background:url("some really long string \\\nspanning multiple lines")}', + 'h1{background:url("some really long string spanning multiple lines")}' ); test( - 'should process multiple backgrounds', - processCss, - 'h1{background:url( "./test/../foo/bar.jpg" ), url("http://website.com/img.jpg")}', - 'h1{background:url(foo/bar.jpg),url(http://website.com/img.jpg)}', + 'should process multiple backgrounds', + processCss, + 'h1{background:url( "./test/../foo/bar.jpg" ), url("http://website.com/img.jpg")}', + 'h1{background:url(foo/bar.jpg),url(http://website.com/img.jpg)}' ); test( - 'should not mangle data urls', - processCss, - '.has-svg:before{content:url("data:image/svg+xml;utf8,")}', - '.has-svg:before{content:url("data:image/svg+xml;utf8,")}', + 'should not mangle data urls', + processCss, + '.has-svg:before{content:url("data:image/svg+xml;utf8,")}', + '.has-svg:before{content:url("data:image/svg+xml;utf8,")}' ); test( - 'should optimise @namespace urls', - processCss, - '@namespace islands url("http://bar.yandex.ru/ui/islands");', - '@namespace islands "http://bar.yandex.ru/ui/islands";', - {discardUnused: {namespace: false}}, + 'should optimise @namespace urls', + processCss, + '@namespace islands url("http://bar.yandex.ru/ui/islands");', + '@namespace islands "http://bar.yandex.ru/ui/islands";', + { discardUnused: { namespace: false } } ); test( - 'should not normalize @document urls', - processCss, - '@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/){body{font-size:2em}}', - '@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/){body{font-size:2em}}', + 'should not normalize @document urls', + processCss, + '@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/){body{font-size:2em}}', + '@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/){body{font-size:2em}}' ); diff --git a/packages/cssnano/src/__tests__/postcss-reduce-transforms.js b/packages/cssnano/src/__tests__/postcss-reduce-transforms.js index 1ea160e7e..bb6551706 100644 --- a/packages/cssnano/src/__tests__/postcss-reduce-transforms.js +++ b/packages/cssnano/src/__tests__/postcss-reduce-transforms.js @@ -2,113 +2,113 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should shorten matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1) to matrix(a, b, c, d, tx, ty)', - processCss, - 'h1{transform:matrix3d(20, 20, 0, 0, 40, 40, 0, 0, 0, 0, 1, 0, 80, 80, 0, 1)}', - 'h1{transform:matrix(20,20,40,40,80,80)}', + 'should shorten matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1) to matrix(a, b, c, d, tx, ty)', + processCss, + 'h1{transform:matrix3d(20, 20, 0, 0, 40, 40, 0, 0, 0, 0, 1, 0, 80, 80, 0, 1)}', + 'h1{transform:matrix(20,20,40,40,80,80)}' ); test( - 'should shorten rotateZ to rotate', - processCss, - 'h1{transform:rotateZ(180deg)}', - 'h1{transform:rotate(180deg)}', + 'should shorten rotateZ to rotate', + processCss, + 'h1{transform:rotateZ(180deg)}', + 'h1{transform:rotate(180deg)}' ); test( - 'should shorten rotate3d(1, 0, 0, a) to rotateX(a)', - processCss, - 'h1{transform:rotate3d(1, 0, 0, 20deg)}', - 'h1{transform:rotateX(20deg)}', + 'should shorten rotate3d(1, 0, 0, a) to rotateX(a)', + processCss, + 'h1{transform:rotate3d(1, 0, 0, 20deg)}', + 'h1{transform:rotateX(20deg)}' ); test( - 'should shorten rotate3d(0, 1, 0, a) to rotateY(a)', - processCss, - 'h1{transform:rotate3d(0, 1, 0, 20deg)}', - 'h1{transform:rotateY(20deg)}', + 'should shorten rotate3d(0, 1, 0, a) to rotateY(a)', + processCss, + 'h1{transform:rotate3d(0, 1, 0, 20deg)}', + 'h1{transform:rotateY(20deg)}' ); test( - 'should shorten rotate3d(0, 0, 1, a) to rotate(a)', - processCss, - 'h1{transform:rotate3d(0, 0, 1, 20deg)}', - 'h1{transform:rotate(20deg)}', + 'should shorten rotate3d(0, 0, 1, a) to rotate(a)', + processCss, + 'h1{transform:rotate3d(0, 0, 1, 20deg)}', + 'h1{transform:rotate(20deg)}' ); test( - 'should shorten scale(sx, sy) to scale(sx)', - processCss, - 'h1{transform:scale(1.5, 1.5)}', - 'h1{transform:scale(1.5)}', + 'should shorten scale(sx, sy) to scale(sx)', + processCss, + 'h1{transform:scale(1.5, 1.5)}', + 'h1{transform:scale(1.5)}' ); test( - 'should shorten scale(sx, 1) to scaleX(sx)', - processCss, - 'h1{transform:scale(1.5, 1)}', - 'h1{transform:scaleX(1.5)}', + 'should shorten scale(sx, 1) to scaleX(sx)', + processCss, + 'h1{transform:scale(1.5, 1)}', + 'h1{transform:scaleX(1.5)}' ); test( - 'should shorten scale(1, sy) to scaleY(sy)', - processCss, - 'h1{transform:scale(1, 1.5)}', - 'h1{transform:scaleY(1.5)}', + 'should shorten scale(1, sy) to scaleY(sy)', + processCss, + 'h1{transform:scale(1, 1.5)}', + 'h1{transform:scaleY(1.5)}' ); test( - 'should shorten scale3d(sx, 1, 1) to scaleX(sx)', - processCss, - 'h1{transform:scale(1.5, 1, 1)}', - 'h1{transform:scaleX(1.5)}', + 'should pass through invalid scale', + processCss, + 'h1{transform:scale(1.5, 1, 1)}', + 'h1{transform:scale(1.5,1,1)}' ); test( - 'should shorten scale3d(1, sy, 1) to scaleY(sy)', - processCss, - 'h1{transform:scale(1, 1.5, 1)}', - 'h1{transform:scaleY(1.5)}', + 'should pass through invalid scale', + processCss, + 'h1{transform:scale(1,1.5,1)}', + 'h1{transform:scale(1,1.5,1)}' ); test( - 'should shorten scale3d(1, 1, sz) to scaleZ(sz)', - processCss, - 'h1{transform:scale3d(1, 1, 1.5)}', - 'h1{transform:scaleZ(1.5)}', + 'should shorten scale3d(1, 1, sz) to scaleZ(sz)', + processCss, + 'h1{transform:scale3d(1, 1, 1.5)}', + 'h1{transform:scaleZ(1.5)}' ); test( - 'should not shorten translate(tx, ty) to translate(tx)', - processCss, - 'h1{transform:translate(5, 5)}', - 'h1{transform:translate(5,5)}', + 'should not shorten translate(tx, ty) to translate(tx)', + processCss, + 'h1{transform:translate(5, 5)}', + 'h1{transform:translate(5,5)}' ); test( - 'should shorten translate(tx, 0) to translate(tx)', - processCss, - 'h1{transform:translate(5, 0)}', - 'h1{transform:translate(5)}', + 'should shorten translate(tx, 0) to translate(tx)', + processCss, + 'h1{transform:translate(5, 0)}', + 'h1{transform:translate(5)}' ); test( - 'should shorten translate(0, ty) to translateY(ty)', - processCss, - 'h1{transform:translate(0, 5)}', - 'h1{transform:translateY(5)}', + 'should shorten translate(0, ty) to translateY(ty)', + processCss, + 'h1{transform:translate(0, 5)}', + 'h1{transform:translateY(5)}' ); test( - 'should shorten translate3d(0, 0, tz) to translateZ(tz)', - processCss, - 'h1{transform:translate3d(0, 0, 2)}', - 'h1{transform:translateZ(2)}', + 'should shorten translate3d(0, 0, tz) to translateZ(tz)', + processCss, + 'h1{transform:translate3d(0, 0, 2)}', + 'h1{transform:translateZ(2)}' ); test( - 'should work with vendor prefixes', - processCss, - 'h1{-webkit-transform:translate3d(0, 0, 0)}', - 'h1{-webkit-transform:translateZ(0)}', + 'should work with vendor prefixes', + processCss, + 'h1{-webkit-transform:translate3d(0, 0, 0)}', + 'h1{-webkit-transform:translateZ(0)}' ); diff --git a/packages/cssnano/src/__tests__/postcss-svgo.js b/packages/cssnano/src/__tests__/postcss-svgo.js index 5230adc00..558a819de 100644 --- a/packages/cssnano/src/__tests__/postcss-svgo.js +++ b/packages/cssnano/src/__tests__/postcss-svgo.js @@ -2,29 +2,29 @@ import test from 'ava'; import processCss from './_processCss'; test( - 'should optimise inline svg', - processCss, - 'h1{background:url(\'data:image/svg+xml;utf-8,\')}', - 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}', + 'should optimise inline svg', + processCss, + 'h1{background:url(\'data:image/svg+xml;utf-8,\')}', + 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}' ); test( - 'should optimise inline svg with standard charset definition', - processCss, - 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}', - 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}', + 'should optimise inline svg with standard charset definition', + processCss, + 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}', + 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}' ); test( - 'should optimise inline svg without charset definition', - processCss, - 'h1{background:url(\'data:image/svg+xml,\')}', - 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}', + 'should optimise inline svg without charset definition', + processCss, + 'h1{background:url(\'data:image/svg+xml,\')}', + 'h1{background:url(\'data:image/svg+xml;charset=utf-8,\')}' ); test( - 'should optimise uri-encoded inline svg', - processCss, - 'h1{background:url(\'data:image/svg+xml;utf-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xml%3Aspace%3D%22preserve%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2240%22%20fill%3D%22yellow%22%20%2F%3E%3C!--test%20comment--%3E%3C%2Fsvg%3E\')}', - 'h1{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\'%3E%3Ccircle cx=\'50\' cy=\'50\' r=\'40\' fill=\'%23ff0\'/%3E%3C/svg%3E")}', + 'should optimise uri-encoded inline svg', + processCss, + "h1{background:url('data:image/svg+xml;utf-8,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xml%3Aspace%3D%22preserve%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2240%22%20fill%3D%22yellow%22%20%2F%3E%3C!--test%20comment--%3E%3C%2Fsvg%3E')}", + "h1{background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='50' cy='50' r='40' fill='%23ff0'/%3E%3C/svg%3E\")}" ); diff --git a/packages/cssnano/src/__tests__/presets.js b/packages/cssnano/src/__tests__/presets.js index ed59ece0c..983ae0d8f 100644 --- a/packages/cssnano/src/__tests__/presets.js +++ b/packages/cssnano/src/__tests__/presets.js @@ -3,107 +3,89 @@ import advancedPreset from 'cssnano-preset-advanced'; import defaultPreset from 'cssnano-preset-default'; import cssnano from '..'; -test('should accept an invoked preset', t => { - const preset = defaultPreset({normalizeCharset: {add: true}}); +test('should accept an invoked preset', (t) => { + const preset = defaultPreset({ normalizeCharset: { add: true } }); - return cssnano.process(`h1{content:"©"}`, {}, {preset}).then(result => { - t.is(result.css, `@charset "utf-8";h1{content:"©"}`); - }); + return cssnano.process(`h1{content:"©"}`, {}, { preset }).then((result) => { + t.is(result.css, `@charset "utf-8";h1{content:"©"}`); + }); }); -test('should accept a non-invoked preset', t => { - const preset = [ - defaultPreset, - {normalizeCharset: {add: true}}, - ]; +test('should accept a non-invoked preset', (t) => { + const preset = [defaultPreset, { normalizeCharset: { add: true } }]; - return cssnano.process(`h1{content:"©"}`, {}, {preset}).then(result => { - t.is(result.css, `@charset "utf-8";h1{content:"©"}`); - }); + return cssnano.process(`h1{content:"©"}`, {}, { preset }).then((result) => { + t.is(result.css, `@charset "utf-8";h1{content:"©"}`); + }); }); -test('should accept a default preset string', t => { - const preset = [ - 'default', - {normalizeCharset: {add: true}}, - ]; +test('should accept a default preset string', (t) => { + const preset = ['default', { normalizeCharset: { add: true } }]; - return cssnano.process(`h1{content:"©"}`, {}, {preset}).then(result => { - t.is(result.css, `@charset "utf-8";h1{content:"©"}`); - }); + return cssnano.process(`h1{content:"©"}`, {}, { preset }).then((result) => { + t.is(result.css, `@charset "utf-8";h1{content:"©"}`); + }); }); -test('should accept an invoked preset other than default', t => { - const preset = advancedPreset({zindex: {startIndex: 15}}); +test('should accept an invoked preset other than default', (t) => { + const preset = advancedPreset({ zindex: { startIndex: 15 } }); - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:15}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:15}`); + }); }); -test('should accept a preset string other than default', t => { - const preset = 'cssnano-preset-advanced'; +test('should accept a preset string other than default', (t) => { + const preset = 'cssnano-preset-advanced'; - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:1}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:1}`); + }); }); -test('should accept a preset string other than default, with options', t => { - const preset = [ - 'cssnano-preset-advanced', - {zindex: {startIndex: 15}}, - ]; +test('should accept a preset string other than default, with options', (t) => { + const preset = ['cssnano-preset-advanced', { zindex: { startIndex: 15 } }]; - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:15}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:15}`); + }); }); -test('should accept a preset string other than default (sugar syntax)', t => { - const preset = [ - 'advanced', - {zindex: {startIndex: 15}}, - ]; +test('should accept a preset string other than default (sugar syntax)', (t) => { + const preset = ['advanced', { zindex: { startIndex: 15 } }]; - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:15}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:15}`); + }); }); -test('should be able to exclude plugins', t => { - const preset = [ - 'advanced', - {zindex: false}, - ]; +test('should be able to exclude plugins', (t) => { + const preset = ['advanced', { zindex: false }]; - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:10}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:10}`); + }); }); -test('should be able to include plugins', t => { - const preset = [ - 'advanced', - {zindex: true}, - ]; +test('should be able to include plugins', (t) => { + const preset = ['advanced', { zindex: true }]; - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:1}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:1}`); + }); }); -test('should be able to exclude plugins (exclude syntax)', t => { - const preset = [ - 'advanced', - {zindex: {startIndex: 15, exclude: true}}, - ]; +test('should be able to exclude plugins (exclude syntax)', (t) => { + const preset = ['advanced', { zindex: { startIndex: 15, exclude: true } }]; - return cssnano.process(`h1{z-index:10}`, {}, {preset}).then(result => { - t.is(result.css, `h1{z-index:10}`); - }); + return cssnano.process(`h1{z-index:10}`, {}, { preset }).then((result) => { + t.is(result.css, `h1{z-index:10}`); + }); }); -test('should error on a bad preset', t => { - return t.throws(cssnano.process('h1{}', {}, {preset: 'avanced'}).then(() => {}), Error); +test('should error on a bad preset', (t) => { + return t.throws( + cssnano.process('h1{}', {}, { preset: 'avanced' }).then(() => {}), + Error + ); }); diff --git a/packages/cssnano/src/__tests__/webpack.js b/packages/cssnano/src/__tests__/webpack.js index 8205fbceb..d169ed694 100644 --- a/packages/cssnano/src/__tests__/webpack.js +++ b/packages/cssnano/src/__tests__/webpack.js @@ -4,15 +4,15 @@ import conf from './_webpack.config'; // test.cb -test.skip('cssnano should be consumed by webpack', t => { - webpack(conf, (err, stats) => { - if (err) { - t.fail(); - throw err; - } +test.skip('cssnano should be consumed by webpack', (t) => { + webpack(conf, (err, stats) => { + if (err) { + t.fail(); + throw err; + } - t.falsy(stats.hasErrors(), 'should not report any error'); - t.falsy(stats.hasWarnings(), 'should not report any warning'); - t.end(); - }); + t.falsy(stats.hasErrors(), 'should not report any error'); + t.falsy(stats.hasWarnings(), 'should not report any warning'); + t.end(); + }); }); diff --git a/packages/cssnano/src/index.js b/packages/cssnano/src/index.js index b5513c230..f4ac5c0d7 100644 --- a/packages/cssnano/src/index.js +++ b/packages/cssnano/src/index.js @@ -5,25 +5,23 @@ import isResolvable from 'is-resolvable'; const cssnano = 'cssnano'; -function initializePlugin (plugin, css, result) { - if (Array.isArray(plugin)) { - const [processor, opts] = plugin; - if ( - typeof opts === 'undefined' || - (typeof opts === 'object' && !opts.exclude) || - (typeof opts === 'boolean' && opts === true) - ) { - return Promise.resolve( - processor(opts)(css, result) - ); - } - } else { - return Promise.resolve( - plugin()(css, result) - ); +function initializePlugin(plugin, css, result) { + if (Array.isArray(plugin)) { + const [processor, opts] = plugin; + + if ( + typeof opts === 'undefined' || + (typeof opts === 'object' && !opts.exclude) || + (typeof opts === 'boolean' && opts === true) + ) { + return Promise.resolve(processor(opts)(css, result)); } - // Handle excluded plugins - return Promise.resolve(); + } else { + return Promise.resolve(plugin()(css, result)); + } + + // Handle excluded plugins + return Promise.resolve(); } /* @@ -34,38 +32,48 @@ function initializePlugin (plugin, css, result) { * preset = {plugins: []} <- already invoked function */ -function resolvePreset (preset) { - let fn, options; - if (Array.isArray(preset)) { - fn = preset[0]; - options = preset[1]; - } else { - fn = preset; - options = {}; - } - // For JS setups where we invoked the preset already - if (preset.plugins) { - return Promise.resolve(preset.plugins); - } - // Provide an alias for the default preset, as it is built-in. - if (fn === 'default') { - return Promise.resolve(require('cssnano-preset-default')(options).plugins); - } - // For non-JS setups; we'll need to invoke the preset ourselves. - if (typeof fn === 'function') { - return Promise.resolve(fn(options).plugins); - } - // Try loading a preset from node_modules - if (isResolvable(fn)) { - return Promise.resolve(require(fn)(options).plugins); - } - const sugar = `cssnano-preset-${fn}`; - // Try loading a preset from node_modules (sugar) - if (isResolvable(sugar)) { - return Promise.resolve(require(sugar)(options).plugins); - } - // If all else fails, we probably have a typo in the config somewhere - throw new Error(`Cannot load preset "${fn}". Please check your configuration for errors and try again.`); +function resolvePreset(preset) { + let fn, options; + + if (Array.isArray(preset)) { + fn = preset[0]; + options = preset[1]; + } else { + fn = preset; + options = {}; + } + + // For JS setups where we invoked the preset already + if (preset.plugins) { + return Promise.resolve(preset.plugins); + } + + // Provide an alias for the default preset, as it is built-in. + if (fn === 'default') { + return Promise.resolve(require('cssnano-preset-default')(options).plugins); + } + + // For non-JS setups; we'll need to invoke the preset ourselves. + if (typeof fn === 'function') { + return Promise.resolve(fn(options).plugins); + } + + // Try loading a preset from node_modules + if (isResolvable(fn)) { + return Promise.resolve(require(fn)(options).plugins); + } + + const sugar = `cssnano-preset-${fn}`; + + // Try loading a preset from node_modules (sugar) + if (isResolvable(sugar)) { + return Promise.resolve(require(sugar)(options).plugins); + } + + // If all else fails, we probably have a typo in the config somewhere + throw new Error( + `Cannot load preset "${fn}". Please check your configuration for errors and try again.` + ); } /* @@ -74,39 +82,40 @@ function resolvePreset (preset) { * load an external file. */ -function resolveConfig (css, result, options) { - if (options.preset) { - return resolvePreset(options.preset); - } +function resolveConfig(css, result, options) { + if (options.preset) { + return resolvePreset(options.preset); + } - const inputFile = css.source && css.source.input && css.source.input.file; - let searchPath = inputFile ? path.dirname(inputFile) : process.cwd(); - let configPath = null; + const inputFile = css.source && css.source.input && css.source.input.file; + let searchPath = inputFile ? path.dirname(inputFile) : process.cwd(); + let configPath = null; - if (options.configFile) { - searchPath = null; - configPath = path.resolve(process.cwd(), options.configFile); - } + if (options.configFile) { + searchPath = null; + configPath = path.resolve(process.cwd(), options.configFile); + } - const configExplorer = cosmiconfig(cssnano); - const searchForConfig = configPath - ? configExplorer.load(configPath) - : configExplorer.search(searchPath); + const configExplorer = cosmiconfig(cssnano); + const searchForConfig = configPath + ? configExplorer.load(configPath) + : configExplorer.search(searchPath); - return searchForConfig.then(config => { - if (config === null) { - return resolvePreset('default'); - } - return resolvePreset(config.config.preset || config.config); - }); + return searchForConfig.then((config) => { + if (config === null) { + return resolvePreset('default'); + } + + return resolvePreset(config.config.preset || config.config); + }); } export default postcss.plugin(cssnano, (options = {}) => { - return (css, result) => { - return resolveConfig(css, result, options).then((plugins) => { - return plugins.reduce((promise, plugin) => { - return promise.then(initializePlugin.bind(null, plugin, css, result)); - }, Promise.resolve()); - }); - }; + return (css, result) => { + return resolveConfig(css, result, options).then((plugins) => { + return plugins.reduce((promise, plugin) => { + return promise.then(initializePlugin.bind(null, plugin, css, result)); + }, Promise.resolve()); + }); + }; }); diff --git a/packages/example-cli-usage/postcss.config.js b/packages/example-cli-usage/postcss.config.js index a37877e08..897febe2e 100644 --- a/packages/example-cli-usage/postcss.config.js +++ b/packages/example-cli-usage/postcss.config.js @@ -1,5 +1,3 @@ module.exports = { - plugins: [ - require('cssnano')({preset: 'default'}), - ], + plugins: [require('cssnano')({ preset: 'default' })], }; diff --git a/packages/postcss-colormin/src/__tests__/colours.js b/packages/postcss-colormin/src/__tests__/colours.js index 2a6454e4f..84ab1fbd3 100644 --- a/packages/postcss-colormin/src/__tests__/colours.js +++ b/packages/postcss-colormin/src/__tests__/colours.js @@ -1,242 +1,182 @@ import test from 'ava'; import min from '../colours'; -function isEqual (t, input, output) { - t.deepEqual(min(input), output); +function isEqual(t, input, output) { + t.deepEqual(min(input), output); } -test( - 'should lowercase keywords', - isEqual, - 'RED', - 'red' -); +test('should lowercase keywords', isEqual, 'RED', 'red'); -test( - 'should convert shorthand hex to keyword', - isEqual, - '#f00', - 'red' -); +test('should convert shorthand hex to keyword', isEqual, '#f00', 'red'); -test( - 'should convert longhand hex to keyword', - isEqual, - '#ff0000', - 'red' -); +test('should convert longhand hex to keyword', isEqual, '#ff0000', 'red'); -test( - 'should convert rgb to keyword', - isEqual, - 'rgb(255,0,0)', - 'red' -); +test('should convert rgb to keyword', isEqual, 'rgb(255,0,0)', 'red'); test( - 'should convert fully opaque rgb to keyword', - isEqual, - 'rgba(255, 0, 0, 1)', - 'red' + 'should convert fully opaque rgb to keyword', + isEqual, + 'rgba(255, 0, 0, 1)', + 'red' ); -test( - 'should convert hsl to keyword', - isEqual, - 'hsl(0, 100%, 50%)', - 'red' -); +test('should convert hsl to keyword', isEqual, 'hsl(0, 100%, 50%)', 'red'); test( - 'should convert fully oqaque hsl to keyword', - isEqual, - 'hsla(0, 100%, 50%, 1)', - 'red' + 'should convert fully oqaque hsl to keyword', + isEqual, + 'hsla(0, 100%, 50%, 1)', + 'red' ); test( - 'should convert translucent hsla to rgba', - isEqual, - 'hsla(0, 100%, 50%, .5)', - 'rgba(255, 0, 0, 0.5)' + 'should convert translucent hsla to rgba', + isEqual, + 'hsla(0, 100%, 50%, .5)', + 'rgba(255, 0, 0, 0.5)' ); test( - 'should convert longhand hex to shorthand, case insensitive', - isEqual, - '#FFFFFF', - '#fff' + 'should convert longhand hex to shorthand, case insensitive', + isEqual, + '#FFFFFF', + '#fff' ); test( - 'should convert keyword to hex, case insensitive', - isEqual, - 'WHiTE', - '#fff' + 'should convert keyword to hex, case insensitive', + isEqual, + 'WHiTE', + '#fff' ); -test( - 'should convert keyword to hex', - isEqual, - 'yellow', - '#ff0' -); +test('should convert keyword to hex', isEqual, 'yellow', '#ff0'); -test( - 'should convert rgb to hex', - isEqual, - 'rgb(12, 134, 29)', - '#0c861d' -); +test('should convert rgb to hex', isEqual, 'rgb(12, 134, 29)', '#0c861d'); -test( - 'should convert hsl to hex', - isEqual, - 'hsl(230, 50%, 40%)', - '#349' -); +test('should convert hsl to hex', isEqual, 'hsl(230, 50%, 40%)', '#349'); test( - 'should convert another longhand hex to keyword', - isEqual, - '#000080', - 'navy' + 'should convert another longhand hex to keyword', + isEqual, + '#000080', + 'navy' ); test( - 'should convert rgba to hsla when shorter', - isEqual, - 'rgba(221, 221, 221, 0.5)', - 'hsla(0, 0%, 86.7%, 0.5)' + 'should convert rgba to hsla when shorter', + isEqual, + 'rgba(221, 221, 221, 0.5)', + 'hsla(0, 0%, 86.7%, 0.5)' ); test( - 'should convert this specific rgba value to "transparent"', - isEqual, - 'rgba(0,0,0,0)', - 'transparent' + 'should convert this specific rgba value to "transparent"', + isEqual, + 'rgba(0,0,0,0)', + 'transparent' ); test( - 'should convert this specific hsla value to "transparent"', - isEqual, - 'hsla(0,0%,0%,0)', - 'transparent' + 'should convert this specific hsla value to "transparent"', + isEqual, + 'hsla(0,0%,0%,0)', + 'transparent' ); test( - 'should convert hsla values with 0 saturation & 0 lightness to "transparent"', - isEqual, - 'hsla(200,0%,0%,0)', - 'transparent' + 'should convert hsla values with 0 saturation & 0 lightness to "transparent"', + isEqual, + 'hsla(200,0%,0%,0)', + 'transparent' ); test( - 'should leave transparent as it is', - isEqual, - 'transparent', - 'transparent' + 'should leave transparent as it is', + isEqual, + 'transparent', + 'transparent' ); test( - 'should prefer to output hex rather than keywords when they are the same length', - isEqual, - '#696969', - '#696969' + 'should prefer to output hex rather than keywords when they are the same length', + isEqual, + '#696969', + '#696969' ); -test( - 'should cap values at their maximum', - isEqual, - 'rgb(400,400,400)', - '#fff' -); +test('should cap values at their maximum', isEqual, 'rgb(400,400,400)', '#fff'); test( - 'should continue hsl value rotation', - isEqual, - 'hsl(400, 400%, 50%)', - '#fa0' + 'should continue hsl value rotation', + isEqual, + 'hsl(400, 400%, 50%)', + '#fa0' ); test( - 'should convert signed numbers', - isEqual, - 'rgba(-100,0,-100,.5)', - 'rgba(0, 0, 0, 0.5)' + 'should convert signed numbers', + isEqual, + 'rgba(-100,0,-100,.5)', + 'rgba(0, 0, 0, 0.5)' ); test( - 'should convert signed numbers (2)', - isEqual, - 'hsla(-400,50%,10%,.5)', - 'rgba(38, 13, 30, 0.5)' + 'should convert signed numbers (2)', + isEqual, + 'hsla(-400,50%,10%,.5)', + 'rgba(38, 13, 30, 0.5)' ); test( - 'should convert percentage based rgb values', - isEqual, - 'rgb(100%,100%,100%)', - '#fff' + 'should convert percentage based rgb values', + isEqual, + 'rgb(100%,100%,100%)', + '#fff' ); test( - 'should convert percentage based rgba values (2)', - isEqual, - 'rgba(50%,50%,50%,0.5)', - 'hsla(0, 0%, 49.8%, 0.5)' + 'should convert percentage based rgba values (2)', + isEqual, + 'rgba(50%,50%,50%,0.5)', + 'hsla(0, 0%, 49.8%, 0.5)' ); test( - 'should convert percentage based rgba values (3)', - isEqual, - 'rgb(100%,100%,100%)', - '#fff' + 'should convert percentage based rgba values (3)', + isEqual, + 'rgb(100%,100%,100%)', + '#fff' ); test( - 'should convert percentage based rgba values (4)', - isEqual, - 'rgba(100%,100%,100%,0.5)', - 'hsla(0, 0%, 100%, 0.5)' + 'should convert percentage based rgba values (4)', + isEqual, + 'rgba(100%,100%,100%,0.5)', + 'hsla(0, 0%, 100%, 0.5)' ); test( - 'should convert percentage based rgba values (5)', - isEqual, - 'rgba(100%,64.7%,0%,.5)', - 'rgba(255, 165, 0, 0.5)' + 'should convert percentage based rgba values (5)', + isEqual, + 'rgba(100%,64.7%,0%,.5)', + 'rgba(255, 165, 0, 0.5)' ); test( - 'should pass through on invalid rgb functions', - isEqual, - 'rgb(50%,23,54)', - 'rgb(50%,23,54)' + 'should pass through on invalid rgb functions', + isEqual, + 'rgb(50%,23,54)', + 'rgb(50%,23,54)' ); -test( - 'should convert darkgray to a hex', - isEqual, - 'darkgray', - '#a9a9a9' -); +test('should convert darkgray to a hex', isEqual, 'darkgray', '#a9a9a9'); -test( - 'should convert 8 character hex codes', - isEqual, - '#000000FF', - '#000' -); +test('should convert 8 character hex codes', isEqual, '#000000FF', '#000'); -test( - 'should convert 4 character hex codes', - isEqual, - '#000F', - '#000' -); +test('should convert 4 character hex codes', isEqual, '#000F', '#000'); -test('should pass through if not recognised', t => { - t.deepEqual(min('Unrecognised'), 'Unrecognised'); - t.deepEqual(min('inherit'), 'inherit'); +test('should pass through if not recognised', (t) => { + t.deepEqual(min('Unrecognised'), 'Unrecognised'); + t.deepEqual(min('inherit'), 'inherit'); }); diff --git a/packages/postcss-colormin/src/__tests__/index.js b/packages/postcss-colormin/src/__tests__/index.js index 753a57429..bb5192200 100644 --- a/packages/postcss-colormin/src/__tests__/index.js +++ b/packages/postcss-colormin/src/__tests__/index.js @@ -1,266 +1,296 @@ import test from 'ava'; import plugin from '..'; import { - usePostCSSPlugin, - processCSSFactory, - processCSSWithPresetFactory, + usePostCSSPlugin, + processCSSFactory, + processCSSWithPresetFactory, } from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); const { - processCSS: withDefaultPreset, - passthroughCSS: passthroughDefault, + processCSS: withDefaultPreset, + passthroughCSS: passthroughDefault, } = processCSSWithPresetFactory('default'); test( - 'should minify lowercase color values', - withDefaultPreset, - 'h1{color:yellow}', - 'h1{color:#ff0}' + 'should minify lowercase color values', + withDefaultPreset, + 'h1{color:yellow}', + 'h1{color:#ff0}' ); test( - 'should minify uppercase color values', - withDefaultPreset, - 'h1{COLOR:YELLOW}', - 'h1{COLOR:#ff0}' + 'should minify uppercase color values', + withDefaultPreset, + 'h1{COLOR:YELLOW}', + 'h1{COLOR:#ff0}' ); test( - 'should minify color values (2)', - withDefaultPreset, - 'h1{box-shadow:0 1px 3px rgba(255, 230, 220, 0.5)}', - 'h1{box-shadow:0 1px 3px rgba(255,230,220,.5)}', + 'should minify color values (2)', + withDefaultPreset, + 'h1{box-shadow:0 1px 3px rgba(255, 230, 220, 0.5)}', + 'h1{box-shadow:0 1px 3px rgba(255,230,220,.5)}' ); test( - 'should minify color values (3)', - withDefaultPreset, - 'h1{background:hsla(134, 50%, 50%, 1)}', - 'h1{background:#40bf5e}' + 'should minify color values (3)', + withDefaultPreset, + 'h1{background:hsla(134, 50%, 50%, 1)}', + 'h1{background:#40bf5e}' ); test( - 'should minify color values (4)', - withDefaultPreset, - 'h1{text-shadow:1px 1px 2px #000000}', - 'h1{text-shadow:1px 1px 2px #000}' + 'should minify color values (4)', + withDefaultPreset, + 'h1{text-shadow:1px 1px 2px #000000}', + 'h1{text-shadow:1px 1px 2px #000}' ); test( - 'should minify color values (5)', - withDefaultPreset, - 'h1{text-shadow:1px 1px 2px rgb(255, 255, 255)}', - 'h1{text-shadow:1px 1px 2px #fff}' + 'should minify color values (5)', + withDefaultPreset, + 'h1{text-shadow:1px 1px 2px rgb(255, 255, 255)}', + 'h1{text-shadow:1px 1px 2px #fff}' ); test( - 'should minify color values (6)', - withDefaultPreset, - 'h1{text-shadow:1px 1px 2px hsl(0,0%,100%)}', - 'h1{text-shadow:1px 1px 2px #fff}' + 'should minify color values (6)', + withDefaultPreset, + 'h1{text-shadow:1px 1px 2px hsl(0,0%,100%)}', + 'h1{text-shadow:1px 1px 2px #fff}' ); test( - 'should minify color values (7)', - withDefaultPreset, - 'h1{background:HSLA(134, 50%, 50%, 1)}', - 'h1{background:#40bf5e}' + 'should minify color values (7)', + withDefaultPreset, + 'h1{background:HSLA(134, 50%, 50%, 1)}', + 'h1{background:#40bf5e}' ); test( - 'should minify color values (8)', - withDefaultPreset, - 'h1{background:#FFFFFF}', - 'h1{background:#fff}' + 'should minify color values (8)', + withDefaultPreset, + 'h1{background:#FFFFFF}', + 'h1{background:#fff}' ); test( - 'should minify color values (9)', - withDefaultPreset, - 'h1{background:#F0FFFF}', - 'h1{background:azure}' + 'should minify color values (9)', + withDefaultPreset, + 'h1{background:#F0FFFF}', + 'h1{background:azure}' ); test( - 'should minify color values in background gradients', - processCSS, - 'h1{background:linear-gradient( #ff0000,yellow )}', - 'h1{background:linear-gradient( red,#ff0 )}' + 'should minify color values in background gradients', + processCSS, + 'h1{background:linear-gradient( #ff0000,yellow )}', + 'h1{background:linear-gradient( red,#ff0 )}' ); test( - 'should minify color values in background gradients (preset)', - withDefaultPreset, - 'h1{background:linear-gradient( #ff0000,yellow )}', - 'h1{background:linear-gradient(red,#ff0)}' + 'should minify color values in background gradients (preset)', + withDefaultPreset, + 'h1{background:linear-gradient( #ff0000,yellow )}', + 'h1{background:linear-gradient(red,#ff0)}' ); test( - 'should minify color values in background gradients (2)', - processCSS, - 'h1{background:linear-gradient(yellow, orange), linear-gradient(black, rgba(255, 255, 255, 0))}', - 'h1{background:linear-gradient(#ff0, orange), linear-gradient(#000, hsla(0, 0%, 100%, 0))}' + 'should minify color values in background gradients (2)', + processCSS, + 'h1{background:linear-gradient(yellow, orange), linear-gradient(black, rgba(255, 255, 255, 0))}', + 'h1{background:linear-gradient(#ff0, orange), linear-gradient(#000, hsla(0, 0%, 100%, 0))}' ); test( - 'should minify color values in background gradients (2) (preset)', - withDefaultPreset, - 'h1{background:linear-gradient(yellow, orange), linear-gradient(black, rgba(255, 255, 255, 0))}', - 'h1{background:linear-gradient(#ff0,orange),linear-gradient(#000,hsla(0,0%,100%,0))}' + 'should minify color values in background gradients (2) (preset)', + withDefaultPreset, + 'h1{background:linear-gradient(yellow, orange), linear-gradient(black, rgba(255, 255, 255, 0))}', + 'h1{background:linear-gradient(#ff0,orange),linear-gradient(#000,hsla(0,0%,100%,0))}' ); test( - 'should minify color values in background gradients (3)', - processCSS, - 'h1{background:linear-gradient(0deg, yellow, black 40%, red)}', - 'h1{background:linear-gradient(0deg, #ff0, #000 40%, red)}' + 'should minify color values in background gradients (3)', + processCSS, + 'h1{background:linear-gradient(0deg, yellow, black 40%, red)}', + 'h1{background:linear-gradient(0deg, #ff0, #000 40%, red)}' ); test( - 'should minify color values in background gradients (3) (preset)', - withDefaultPreset, - 'h1{background:linear-gradient(0deg, yellow, black 40%, red)}', - 'h1{background:linear-gradient(0deg,#ff0,#000 40%,red)}' + 'should minify color values in background gradients (3) (preset)', + withDefaultPreset, + 'h1{background:linear-gradient(0deg, yellow, black 40%, red)}', + 'h1{background:linear-gradient(0deg,#ff0,#000 40%,red)}' ); test( - 'should not minify in font properties', - passthroughCSS, - 'h1{font-family:black}' + 'should not minify in font properties', + passthroughCSS, + 'h1{font-family:black}' ); test( - 'should make an exception for webkit tap highlight color (issue 1)', - passthroughCSS, - 'h1{-webkit-tap-highlight-color:rgba(0,0,0,0)}' + 'should make an exception for webkit tap highlight color (issue 1)', + passthroughCSS, + 'h1{-webkit-tap-highlight-color:rgba(0,0,0,0)}' ); test( - 'should not crash on transparent in webkit tap highlight color', - passthroughCSS, - 'h1{-webkit-tap-highlight-color:transparent}' + 'should not crash on transparent in webkit tap highlight color', + passthroughCSS, + 'h1{-webkit-tap-highlight-color:transparent}' ); test( - 'should not crash on inherit in webkit tap highlight color', - passthroughCSS, - 'h1{-webkit-tap-highlight-color:inherit}' + 'should not crash on inherit in webkit tap highlight color', + passthroughCSS, + 'h1{-webkit-tap-highlight-color:inherit}' ); test( - 'should not minify in lowercase filter properties', - passthroughDefault, - 'h1{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr= #000000,endColorstr= #ffffff)}' + 'should not minify in lowercase filter properties', + passthroughDefault, + 'h1{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr= #000000,endColorstr= #ffffff)}' ); test( - 'should not minify in uppercase filter properties', - passthroughDefault, - 'h1{FILTER:progid:DXImageTransform.Microsoft.gradient(startColorstr= #000000,endColorstr= #ffffff)}' + 'should not minify in uppercase filter properties', + passthroughDefault, + 'h1{FILTER:progid:DXImageTransform.Microsoft.gradient(startColorstr= #000000,endColorstr= #ffffff)}' ); test( - 'should minify color stops', - processCSS, - 'h1{background-image:-webkit-gradient(linear,50% 0%,50% 100%,color-stop(1px, #fbfbfb),color-stop(1px, #ffffff),color-stop(2px, #ffffff),color-stop(2px, #fbfbfb),color-stop(100%, #ececec))}', - 'h1{background-image:-webkit-gradient(linear,50% 0%,50% 100%,color-stop(1px, #fbfbfb),color-stop(1px, #fff),color-stop(2px, #fff),color-stop(2px, #fbfbfb),color-stop(100%, #ececec))}' + 'should minify color stops', + processCSS, + 'h1{background-image:-webkit-gradient(linear,50% 0%,50% 100%,color-stop(1px, #fbfbfb),color-stop(1px, #ffffff),color-stop(2px, #ffffff),color-stop(2px, #fbfbfb),color-stop(100%, #ececec))}', + 'h1{background-image:-webkit-gradient(linear,50% 0%,50% 100%,color-stop(1px, #fbfbfb),color-stop(1px, #fff),color-stop(2px, #fff),color-stop(2px, #fbfbfb),color-stop(100%, #ececec))}' ); test( - 'should not minify in lowercase calc values', - passthroughCSS, - 'h1{width:calc(100vw / 2 - 6px + 0)}' + 'should not minify in lowercase calc values', + passthroughCSS, + 'h1{width:calc(100vw / 2 - 6px + 0)}' ); test( - 'should not minify in uppercase calc values', - passthroughCSS, - 'h1{width:CALC(100vw / 2 - 6px + 0)}' + 'should not minify in uppercase calc values', + passthroughCSS, + 'h1{width:CALC(100vw / 2 - 6px + 0)}' ); test( - 'should minify hex colors without keywords', - processCSS, - 'h1{background:linear-gradient(#ffffff,#999999) no-repeat;}', - 'h1{background:linear-gradient(#fff,#999) no-repeat;}' + 'should minify hex colors without keywords', + processCSS, + 'h1{background:linear-gradient(#ffffff,#999999) no-repeat;}', + 'h1{background:linear-gradient(#fff,#999) no-repeat;}' ); test( - 'should not mangle percentage based rgba values', - processCSS, - 'h1{color:rgba(50%,50%,50%,0.5)}', - 'h1{color:hsla(0, 0%, 49.8%, 0.5)}' + 'should not mangle percentage based rgba values', + processCSS, + 'h1{color:rgba(50%,50%,50%,0.5)}', + 'h1{color:hsla(0, 0%, 49.8%, 0.5)}' ); test( - 'should convert percentage based rgba values', - processCSS, - 'h1{color:rgb(100%,100%,100%)}', - 'h1{color:#fff}' + 'should convert percentage based rgba values', + processCSS, + 'h1{color:rgb(100%,100%,100%)}', + 'h1{color:#fff}' ); test( - 'should handle errored cases', - passthroughCSS, - 'h1{color:rgb(50%, 23, 54)}' + 'should handle errored cases', + passthroughCSS, + 'h1{color:rgb(50%, 23, 54)}' ); test( - 'should add extra spaces when converting rgb', - processCSS, - 'h1{background:linear-gradient(rgb(50, 50, 50)0%,blue 100%)}', - 'h1{background:linear-gradient(#323232 0%,#00f 100%)}' + 'should add extra spaces when converting rgb', + processCSS, + 'h1{background:linear-gradient(rgb(50, 50, 50)0%,blue 100%)}', + 'h1{background:linear-gradient(#323232 0%,#00f 100%)}' ); test( - 'should add extra spaces when converting rgb (2)', - processCSS, - 'h1{background:linear-gradient(rgba(0,0,0,0)0%, blue 100%)}', - 'h1{background:linear-gradient(transparent 0%, #00f 100%)}' + 'should add extra spaces when converting rgb (2)', + processCSS, + 'h1{background:linear-gradient(rgba(0,0,0,0)0%, blue 100%)}', + 'h1{background:linear-gradient(transparent 0%, #00f 100%)}' ); test( - 'should add extra spaces when converting rgb (3)', - processCSS, - 'h1{background:rgb(1,2,3)url(bar.png)}', - 'h1{background:#010203 url(bar.png)}' + 'should add extra spaces when converting rgb (3)', + processCSS, + 'h1{background:rgb(1,2,3)url(bar.png)}', + 'h1{background:#010203 url(bar.png)}' ); test( - 'should save extra spaces when converting hex', - withDefaultPreset, - 'h1{background:#F0FFFF url(bar.png)}', - 'h1{background:azure url(bar.png)}' + 'should save extra spaces when converting hex', + withDefaultPreset, + 'h1{background:#F0FFFF url(bar.png)}', + 'h1{background:azure url(bar.png)}' ); test( - 'should bail on the "composes" property', - passthroughDefault, - 'h1{composes:black from "styles"}' + 'should bail on the "composes" property', + passthroughDefault, + 'h1{composes:black from "styles"}' +); + +test('should not mangle empty strings', passthroughDefault, 'h1{content:""}'); + +test( + 'should passthrough css variables', + passthroughDefault, + 'h1{color:var(--foo)}' ); test( - 'should not mangle empty strings', - passthroughDefault, - 'h1{content:""}' + 'should passthrough css variables #2', + passthroughDefault, + 'h1{color:var(--foo) var(--bar)}' ); test( - 'should not convert this specific rgba value to "transparent" (old IE)', - passthroughCSS, - 'h1{color:rgba(0, 0, 0, 0)}', - {env: 'ie8'} + 'should passthrough css variables #3', + passthroughDefault, + 'h1{color:rgb(var(--foo),255,255)}' ); test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + 'should passthrough css variables #4', + passthroughDefault, + 'h1{color:rgb(255,var(--bar),255)}' ); test( - 'should not mangle colours in the content property', - passthroughCSS, - 'h2:before{content:"black"}' + 'should passthrough css variables #5', + passthroughDefault, + 'h1{color:rgb(255,255,var(--baz))}' +); + +test( + 'should passthrough css variables #6', + passthroughDefault, + 'h1{color:rgb(var(--foo))}' +); + +test('should passthrough broken syntax', passthroughCSS, 'h1{color:}'); + +test( + 'should not convert this specific rgba value to "transparent" (old IE)', + passthroughCSS, + 'h1{color:rgba(0, 0, 0, 0)}', + { env: 'ie8' } +); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); + +test( + 'should not mangle colours in the content property', + passthroughCSS, + 'h2:before{content:"black"}' ); diff --git a/packages/postcss-colormin/src/colours.js b/packages/postcss-colormin/src/colours.js index c6b278e9b..123913bd3 100644 --- a/packages/postcss-colormin/src/colours.js +++ b/packages/postcss-colormin/src/colours.js @@ -5,62 +5,62 @@ import toShorthand from './lib/toShorthand'; const shorter = (a, b) => (a && a.length < b.length ? a : b).toLowerCase(); export default (colour, isLegacy = false, cache = false) => { - const key = colour + "|" + isLegacy; + const key = colour + '|' + isLegacy; - if (cache && cache[key]) { - return cache[key]; - } - - try { - const parsed = color(colour.toLowerCase()); - const alpha = parsed.alpha(); + if (cache && cache[key]) { + return cache[key]; + } - if (alpha === 1) { - const toHex = toShorthand(parsed.hex().toLowerCase()); - const result = shorter(keywords[toHex], toHex); + try { + const parsed = color(colour.toLowerCase()); + const alpha = parsed.alpha(); - if (cache) { - cache[key] = result; - } + if (alpha === 1) { + const toHex = toShorthand(parsed.hex().toLowerCase()); + const result = shorter(keywords[toHex], toHex); - return result; - } else { - const rgb = parsed.rgb(); + if (cache) { + cache[key] = result; + } - if ( - !isLegacy && - !rgb.color[0] && - !rgb.color[1] && - !rgb.color[2] && - !alpha - ) { - const result = 'transparent'; + return result; + } else { + const rgb = parsed.rgb(); - if (cache) { - cache[key] = result; - } + if ( + !isLegacy && + !rgb.color[0] && + !rgb.color[1] && + !rgb.color[2] && + !alpha + ) { + const result = 'transparent'; - return result; - } + if (cache) { + cache[key] = result; + } - let hsla = parsed.hsl().string(); - let rgba = rgb.string(); - let result = hsla.length < rgba.length ? hsla : rgba; + return result; + } - if (cache) { - cache[key] = result; - } + let hsla = parsed.hsl().string(); + let rgba = rgb.string(); + let result = hsla.length < rgba.length ? hsla : rgba; - return result; - } - } catch (e) { - // Possibly malformed, so pass through - const result = colour; + if (cache) { + cache[key] = result; + } - if (cache) { - cache[key] = result; - } + return result; + } + } catch (e) { + // Possibly malformed, so pass through + const result = colour; - return result; + if (cache) { + cache[key] = result; } + + return result; + } }; diff --git a/packages/postcss-colormin/src/generate.js b/packages/postcss-colormin/src/generate.js index 26dfe3bb3..a79dfc1b0 100644 --- a/packages/postcss-colormin/src/generate.js +++ b/packages/postcss-colormin/src/generate.js @@ -6,33 +6,31 @@ import toShorthand from './lib/toShorthand'; const keywords = {}; const hexes = {}; -Object.keys(colorNames).forEach(keyword => { - const hex = toShorthand(colorNames[keyword]); - if (keyword.length < hex.length) { - keywords[hex] = keyword; - return; - } - hexes[keyword] = hex; +Object.keys(colorNames).forEach((keyword) => { + const hex = toShorthand(colorNames[keyword]); + + if (keyword.length < hex.length) { + keywords[hex] = keyword; + return; + } + + hexes[keyword] = hex; }); -function stringify (map) { - return JSON.stringify(map, null, 2) + '\n'; +function stringify(map) { + return JSON.stringify(map, null, 2) + '\n'; } -function callback (err) { - if (err) { - throw err; - } +function callback(err) { + if (err) { + throw err; + } } -writeFile( - path.join(__dirname, 'keywords.json'), - stringify(keywords), - callback -); +writeFile(path.join(__dirname, 'keywords.json'), stringify(keywords), callback); writeFile( - path.join(__dirname, '../dist/keywords.json'), - stringify(keywords), - callback + path.join(__dirname, '../dist/keywords.json'), + stringify(keywords), + callback ); diff --git a/packages/postcss-colormin/src/index.js b/packages/postcss-colormin/src/index.js index fc866d669..6ce110686 100644 --- a/packages/postcss-colormin/src/index.js +++ b/packages/postcss-colormin/src/index.js @@ -1,16 +1,16 @@ -import browserslist from "browserslist"; -import postcss from "postcss"; -import valueParser, {stringify} from "postcss-value-parser"; -import colormin from "./colours"; +import browserslist from 'browserslist'; +import postcss from 'postcss'; +import valueParser, { stringify } from 'postcss-value-parser'; +import colormin from './colours'; -function walk (parent, callback) { - parent.nodes.forEach((node, index) => { - const bubble = callback(node, index, parent); +function walk(parent, callback) { + parent.nodes.forEach((node, index) => { + const bubble = callback(node, index, parent); - if (node.nodes && bubble !== false) { - walk(node, callback); - } - }); + if (node.nodes && bubble !== false) { + walk(node, callback); + } + }); } /* @@ -20,75 +20,73 @@ function walk (parent, callback) { * https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer */ -function hasTransparentBug (browser) { - return ~["ie 8", "ie 9"].indexOf(browser); +function hasTransparentBug(browser) { + return ~['ie 8', 'ie 9'].indexOf(browser); } -export default postcss.plugin("postcss-colormin", () => { - return (css, result) => { - const resultOpts = result.opts || {}; - const browsers = browserslist(null, { - stats: resultOpts.stats, - path: __dirname, - env: resultOpts.env, - }); - const isLegacy = browsers.some(hasTransparentBug); - const colorminCache = {}; - const cache = {}; - - css.walkDecls(decl => { +export default postcss.plugin('postcss-colormin', () => { + return (css, result) => { + const resultOpts = result.opts || {}; + const browsers = browserslist(null, { + stats: resultOpts.stats, + path: __dirname, + env: resultOpts.env, + }); + const isLegacy = browsers.some(hasTransparentBug); + const colorminCache = {}; + const cache = {}; + + css.walkDecls((decl) => { + if ( + /^(composes|font|filter|-webkit-tap-highlight-color)/i.test(decl.prop) + ) { + return; + } + + if (!decl.value) { + return; + } + + if (cache[decl.value]) { + decl.value = cache[decl.value]; + + return; + } + + const parsed = valueParser(decl.value); + + walk(parsed, (node, index, parent) => { + if (node.type === 'function') { + if (/^(rgb|hsl)a?$/i.test(node.value)) { + const { value } = node; + + node.value = colormin(stringify(node), isLegacy, colorminCache); + node.type = 'word'; + + const next = parent.nodes[index + 1]; + if ( - /^(composes|font|filter|-webkit-tap-highlight-color)/i.test( - decl.prop - ) + node.value !== value && + next && + (next.type === 'word' || next.type === 'function') ) { - return; + parent.nodes.splice(index + 1, 0, { + type: 'space', + value: ' ', + }); } + } else if (node.value.toLowerCase() === 'calc') { + return false; + } + } else if (node.type === 'word') { + node.value = colormin(node.value, isLegacy, colorminCache); + } + }); - if (cache[decl.value]) { - decl.value = cache[decl.value]; - - return; - } + const optimizedValue = parsed.toString(); - const parsed = valueParser(decl.value); - - walk(parsed, (node, index, parent) => { - if (node.type === "function") { - if (/^(rgb|hsl)a?$/i.test(node.value)) { - const {value} = node; - - node.value = colormin( - stringify(node), - isLegacy, - colorminCache - ); - node.type = "word"; - - const next = parent.nodes[index + 1]; - - if ( - node.value !== value && - next && - (next.type === "word" || next.type === "function") - ) { - parent.nodes.splice(index + 1, 0, { - type: "space", - value: " ", - }); - } - } else if (node.value.toLowerCase() === "calc") { - return false; - } - } else if (node.type === "word") { - node.value = colormin(node.value, isLegacy, colorminCache); - } - }); - - const optimizedValue = parsed.toString(); - - decl.value = optimizedValue; - cache[decl.value] = optimizedValue; - }); - }; + decl.value = optimizedValue; + cache[decl.value] = optimizedValue; + }); + }; }); diff --git a/packages/postcss-colormin/src/lib/toShorthand.js b/packages/postcss-colormin/src/lib/toShorthand.js index 294a1c881..60f152814 100644 --- a/packages/postcss-colormin/src/lib/toShorthand.js +++ b/packages/postcss-colormin/src/lib/toShorthand.js @@ -1,11 +1,7 @@ -export default hex => { - if ( - hex[1] === hex[2] && - hex[3] === hex[4] && - hex[5] === hex[6] - ) { - return '#' + hex[2] + hex[4] + hex[6]; - } +export default (hex) => { + if (hex[1] === hex[2] && hex[3] === hex[4] && hex[5] === hex[6]) { + return '#' + hex[2] + hex[4] + hex[6]; + } - return hex; + return hex; }; diff --git a/packages/postcss-convert-values/src/__tests__/index.js b/packages/postcss-convert-values/src/__tests__/index.js index 662c3adf1..b4716e3c0 100644 --- a/packages/postcss-convert-values/src/__tests__/index.js +++ b/packages/postcss-convert-values/src/__tests__/index.js @@ -1,442 +1,415 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should convert milliseconds to seconds', - processCSS, - 'h1{transition-duration:500ms}', - 'h1{transition-duration:.5s}' + 'should convert milliseconds to seconds', + processCSS, + 'h1{transition-duration:500ms}', + 'h1{transition-duration:.5s}' ); test( - 'should convert seconds to milliseconds', - processCSS, - 'h1{transition-duration:.005s}', - 'h1{transition-duration:5ms}' + 'should convert seconds to milliseconds', + processCSS, + 'h1{transition-duration:.005s}', + 'h1{transition-duration:5ms}' ); test( - 'should not convert negative milliseconds to seconds', - passthroughCSS, - 'h1{animation-duration:-569ms}' + 'should not convert negative milliseconds to seconds', + passthroughCSS, + 'h1{animation-duration:-569ms}' ); test( - 'should not remove the unit from zero values (duration)', - passthroughCSS, - 'h1{transition-duration:0s}' + 'should not remove the unit from zero values (duration)', + passthroughCSS, + 'h1{transition-duration:0s}' ); test( - 'should not remove the unit from zero values (custom properties)', - passthroughCSS, - 'h1{--my-variable:0px}' + 'should not remove the unit from zero values (custom properties)', + passthroughCSS, + 'h1{--my-variable:0px}' ); test( - 'should remove unnecessary plus signs', - processCSS, - 'h1{width:+14px}', - 'h1{width:14px}' + 'should remove unnecessary plus signs', + processCSS, + 'h1{width:+14px}', + 'h1{width:14px}' ); -test( - 'should convert px to pc', - processCSS, - 'h1{width:16px}', - 'h1{width:1pc}' -); +test('should convert px to pc', processCSS, 'h1{width:16px}', 'h1{width:1pc}'); test( - 'should convert px to pt', - processCSS, - 'h1{width:120px}', - 'h1{width:90pt}' + 'should convert px to pt', + processCSS, + 'h1{width:120px}', + 'h1{width:90pt}' ); -test( - 'should convert px to in', - processCSS, - 'h1{width:192px}', - 'h1{width:2in}' -); +test('should convert px to in', processCSS, 'h1{width:192px}', 'h1{width:2in}'); -test( - 'should not convert in to px', - passthroughCSS, - 'h1{width:192in}' -); +test('should not convert in to px', passthroughCSS, 'h1{width:192in}'); test( - 'should strip the units from length properties', - processCSS, - 'h1{margin: 0em 0% 0px 0pc}', - 'h1{margin: 0 0 0 0}' + 'should strip the units from length properties', + processCSS, + 'h1{margin: 0em 0% 0px 0pc}', + 'h1{margin: 0 0 0 0}' ); test( - 'should trim trailing zeros', - processCSS, - 'h1{width:109.00000000000px}', - 'h1{width:109px}' + 'should trim trailing zeros', + processCSS, + 'h1{width:109.00000000000px}', + 'h1{width:109px}' ); test( - 'should trim trailing zeros + unit', - processCSS, - 'h1{width:0.00px}', - 'h1{width:0}' + 'should trim trailing zeros + unit', + processCSS, + 'h1{width:0.00px}', + 'h1{width:0}' ); test( - 'should trim trailing zeros without unit', - processCSS, - 'h1{width:100.00%}', - 'h1{width:100%}' + 'should trim trailing zeros without unit', + processCSS, + 'h1{width:100.00%}', + 'h1{width:100%}' ); -test( - 'should not mangle flex basis', - passthroughCSS, - 'h1{flex-basis:0%}' -); +test('should not mangle flex basis', passthroughCSS, 'h1{flex-basis:0%}'); -test( - 'should not mangle flex basis (2)', - passthroughCSS, - 'h1{FLEX-BASIC:0%}' -); +test('should not mangle flex basis (2)', passthroughCSS, 'h1{FLEX-BASIC:0%}'); -test( - 'should not mangle values without units', - passthroughCSS, - 'h1{z-index:5}' -); +test('should not mangle values without units', passthroughCSS, 'h1{z-index:5}'); test( - 'should operate in calc values', - processCSS, - 'h1{width:calc(192px + 2em - (0px * 4))}', - 'h1{width:calc(2in + 2em - (0px * 4))}' + 'should operate in calc values', + processCSS, + 'h1{width:calc(192px + 2em - (0px * 4))}', + 'h1{width:calc(2in + 2em - (0px * 4))}' ); test( - 'should operate in calc values (2)', - processCSS, - 'h1{width:CALC(192px + 2em - (0px * 4))}', - 'h1{width:CALC(2in + 2em - (0px * 4))}' + 'should operate in calc values (2)', + processCSS, + 'h1{width:CALC(192px + 2em - (0px * 4))}', + 'h1{width:CALC(2in + 2em - (0px * 4))}' ); test( - 'should not convert zero values in calc', - passthroughCSS, - 'h1{width:calc(0em)}' + 'should not convert zero values in calc', + passthroughCSS, + 'h1{width:calc(0em)}' ); test( - 'should not mangle values outside of its domain', - passthroughCSS, - 'h1{background:url(a.png)}' + 'should not mangle values outside of its domain', + passthroughCSS, + 'h1{background:url(a.png)}' ); test( - 'should not mangle values outside of its domain (2)', - passthroughCSS, - 'h1{background:URL(a.png)}' + 'should not mangle values outside of its domain (2)', + passthroughCSS, + 'h1{background:URL(a.png)}' ); test( - 'should optimise fractions', - processCSS, - 'h1{opacity:1.}h2{opacity:.0}', - 'h1{opacity:1}h2{opacity:0}' + 'should optimise fractions', + processCSS, + 'h1{opacity:1.}h2{opacity:.0}', + 'h1{opacity:1}h2{opacity:0}' ); test( - 'should optimise fractions with units', - processCSS, - 'h1{width:10.px}h2{width:.0px}', - 'h1{width:10px}h2{width:0}' + 'should optimise fractions with units', + processCSS, + 'h1{width:10.px}h2{width:.0px}', + 'h1{width:10px}h2{width:0}' ); test( - 'should optimise fractions inside calc', - processCSS, - 'h1{width:calc(10.px + .0px)}', - 'h1{width:calc(10px + 0px)}' + 'should optimise fractions inside calc', + processCSS, + 'h1{width:calc(10.px + .0px)}', + 'h1{width:calc(10px + 0px)}' ); test( - 'should handle leading zero in rem values', - processCSS, - '.one{top:0.25rem}', - '.one{top:.25rem}' + 'should handle leading zero in rem values', + processCSS, + '.one{top:0.25rem}', + '.one{top:.25rem}' ); test( - 'should handle slash separated values', - processCSS, - '.one{background: 50% .0%/100.0% 100.0%}', - '.one{background: 50% 0/100% 100%}' + 'should handle slash separated values', + processCSS, + '.one{background: 50% .0%/100.0% 100.0%}', + '.one{background: 50% 0/100% 100%}' ); test( - 'should handle comma separated values', - processCSS, - '.one{background: 50% .0% ,100.0% 100.0%}', - '.one{background: 50% 0 ,100% 100%}' + 'should handle comma separated values', + processCSS, + '.one{background: 50% .0% ,100.0% 100.0%}', + '.one{background: 50% 0 ,100% 100%}' ); test( - 'should not mangle duration values', - passthroughCSS, - '.long{animation-duration:2s}' + 'should not mangle duration values', + passthroughCSS, + '.long{animation-duration:2s}' ); test( - 'should not mangle padding values', - passthroughCSS, - 'h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}' + 'should not mangle padding values', + passthroughCSS, + 'h1{padding:10px 20px 30px 40px}h2{padding:10px 20px 30px}h3{padding:10px 20px}h4{padding:10px}' ); test( - 'should trim leading zeroes from negative values', - processCSS, - 'h1,h2{letter-spacing:-0.1rem}', - 'h1,h2{letter-spacing:-.1rem}' + 'should trim leading zeroes from negative values', + processCSS, + 'h1,h2{letter-spacing:-0.1rem}', + 'h1,h2{letter-spacing:-.1rem}' ); test( - 'should support viewports units', - processCSS, - 'h1,h2{letter-spacing:-0.1vmin}', - 'h1,h2{letter-spacing:-.1vmin}' + 'should support viewports units', + processCSS, + 'h1,h2{letter-spacing:-0.1vmin}', + 'h1,h2{letter-spacing:-.1vmin}' ); -test( - 'should support ch units', - passthroughCSS, - 'a{line-height:1.1ch}' -); +test('should support ch units', passthroughCSS, 'a{line-height:1.1ch}'); test( - 'should support PX units', - processCSS, - 'h1{font-size:20PX}', - 'h1{font-size:20PX}' + 'should support PX units', + processCSS, + 'h1{font-size:20PX}', + 'h1{font-size:20PX}' ); test( - 'should not mangle data urls', - passthroughCSS, - '.has-svg:before{content:url("data:image/svg+xml;utf8,")}' + 'should not mangle data urls', + passthroughCSS, + '.has-svg:before{content:url("data:image/svg+xml;utf8,")}' ); test( - 'should not mangle data urls (2)', - passthroughCSS, - '.has-svg:before{content:URL("data:image/svg+xml;utf8,")}' + 'should not mangle data urls (2)', + passthroughCSS, + '.has-svg:before{content:URL("data:image/svg+xml;utf8,")}' ); test( - 'should convert angle units', - processCSS, - 'h1{transform: rotate(0.25turn);transform: rotate(0.25TURN)}', - 'h1{transform: rotate(90deg);transform: rotate(90deg)}' + 'should convert angle units', + processCSS, + 'h1{transform: rotate(0.25turn);transform: rotate(0.25TURN)}', + 'h1{transform: rotate(90deg);transform: rotate(90deg)}' ); test( - 'should not convert length units', - processCSS, - 'h1{transition-duration:500ms; width:calc(192px + 2em); width:+14px; letter-spacing:-0.1VMIN}', - 'h1{transition-duration:.5s; width:calc(192px + 2em); width:14px; letter-spacing:-.1VMIN}', - {length: false} + 'should not convert length units', + processCSS, + 'h1{transition-duration:500ms; width:calc(192px + 2em); width:+14px; letter-spacing:-0.1VMIN}', + 'h1{transition-duration:.5s; width:calc(192px + 2em); width:14px; letter-spacing:-.1VMIN}', + { length: false } ); test( - 'should not convert time units', - processCSS, - 'h1{transition-duration:500ms; width:calc(192px + 2em); width:+14px; letter-spacing:-0.1VMIN}', - 'h1{transition-duration:500ms; width:calc(2in + 2em); width:14px; letter-spacing:-.1VMIN}', - {time: false} + 'should not convert time units', + processCSS, + 'h1{transition-duration:500ms; width:calc(192px + 2em); width:+14px; letter-spacing:-0.1VMIN}', + 'h1{transition-duration:500ms; width:calc(2in + 2em); width:14px; letter-spacing:-.1VMIN}', + { time: false } ); test( - 'should not convert angle units', - processCSS, - 'h1{transform: rotate(0.25turn);transform: rotate(0.25TURN)}', - 'h1{transform: rotate(.25turn);transform: rotate(.25TURN)}', - {angle: false} + 'should not convert angle units', + processCSS, + 'h1{transform: rotate(0.25turn);transform: rotate(0.25TURN)}', + 'h1{transform: rotate(.25turn);transform: rotate(.25TURN)}', + { angle: false } ); test( - 'should not remove units from angle values', - passthroughCSS, - 'h1{transform:rotate(0deg)}' + 'should not remove units from angle values', + passthroughCSS, + 'h1{transform:rotate(0deg)}' ); test( - 'should not remove units from angle values (2)', - passthroughCSS, - 'h1{transform:rotate(0turn)}' + 'should not remove units from angle values (2)', + passthroughCSS, + 'h1{transform:rotate(0turn)}' ); test( - 'should not remove unit with zero value in hsl and hsla functions', - passthroughCSS, - 'h1{color:hsl(0, 0%, 244%); background:hsl(0, 0%, 0%)}' + 'should not remove unit with zero value in hsl and hsla functions', + passthroughCSS, + 'h1{color:hsl(0, 0%, 244%); background:hsl(0, 0%, 0%)}' ); test( - 'should strip trailing zeroes from percentage heights', - processCSS, - 'h1{height:12.500%}', - 'h1{height:12.5%}' + 'should strip trailing zeroes from percentage heights', + processCSS, + 'h1{height:12.500%}', + 'h1{height:12.5%}' ); test( - 'should not strip the percentage from 0 in max-height & height props', - passthroughCSS, - 'h1{height:0%;max-height:0%}' + 'should not strip the percentage from 0 in max-height & height props', + passthroughCSS, + 'h1{height:0%;max-height:0%}' ); test( - 'should not crash when analysing a declaration with one parent', - passthroughCSS, - 'width:0' + 'should not crash when analysing a declaration with one parent', + passthroughCSS, + 'width:0' ); test( - 'should strip the unit from 0 in max-height & height props', - processCSS, - 'h1{height:0em;max-height:0em}', - 'h1{height:0;max-height:0}' + 'should strip the unit from 0 in max-height & height props', + processCSS, + 'h1{height:0em;max-height:0em}', + 'h1{height:0;max-height:0}' ); test( - 'should strip the unit from 0 in max-height & height props (2)', - processCSS, - 'h1{height:0em;MAX-HEIGHT:0em}', - 'h1{height:0;MAX-HEIGHT:0}' + 'should strip the unit from 0 in max-height & height props (2)', + processCSS, + 'h1{height:0em;MAX-HEIGHT:0em}', + 'h1{height:0;MAX-HEIGHT:0}' ); test( - 'should round pixel values to two decimal places', - processCSS, - 'h1{right:6.66667px}', - 'h1{right:6.67px}', - {precision: 2} + 'should round pixel values to two decimal places', + processCSS, + 'h1{right:6.66667px}', + 'h1{right:6.67px}', + { precision: 2 } ); test( - 'should round pixel values with customisable precision', - processCSS, - 'h1{right:6.66667px}', - 'h1{right:7px}', - {precision: 0} + 'should round pixel values with customisable precision', + processCSS, + 'h1{right:6.66667px}', + 'h1{right:7px}', + { precision: 0 } ); test( - 'should not round pixel values to two decimal places by default', - passthroughCSS, - 'h1{right:6.66667px}' + 'should not round pixel values to two decimal places by default', + passthroughCSS, + 'h1{right:6.66667px}' ); test( - 'should clamp opacity to 1 maximum', - processCSS, - 'h1{opacity:150;opacity:15;opacity:1.5}', - 'h1{opacity:1;opacity:1;opacity:1}' + 'should clamp opacity to 1 maximum', + processCSS, + 'h1{opacity:150;opacity:15;opacity:1.5}', + 'h1{opacity:1;opacity:1;opacity:1}' ); test( - 'should clamp opacity to 0 minimum', - processCSS, - 'h1{opacity:-0.5;opacity:-5;opacity:-50}', - 'h1{opacity:0;opacity:0;opacity:0}' + 'should clamp opacity to 0 minimum', + processCSS, + 'h1{opacity:-0.5;opacity:-5;opacity:-50}', + 'h1{opacity:0;opacity:0;opacity:0}' ); test( - 'should keep stripping zeroes from opacity', - processCSS, - 'h1{opacity:0.0625}', - 'h1{opacity:.0625}' + 'should keep stripping zeroes from opacity', + processCSS, + 'h1{opacity:0.0625}', + 'h1{opacity:.0625}' ); test( - 'should keep stripping zeroes from opacity (2)', - processCSS, - 'h1{OPACITY:0.0625}', - 'h1{OPACITY:.0625}' + 'should keep stripping zeroes from opacity (2)', + processCSS, + 'h1{OPACITY:0.0625}', + 'h1{OPACITY:.0625}' ); test( - 'should handle global values for opacity', - passthroughCSS, - 'h1{opacity:initial}' + 'should handle global values for opacity', + passthroughCSS, + 'h1{opacity:initial}' ); test( - 'should clamp shape-image-threshold to 1 maximum', - processCSS, - 'h1{shape-image-threshold:150;shape-image-threshold:15;shape-image-threshold:1.5}', - 'h1{shape-image-threshold:1;shape-image-threshold:1;shape-image-threshold:1}' + 'should clamp shape-image-threshold to 1 maximum', + processCSS, + 'h1{shape-image-threshold:150;shape-image-threshold:15;shape-image-threshold:1.5}', + 'h1{shape-image-threshold:1;shape-image-threshold:1;shape-image-threshold:1}' ); test( - 'should clamp shape-image-threshold to 1 maximum (2)', - processCSS, - 'h1{SHAPE-IMAGE-THRESHOLD:150;SHAPE-IMAGE-THRESHOLD:15;SHAPE-IMAGE-THRESHOLD:1.5}', - 'h1{SHAPE-IMAGE-THRESHOLD:1;SHAPE-IMAGE-THRESHOLD:1;SHAPE-IMAGE-THRESHOLD:1}' + 'should clamp shape-image-threshold to 1 maximum (2)', + processCSS, + 'h1{SHAPE-IMAGE-THRESHOLD:150;SHAPE-IMAGE-THRESHOLD:15;SHAPE-IMAGE-THRESHOLD:1.5}', + 'h1{SHAPE-IMAGE-THRESHOLD:1;SHAPE-IMAGE-THRESHOLD:1;SHAPE-IMAGE-THRESHOLD:1}' ); test( - 'should clamp shape-image-threshold to 0 minimum', - processCSS, - 'h1{shape-image-threshold:-0.5;shape-image-threshold:-5;shape-image-threshold:-50}', - 'h1{shape-image-threshold:0;shape-image-threshold:0;shape-image-threshold:0}' + 'should clamp shape-image-threshold to 0 minimum', + processCSS, + 'h1{shape-image-threshold:-0.5;shape-image-threshold:-5;shape-image-threshold:-50}', + 'h1{shape-image-threshold:0;shape-image-threshold:0;shape-image-threshold:0}' ); test( - 'should handle global values for shape-image-threshold', - passthroughCSS, - 'h1{shape-image-threshold:initial}' + 'should handle global values for shape-image-threshold', + passthroughCSS, + 'h1{shape-image-threshold:initial}' ); test( - 'should keep stripping zeroes from shape-image-threshold', - processCSS, - 'h1{shape-image-threshold:0.0625}', - 'h1{shape-image-threshold:.0625}' + 'should keep stripping zeroes from shape-image-threshold', + processCSS, + 'h1{shape-image-threshold:0.0625}', + 'h1{shape-image-threshold:.0625}' ); test( - 'should keep unknown units or hacks', - passthroughCSS, - 'h1{top:0\\9\\0;left:0lightyear}' + 'should keep unknown units or hacks', + passthroughCSS, + 'h1{top:0\\9\\0;left:0lightyear}' ); -['stroke-dasharray', 'stroke-dashoffset', 'stroke-width'].forEach(property => { +['stroke-dasharray', 'stroke-dashoffset', 'stroke-width'].forEach( + (property) => { test( - `should not strip the percentage from 0 in SVG animation, for IE (${property})`, - passthroughCSS, - `@keyframes a{0%{${property}:200%}to{${property}:0%}}` + `should not strip the percentage from 0 in SVG animation, for IE (${property})`, + passthroughCSS, + `@keyframes a{0%{${property}:200%}to{${property}:0%}}` ); -}); + } +); -['STROKE-DASHARRAY', 'STROKE-DASHOFFSET', 'STROKE-WIDTH'].forEach(property => { +['STROKE-DASHARRAY', 'STROKE-DASHOFFSET', 'STROKE-WIDTH'].forEach( + (property) => { test( - `should not strip the percentage from 0 in SVG animation, for IE (${property}) (2)`, - passthroughCSS, - `@KEYFRAMES a{0%{${property}:200%}to{${property}:0%}}` + `should not strip the percentage from 0 in SVG animation, for IE (${property}) (2)`, + passthroughCSS, + `@KEYFRAMES a{0%{${property}:200%}to{${property}:0%}}` ); -}); - -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + } ); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-convert-values/src/index.js b/packages/postcss-convert-values/src/index.js index a443eb212..af0dd5d95 100644 --- a/packages/postcss-convert-values/src/index.js +++ b/packages/postcss-convert-values/src/index.js @@ -1,97 +1,120 @@ import postcss from 'postcss'; -import valueParser, {unit, walk} from 'postcss-value-parser'; +import valueParser, { unit, walk } from 'postcss-value-parser'; import convert from './lib/convert'; const LENGTH_UNITS = [ - 'em', 'ex', 'ch', 'rem', 'vw', 'vh', 'vmin', 'vmax', - 'cm', 'mm', 'q', 'in', 'pt', 'pc', 'px', + 'em', + 'ex', + 'ch', + 'rem', + 'vw', + 'vh', + 'vmin', + 'vmax', + 'cm', + 'mm', + 'q', + 'in', + 'pt', + 'pc', + 'px', ]; -function parseWord (node, opts, keepZeroUnit) { - const pair = unit(node.value); - if (pair) { - const num = Number(pair.number); - const u = pair.unit; - if (num === 0) { - node.value = ( - keepZeroUnit || - !~LENGTH_UNITS.indexOf(u.toLowerCase()) && u !== '%' - ) ? 0 + u : 0; - } else { - node.value = convert(num, u, opts); +function parseWord(node, opts, keepZeroUnit) { + const pair = unit(node.value); + if (pair) { + const num = Number(pair.number); + const u = pair.unit; + if (num === 0) { + node.value = + keepZeroUnit || (!~LENGTH_UNITS.indexOf(u.toLowerCase()) && u !== '%') + ? 0 + u + : 0; + } else { + node.value = convert(num, u, opts); - if ( - typeof opts.precision === 'number' && - u.toLowerCase() === 'px' && - ~pair.number.indexOf('.') - ) { - const precision = Math.pow(10, opts.precision); - node.value = Math.round(parseFloat(node.value) * precision) / precision + u; - } - } + if ( + typeof opts.precision === 'number' && + u.toLowerCase() === 'px' && + ~pair.number.indexOf('.') + ) { + const precision = Math.pow(10, opts.precision); + node.value = + Math.round(parseFloat(node.value) * precision) / precision + u; + } } + } } -function clampOpacity (node) { - const pair = unit(node.value); - if (!pair) { - return; - } - let num = Number(pair.number); - if (num > 1) { - node.value = 1 + pair.unit; - } else if (num < 0) { - node.value = 0 + pair.unit; - } +function clampOpacity(node) { + const pair = unit(node.value); + if (!pair) { + return; + } + let num = Number(pair.number); + if (num > 1) { + node.value = 1 + pair.unit; + } else if (num < 0) { + node.value = 0 + pair.unit; + } } -function shouldStripPercent (decl) { - const {parent} = decl; - const lowerCasedProp = decl.prop.toLowerCase(); - return ~decl.value.indexOf('%') && - (lowerCasedProp === 'max-height' || lowerCasedProp === 'height') || - parent.parent && - parent.parent.name && - parent.parent.name.toLowerCase() === 'keyframes' && - lowerCasedProp === 'stroke-dasharray' || - lowerCasedProp === 'stroke-dashoffset' || - lowerCasedProp === 'stroke-width'; +function shouldStripPercent(decl) { + const { parent } = decl; + const lowerCasedProp = decl.prop.toLowerCase(); + return ( + (~decl.value.indexOf('%') && + (lowerCasedProp === 'max-height' || lowerCasedProp === 'height')) || + (parent.parent && + parent.parent.name && + parent.parent.name.toLowerCase() === 'keyframes' && + lowerCasedProp === 'stroke-dasharray') || + lowerCasedProp === 'stroke-dashoffset' || + lowerCasedProp === 'stroke-width' + ); } -function transform (opts, decl) { - const lowerCasedProp = decl.prop.toLowerCase(); - if (~lowerCasedProp.indexOf('flex') || lowerCasedProp.indexOf('--') === 0) { - return; - } +function transform(opts, decl) { + const lowerCasedProp = decl.prop.toLowerCase(); + if (~lowerCasedProp.indexOf('flex') || lowerCasedProp.indexOf('--') === 0) { + return; + } - decl.value = valueParser(decl.value).walk(node => { - const lowerCasedValue = node.value.toLowerCase(); + decl.value = valueParser(decl.value) + .walk((node) => { + const lowerCasedValue = node.value.toLowerCase(); - if (node.type === 'word') { - parseWord(node, opts, shouldStripPercent(decl)); - if (lowerCasedProp === 'opacity' || lowerCasedProp === 'shape-image-threshold') { - clampOpacity(node); - } - } else if (node.type === 'function') { - if (lowerCasedValue === 'calc' || - lowerCasedValue === 'hsl' || - lowerCasedValue === 'hsla') { - walk(node.nodes, n => { - if (n.type === 'word') { - parseWord(n, opts, true); - } - }); - return false; - } - if (lowerCasedValue === 'url') { - return false; + if (node.type === 'word') { + parseWord(node, opts, shouldStripPercent(decl)); + if ( + lowerCasedProp === 'opacity' || + lowerCasedProp === 'shape-image-threshold' + ) { + clampOpacity(node); + } + } else if (node.type === 'function') { + if ( + lowerCasedValue === 'calc' || + lowerCasedValue === 'hsl' || + lowerCasedValue === 'hsla' + ) { + walk(node.nodes, (n) => { + if (n.type === 'word') { + parseWord(n, opts, true); } + }); + return false; + } + if (lowerCasedValue === 'url') { + return false; } - }).toString(); + } + }) + .toString(); } const plugin = 'postcss-convert-values'; -export default postcss.plugin(plugin, (opts = {precision: false}) => { - return css => css.walkDecls(transform.bind(null, opts)); +export default postcss.plugin(plugin, (opts = { precision: false }) => { + return (css) => css.walkDecls(transform.bind(null, opts)); }); diff --git a/packages/postcss-convert-values/src/lib/convert.js b/packages/postcss-convert-values/src/lib/convert.js index 1fe128f69..44bf0ac9a 100644 --- a/packages/postcss-convert-values/src/lib/convert.js +++ b/packages/postcss-convert-values/src/lib/convert.js @@ -1,76 +1,76 @@ const lengthConv = { - in: 96, - px: 1, - pt: 4 / 3, - pc: 16, + in: 96, + px: 1, + pt: 4 / 3, + pc: 16, }; const timeConv = { - s: 1000, - ms: 1, + s: 1000, + ms: 1, }; const angleConv = { - turn: 360, - deg: 1, + turn: 360, + deg: 1, }; -function dropLeadingZero (number) { - const value = String(number); +function dropLeadingZero(number) { + const value = String(number); - if (number % 1) { - if (value[0] === '0') { - return value.slice(1); - } + if (number % 1) { + if (value[0] === '0') { + return value.slice(1); + } - if (value[0] === '-' && value[1] === '0') { - return '-' + value.slice(2); - } + if (value[0] === '-' && value[1] === '0') { + return '-' + value.slice(2); } + } - return value; + return value; } -function transform (number, unit, conversion) { - const lowerCasedUnit = unit.toLowerCase(); - let one, base; - let convertionUnits = Object.keys(conversion).filter(u => { - if (conversion[u] === 1) { - one = u; - } - return lowerCasedUnit !== u; - }); - - if (lowerCasedUnit === one) { - base = number / conversion[lowerCasedUnit]; - } else { - base = number * conversion[lowerCasedUnit]; +function transform(number, unit, conversion) { + const lowerCasedUnit = unit.toLowerCase(); + let one, base; + let convertionUnits = Object.keys(conversion).filter((u) => { + if (conversion[u] === 1) { + one = u; } + return lowerCasedUnit !== u; + }); - return convertionUnits - .map(u => dropLeadingZero(base / conversion[u]) + u) - .reduce((a, b) => a.length < b.length ? a : b); + if (lowerCasedUnit === one) { + base = number / conversion[lowerCasedUnit]; + } else { + base = number * conversion[lowerCasedUnit]; + } + + return convertionUnits + .map((u) => dropLeadingZero(base / conversion[u]) + u) + .reduce((a, b) => (a.length < b.length ? a : b)); } -export default function (number, unit, {time, length, angle}) { - let value = dropLeadingZero(number) + (unit ? unit : ''); - let converted; +export default function(number, unit, { time, length, angle }) { + let value = dropLeadingZero(number) + (unit ? unit : ''); + let converted; - if (length !== false && unit.toLowerCase() in lengthConv) { - converted = transform(number, unit, lengthConv); - } + if (length !== false && unit.toLowerCase() in lengthConv) { + converted = transform(number, unit, lengthConv); + } - if (time !== false && unit.toLowerCase() in timeConv) { - converted = transform(number, unit, timeConv); - } + if (time !== false && unit.toLowerCase() in timeConv) { + converted = transform(number, unit, timeConv); + } - if (angle !== false && unit.toLowerCase() in angleConv) { - converted = transform(number, unit, angleConv); - } + if (angle !== false && unit.toLowerCase() in angleConv) { + converted = transform(number, unit, angleConv); + } - if (converted && converted.length < value.length) { - value = converted; - } + if (converted && converted.length < value.length) { + value = converted; + } - return value; + return value; } diff --git a/packages/postcss-discard-comments/src/__tests__/index.js b/packages/postcss-discard-comments/src/__tests__/index.js index 4a3f95a46..538184bca 100644 --- a/packages/postcss-discard-comments/src/__tests__/index.js +++ b/packages/postcss-discard-comments/src/__tests__/index.js @@ -1,266 +1,265 @@ import vars from 'postcss-simple-vars'; import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should remove non-special comments', - processCSS, - 'h1{font-weight:700!important/*test comment*/}', - 'h1{font-weight:700!important}' + 'should remove non-special comments', + processCSS, + 'h1{font-weight:700!important/*test comment*/}', + 'h1{font-weight:700!important}' ); test( - 'should remove non-special comments 2', - processCSS, - 'h1{/*test comment*/font-weight:700}', - 'h1{font-weight:700}' + 'should remove non-special comments 2', + processCSS, + 'h1{/*test comment*/font-weight:700}', + 'h1{font-weight:700}' ); test( - 'should remove non-special comments 3', - processCSS, - '/*test comment*/h1{font-weight:700}/*test comment*/', - 'h1{font-weight:700}' + 'should remove non-special comments 3', + processCSS, + '/*test comment*/h1{font-weight:700}/*test comment*/', + 'h1{font-weight:700}' ); test( - 'should remove non-special comments 4', - processCSS, - 'h1{font-weight:/*test comment*/700}', - 'h1{font-weight:700}' + 'should remove non-special comments 4', + processCSS, + 'h1{font-weight:/*test comment*/700}', + 'h1{font-weight:700}' ); test( - 'should remove non-special comments 5', - processCSS, - 'h1{margin:10px/*test*/20px}', - 'h1{margin:10px 20px}' + 'should remove non-special comments 5', + processCSS, + 'h1{margin:10px/*test*/20px}', + 'h1{margin:10px 20px}' ); test( - 'should remove non-special comments 6', - processCSS, - 'h1{margin:10px /*test*/ 20px /*test*/ 30px /*test*/ 40px}', - 'h1{margin:10px 20px 30px 40px}' + 'should remove non-special comments 6', + processCSS, + 'h1{margin:10px /*test*/ 20px /*test*/ 30px /*test*/ 40px}', + 'h1{margin:10px 20px 30px 40px}' ); test( - 'should remove non-special comments 7', - processCSS, - '/*comment*/*/*comment*/{margin:10px}', - '*{margin:10px}' + 'should remove non-special comments 7', + processCSS, + '/*comment*/*/*comment*/{margin:10px}', + '*{margin:10px}' ); test( - 'should remove non-special comments 8', - processCSS, - 'h1,/*comment*/ h2, h3/*comment*/{margin:20px}', - 'h1, h2, h3{margin:20px}' + 'should remove non-special comments 8', + processCSS, + 'h1,/*comment*/ h2, h3/*comment*/{margin:20px}', + 'h1, h2, h3{margin:20px}' ); test( - 'should remove non-special comments 9', - processCSS, - '@keyframes /*test*/ fade{0%{opacity:0}to{opacity:1}}', - '@keyframes fade{0%{opacity:0}to{opacity:1}}' + 'should remove non-special comments 9', + processCSS, + '@keyframes /*test*/ fade{0%{opacity:0}to{opacity:1}}', + '@keyframes fade{0%{opacity:0}to{opacity:1}}' ); test( - 'should remove non-special comments 10', - processCSS, - '@media only screen /*desktop*/ and (min-width:900px){body{margin:0 auto}}', - '@media only screen and (min-width:900px){body{margin:0 auto}}' + 'should remove non-special comments 10', + processCSS, + '@media only screen /*desktop*/ and (min-width:900px){body{margin:0 auto}}', + '@media only screen and (min-width:900px){body{margin:0 auto}}' ); test( - 'should remove non-special comments 11', - processCSS, - '@media only screen and (min-width:900px)/*test*/{body{margin:0 auto}}', - '@media only screen and (min-width:900px){body{margin:0 auto}}' + 'should remove non-special comments 11', + processCSS, + '@media only screen and (min-width:900px)/*test*/{body{margin:0 auto}}', + '@media only screen and (min-width:900px){body{margin:0 auto}}' ); test( - 'should remove non-special comments 12', - processCSS, - 'h1{margin/*test*/:20px}', - 'h1{margin:20px}' + 'should remove non-special comments 12', + processCSS, + 'h1{margin/*test*/:20px}', + 'h1{margin:20px}' ); test( - 'should remove non-special comments 13', - processCSS, - 'h1{margin:20px! /* test */ important}', - 'h1{margin:20px!important}' + 'should remove non-special comments 13', + processCSS, + 'h1{margin:20px! /* test */ important}', + 'h1{margin:20px!important}' ); test( - 'should keep special comments', - passthroughCSS, - 'h1{font-weight:700!important/*!test comment*/}' + 'should keep special comments', + passthroughCSS, + 'h1{font-weight:700!important/*!test comment*/}' ); test( - 'should keep special comments 2', - passthroughCSS, - 'h1{/*!test comment*/font-weight:700}' + 'should keep special comments 2', + passthroughCSS, + 'h1{/*!test comment*/font-weight:700}' ); test( - 'should keep special comments 3', - passthroughCSS, - '/*!test comment*/h1{font-weight:700}/*!test comment*/' + 'should keep special comments 3', + passthroughCSS, + '/*!test comment*/h1{font-weight:700}/*!test comment*/' ); test( - 'should keep special comments 4', - passthroughCSS, - 'h1{font-weight:/*!test comment*/700}' + 'should keep special comments 4', + passthroughCSS, + 'h1{font-weight:/*!test comment*/700}' ); test( - 'should keep special comments 5', - passthroughCSS, - 'h1{margin:10px/*!test*/20px}' + 'should keep special comments 5', + passthroughCSS, + 'h1{margin:10px/*!test*/20px}' ); test( - 'should keep special comments 6', - passthroughCSS, - 'h1{margin:10px /*!test*/ 20px /*!test*/ 30px /*!test*/ 40px}' + 'should keep special comments 6', + passthroughCSS, + 'h1{margin:10px /*!test*/ 20px /*!test*/ 30px /*!test*/ 40px}' ); test( - 'should keep special comments 7', - passthroughCSS, - '/*!comment*/*/*!comment*/{margin:10px}' + 'should keep special comments 7', + passthroughCSS, + '/*!comment*/*/*!comment*/{margin:10px}' ); test( - 'should keep special comments 8', - passthroughCSS, - 'h1,/*!comment*/h2,h3/*!comment*/{margin:20px}' + 'should keep special comments 8', + passthroughCSS, + 'h1,/*!comment*/h2,h3/*!comment*/{margin:20px}' ); test( - 'should keep special comments 9', - passthroughCSS, - '@keyframes /*!test*/ fade{0%{opacity:0}to{opacity:1}}' + 'should keep special comments 9', + passthroughCSS, + '@keyframes /*!test*/ fade{0%{opacity:0}to{opacity:1}}' ); test( - 'should keep special comments 10', - passthroughCSS, - '@media only screen /*!desktop*/ and (min-width:900px){body{margin:0 auto}}' + 'should keep special comments 10', + passthroughCSS, + '@media only screen /*!desktop*/ and (min-width:900px){body{margin:0 auto}}' ); test( - 'should keep special comments 11', - passthroughCSS, - '@media only screen and (min-width:900px)/*!test*/{body{margin:0 auto}}' + 'should keep special comments 11', + passthroughCSS, + '@media only screen and (min-width:900px)/*!test*/{body{margin:0 auto}}' ); test( - 'should keep special comments 12', - passthroughCSS, - 'h1{margin/*!test*/:20px}' + 'should keep special comments 12', + passthroughCSS, + 'h1{margin/*!test*/:20px}' ); test( - 'should keep special comments 13', - passthroughCSS, - 'h1{margin:20px! /*! test */ important}' + 'should keep special comments 13', + passthroughCSS, + 'h1{margin:20px! /*! test */ important}' ); test( - 'should remove comments marked as @ but keep other', - processCSS, - '/* keep *//*@ remove */h1{color:#000;/*@ remove */font-weight:700}', - '/* keep */h1{color:#000;font-weight:700}', - {remove: comment => comment[0] === "@"} + 'should remove comments marked as @ but keep other', + processCSS, + '/* keep *//*@ remove */h1{color:#000;/*@ remove */font-weight:700}', + '/* keep */h1{color:#000;font-weight:700}', + { remove: (comment) => comment[0] === '@' } ); test( - 'should remove all important comments, with a flag', - processCSS, - '/*!license*/h1{font-weight:700}/*!license 2*/h2{color:#000}', - 'h1{font-weight:700}h2{color:#000}', - {removeAll: true} + 'should remove all important comments, with a flag', + processCSS, + '/*!license*/h1{font-weight:700}/*!license 2*/h2{color:#000}', + 'h1{font-weight:700}h2{color:#000}', + { removeAll: true } ); test( - 'should remove all important comments but the first, with a flag', - processCSS, - '/*!license*/h1{font-weight:700}/*!license 2*/h2{color:#000}', - '/*!license*/h1{font-weight:700}h2{color:#000}', - {removeAllButFirst: true} + 'should remove all important comments but the first, with a flag', + processCSS, + '/*!license*/h1{font-weight:700}/*!license 2*/h2{color:#000}', + '/*!license*/h1{font-weight:700}h2{color:#000}', + { removeAllButFirst: true } ); test( - 'should remove non-special comments that have exclamation marks', - processCSS, - '/* This makes a heading black! Wow! */h1{color:#000}', - 'h1{color:#000}' + 'should remove non-special comments that have exclamation marks', + processCSS, + '/* This makes a heading black! Wow! */h1{color:#000}', + 'h1{color:#000}' ); // Looks we should remove this tests, because it is invalid syntax test.skip( - 'should handle space appropriately in selectors', - processCSS, - '.h/* ... */1{color:#000}', - '.h1{color:#000}' + 'should handle space appropriately in selectors', + processCSS, + '.h/* ... */1{color:#000}', + '.h1{color:#000}' ); // Looks we should remove this tests, because it is invalid syntax test.skip( - 'should handle space appropriately in properties', - processCSS, - 'h1{co/* ... */lor:#000}', - 'h1{color:#000}' + 'should handle space appropriately in properties', + processCSS, + 'h1{co/* ... */lor:#000}', + 'h1{color:#000}' ); test( - 'should remove block comments', - processCSS, - '/*\n\n# Pagination\n\n...\n\n*/.pagination{color:#000}', - '.pagination{color:#000}' + 'should remove block comments', + processCSS, + '/*\n\n# Pagination\n\n...\n\n*/.pagination{color:#000}', + '.pagination{color:#000}' ); test( - 'should pass through when it doesn\'t find a comment', - passthroughCSS, - 'h1{color:#000;font-weight:700}' + "should pass through when it doesn't find a comment", + passthroughCSS, + 'h1{color:#000;font-weight:700}' ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); test( - 'should pass through at rules without comments', - passthroughCSS, - '@page{body{font-size:1em}}' + 'should pass through at rules without comments', + passthroughCSS, + '@page{body{font-size:1em}}' ); -const {processCSS: singleLine} = processCSSFactory(plugin); +const { processCSS: singleLine } = processCSSFactory(plugin); test( - 'should work with single line comments', - singleLine, - '//!wow\n//wow\nh1{//color:red\n}', - '//!wow\nh1{\n}', - {syntax: require('postcss-scss')} + 'should work with single line comments', + singleLine, + '//!wow\n//wow\nh1{//color:red\n}', + '//!wow\nh1{\n}', + { syntax: require('postcss-scss') } ); -const {processCSS: otherPlugins} = processCSSFactory([vars(), plugin]); +const { processCSS: otherPlugins } = processCSSFactory([vars(), plugin]); test( - 'should handle comments from other plugins', - otherPlugins, - '$color: red; :root { box-shadow: inset 0 -10px 12px 0 $color, /* some comment */ inset 0 0 5px 0 $color; }', - ':root{ box-shadow:inset 0 -10px 12px 0 red, inset 0 0 5px 0 red; }' + 'should handle comments from other plugins', + otherPlugins, + '$color: red; :root { box-shadow: inset 0 -10px 12px 0 $color, /* some comment */ inset 0 0 5px 0 $color; }', + ':root{ box-shadow:inset 0 -10px 12px 0 red, inset 0 0 5px 0 red; }' ); diff --git a/packages/postcss-discard-comments/src/index.js b/packages/postcss-discard-comments/src/index.js index 0b2f01a52..d17fbc4cd 100644 --- a/packages/postcss-discard-comments/src/index.js +++ b/packages/postcss-discard-comments/src/index.js @@ -1,125 +1,113 @@ -import {plugin, list} from "postcss"; -import CommentRemover from "./lib/commentRemover"; -import commentParser from "./lib/commentParser"; +import { plugin, list } from 'postcss'; +import CommentRemover from './lib/commentRemover'; +import commentParser from './lib/commentParser'; -const {space} = list; +const { space } = list; -export default plugin("postcss-discard-comments", (opts = {}) => { - const remover = new CommentRemover(opts); - const matcherCache = {}; - const replacerCache = {}; +export default plugin('postcss-discard-comments', (opts = {}) => { + const remover = new CommentRemover(opts); + const matcherCache = {}; + const replacerCache = {}; - function matchesComments (source) { - if (matcherCache[source]) { - return matcherCache[source]; - } + function matchesComments(source) { + if (matcherCache[source]) { + return matcherCache[source]; + } + + const result = commentParser(source).filter(([type]) => type); - const result = commentParser(source).filter(([type]) => type); + matcherCache[source] = result; - matcherCache[source] = result; + return result; + } - return result; + function replaceComments(source, separator = ' ') { + const key = source + '@|@' + separator; + + if (replacerCache[key]) { + return replacerCache[key]; } - function replaceComments (source, separator = " ") { - const key = source + "@|@" + separator; + const parsed = commentParser(source).reduce((value, [type, start, end]) => { + const contents = source.slice(start, end); + + if (!type) { + return value + contents; + } + + if (remover.canRemove(contents)) { + return value + separator; + } + + return `${value}/*${contents}*/`; + }, ''); + + const result = space(parsed).join(' '); + + replacerCache[key] = result; + + return result; + } - if (replacerCache[key]) { - return replacerCache[key]; + return (css) => { + css.walk((node) => { + if (node.type === 'comment' && remover.canRemove(node.text)) { + node.remove(); + + return; + } + + if (node.raws.between) { + node.raws.between = replaceComments(node.raws.between); + } + + if (node.type === 'decl') { + if (node.raws.value && node.raws.value.raw) { + if (node.raws.value.value === node.value) { + node.value = replaceComments(node.raws.value.raw); + } else { + node.value = replaceComments(node.value); + } + + node.raws.value = null; } - const parsed = commentParser(source).reduce( - (value, [type, start, end]) => { - const contents = source.slice(start, end); + if (node.raws.important) { + node.raws.important = replaceComments(node.raws.important); - if (!type) { - return value + contents; - } + const b = matchesComments(node.raws.important); - if (remover.canRemove(contents)) { - return value + separator; - } + node.raws.important = b.length ? node.raws.important : '!important'; + } - return `${value}/*${contents}*/`; - }, - "" - ); + return; + } - const result = space(parsed).join(" "); + if ( + node.type === 'rule' && + node.raws.selector && + node.raws.selector.raw + ) { + node.raws.selector.raw = replaceComments(node.raws.selector.raw, ''); - replacerCache[key] = result; + return; + } - return result; - } + if (node.type === 'atrule') { + if (node.raws.afterName) { + const commentsReplaced = replaceComments(node.raws.afterName); + + if (!commentsReplaced.length) { + node.raws.afterName = commentsReplaced + ' '; + } else { + node.raws.afterName = ' ' + commentsReplaced + ' '; + } + } - return css => { - css.walk(node => { - if (node.type === "comment" && remover.canRemove(node.text)) { - node.remove(); - - return; - } - - if (node.raws.between) { - node.raws.between = replaceComments(node.raws.between); - } - - if (node.type === "decl") { - if (node.raws.value && node.raws.value.raw) { - if (node.raws.value.value === node.value) { - node.value = replaceComments(node.raws.value.raw); - } else { - node.value = replaceComments(node.value); - } - - node.raws.value = null; - } - - if (node.raws.important) { - node.raws.important = replaceComments(node.raws.important); - - const b = matchesComments(node.raws.important); - - node.raws.important = b.length - ? node.raws.important - : "!important"; - } - - return; - } - - if ( - node.type === "rule" && - node.raws.selector && - node.raws.selector.raw - ) { - node.raws.selector.raw = replaceComments( - node.raws.selector.raw, - "" - ); - - return; - } - - if (node.type === "atrule") { - if (node.raws.afterName) { - const commentsReplaced = replaceComments( - node.raws.afterName - ); - - if (!commentsReplaced.length) { - node.raws.afterName = commentsReplaced + " "; - } else { - node.raws.afterName = " " + commentsReplaced + " "; - } - } - - if (node.raws.params && node.raws.params.raw) { - node.raws.params.raw = replaceComments( - node.raws.params.raw - ); - } - } - }); - }; + if (node.raws.params && node.raws.params.raw) { + node.raws.params.raw = replaceComments(node.raws.params.raw); + } + } + }); + }; }); diff --git a/packages/postcss-discard-comments/src/lib/commentParser.js b/packages/postcss-discard-comments/src/lib/commentParser.js index 5b2a53259..510e4fcb0 100644 --- a/packages/postcss-discard-comments/src/lib/commentParser.js +++ b/packages/postcss-discard-comments/src/lib/commentParser.js @@ -1,24 +1,24 @@ -export default function commentParser (input) { - const tokens = []; - const length = input.length; - let pos = 0; - let next; +export default function commentParser(input) { + const tokens = []; + const length = input.length; + let pos = 0; + let next; - while (pos < length) { - next = input.indexOf('/*', pos); + while (pos < length) { + next = input.indexOf('/*', pos); - if (~next) { - tokens.push([0, pos, next]); - pos = next; + if (~next) { + tokens.push([0, pos, next]); + pos = next; - next = input.indexOf('*/', pos + 2); - tokens.push([1, pos + 2, next]); - pos = next + 2; - } else { - tokens.push([0, pos, length]); - pos = length; - } + next = input.indexOf('*/', pos + 2); + tokens.push([1, pos + 2, next]); + pos = next + 2; + } else { + tokens.push([0, pos, length]); + pos = length; } + } - return tokens; -}; + return tokens; +} diff --git a/packages/postcss-discard-comments/src/lib/commentRemover.js b/packages/postcss-discard-comments/src/lib/commentRemover.js index de0c546c4..003638569 100644 --- a/packages/postcss-discard-comments/src/lib/commentRemover.js +++ b/packages/postcss-discard-comments/src/lib/commentRemover.js @@ -1,26 +1,26 @@ -function CommentRemover (options) { - this.options = options; +function CommentRemover(options) { + this.options = options; } -CommentRemover.prototype.canRemove = function (comment) { - const remove = this.options.remove; +CommentRemover.prototype.canRemove = function(comment) { + const remove = this.options.remove; - if (remove) { - return remove(comment); - } else { - const isImportant = comment.indexOf('!') === 0; + if (remove) { + return remove(comment); + } else { + const isImportant = comment.indexOf('!') === 0; - if (!isImportant) { - return true; - } + if (!isImportant) { + return true; + } - if (this.options.removeAll || this._hasFirst) { - return true; - } else if (this.options.removeAllButFirst && !this._hasFirst) { - this._hasFirst = true; - return false; - } + if (this.options.removeAll || this._hasFirst) { + return true; + } else if (this.options.removeAllButFirst && !this._hasFirst) { + this._hasFirst = true; + return false; } + } }; export default CommentRemover; diff --git a/packages/postcss-discard-duplicates/src/__tests__/index.js b/packages/postcss-discard-duplicates/src/__tests__/index.js index 20ea62f74..a741f5304 100644 --- a/packages/postcss-discard-duplicates/src/__tests__/index.js +++ b/packages/postcss-discard-duplicates/src/__tests__/index.js @@ -1,162 +1,161 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should remove duplicate rules', - processCSS, - 'h1{font-weight:bold}h1{font-weight:bold}', - 'h1{font-weight:bold}' + 'should remove duplicate rules', + processCSS, + 'h1{font-weight:bold}h1{font-weight:bold}', + 'h1{font-weight:bold}' ); test( - 'should remove duplicate rules (2)', - processCSS, - 'h1{color:#000}h2{color:#fff}h1{color:#000}', - 'h2{color:#fff}h1{color:#000}' + 'should remove duplicate rules (2)', + processCSS, + 'h1{color:#000}h2{color:#fff}h1{color:#000}', + 'h2{color:#fff}h1{color:#000}' ); test( - 'should remove duplicate rules (3)', - processCSS, - 'h1 { font-weight: bold }\nh1{font-weight:bold}', - 'h1{font-weight:bold}' + 'should remove duplicate rules (3)', + processCSS, + 'h1 { font-weight: bold }\nh1{font-weight:bold}', + 'h1{font-weight:bold}' ); test( - 'should remove duplicate declarations', - processCSS, - 'h1{font-weight:bold;font-weight:bold}', - 'h1{font-weight:bold}' + 'should remove duplicate declarations', + processCSS, + 'h1{font-weight:bold;font-weight:bold}', + 'h1{font-weight:bold}' ); test( - 'should remove duplicate declarations, with comments', - processCSS, - 'h1{/*test*/font-weight:bold}h1{/*test*/font-weight:bold}', - 'h1{/*test*/font-weight:bold}' + 'should remove duplicate declarations, with comments', + processCSS, + 'h1{/*test*/font-weight:bold}h1{/*test*/font-weight:bold}', + 'h1{/*test*/font-weight:bold}' ); test( - 'should remove duplicate @rules', - processCSS, - '@charset "utf-8";@charset "utf-8";', - '@charset "utf-8";' + 'should remove duplicate @rules', + processCSS, + '@charset "utf-8";@charset "utf-8";', + '@charset "utf-8";' ); test( - 'should remove duplicate @rules (2)', - processCSS, - '@charset "utf-8";@charset "hello!";@charset "utf-8";', - '@charset "hello!";@charset "utf-8";' + 'should remove duplicate @rules (2)', + processCSS, + '@charset "utf-8";@charset "hello!";@charset "utf-8";', + '@charset "hello!";@charset "utf-8";' ); test( - 'should remove duplicates inside @media queries', - processCSS, - '@media print{h1{display:block}h1{display:block}}', - '@media print{h1{display:block}}' + 'should remove duplicates inside @media queries', + processCSS, + '@media print{h1{display:block}h1{display:block}}', + '@media print{h1{display:block}}' ); test( - 'should remove duplicate @media queries', - processCSS, - '@media print{h1{display:block}}@media print{h1{display:block}}', - '@media print{h1{display:block}}' + 'should remove duplicate @media queries', + processCSS, + '@media print{h1{display:block}}@media print{h1{display:block}}', + '@media print{h1{display:block}}' ); test( - 'should not mangle same keyframe rules but with different vendors', - passthroughCSS, - '@-webkit-keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}' + 'should not mangle same keyframe rules but with different vendors', + passthroughCSS, + '@-webkit-keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}' ); test( - 'should not merge across keyframes', - passthroughCSS, - '@-webkit-keyframes test{0%{color:#000}to{color:#fff}}@keyframes test{0%{color:#000}to{color:#fff}}' + 'should not merge across keyframes', + passthroughCSS, + '@-webkit-keyframes test{0%{color:#000}to{color:#fff}}@keyframes test{0%{color:#000}to{color:#fff}}' ); test( - 'should not merge across keyframes (2)', - passthroughCSS, - '@-webkit-keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}to{-webkit-transform:translateY(0);transform:translateY(0)}}' + 'should not merge across keyframes (2)', + passthroughCSS, + '@-webkit-keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}to{-webkit-transform:translateY(0);transform:translateY(0)}}' ); test( - 'should remove declarations before rules', - processCSS, - 'h1{font-weight:bold;font-weight:bold}h1{font-weight:bold}', - 'h1{font-weight:bold}' + 'should remove declarations before rules', + processCSS, + 'h1{font-weight:bold;font-weight:bold}h1{font-weight:bold}', + 'h1{font-weight:bold}' ); test( - 'should not deduplicate comments', - passthroughCSS, - 'h1{color:#000}/*test*/h2{color:#fff}/*test*/' + 'should not deduplicate comments', + passthroughCSS, + 'h1{color:#000}/*test*/h2{color:#fff}/*test*/' ); test( - 'should not remove declarations when selectors are different', - passthroughCSS, - 'h1{font-weight:bold}h2{font-weight:bold}' + 'should not remove declarations when selectors are different', + passthroughCSS, + 'h1{font-weight:bold}h2{font-weight:bold}' ); test( - 'should not remove across contexts', - passthroughCSS, - 'h1{display:block}@media print{h1{display:block}}' + 'should not remove across contexts', + passthroughCSS, + 'h1{display:block}@media print{h1{display:block}}' ); test( - 'should not be responsible for normalising selectors', - passthroughCSS, - 'h1,h2{font-weight:bold}h2,h1{font-weight:bold}' + 'should not be responsible for normalising selectors', + passthroughCSS, + 'h1,h2{font-weight:bold}h2,h1{font-weight:bold}' ); test( - 'should not be responsible for normalising declarations', - passthroughCSS, - 'h1{margin:10px 0 10px 0;margin:10px 0}' + 'should not be responsible for normalising declarations', + passthroughCSS, + 'h1{margin:10px 0 10px 0;margin:10px 0}' ); test( - 'should remove duplicate rules and declarations', - processCSS, - 'h1{color:#000}h2{color:#fff}h1{color:#000;color:#000}', - 'h2{color:#fff}h1{color:#000}' + 'should remove duplicate rules and declarations', + processCSS, + 'h1{color:#000}h2{color:#fff}h1{color:#000;color:#000}', + 'h2{color:#fff}h1{color:#000}' ); test( - 'should remove differently ordered duplicates', - processCSS, - 'h1{color:black;font-size:12px}h1{font-size:12px;color:black}', - 'h1{font-size:12px;color:black}' + 'should remove differently ordered duplicates', + processCSS, + 'h1{color:black;font-size:12px}h1{font-size:12px;color:black}', + 'h1{font-size:12px;color:black}' ); test( - 'should remove partial duplicates', - processCSS, - 'h1{color:red;background:blue}h1{color:red}', - 'h1{background:blue}h1{color:red}' + 'should remove partial duplicates', + processCSS, + 'h1{color:red;background:blue}h1{color:red}', + 'h1{background:blue}h1{color:red}' ); test( - 'should preserve browser hacks (1)', - passthroughCSS, - 'h1{_color:white;color:white}' + 'should preserve browser hacks (1)', + passthroughCSS, + 'h1{_color:white;color:white}' ); test( - 'should preserve browser hacks (2)', - passthroughCSS, - '@media \0 all {}@media all {}' + 'should preserve browser hacks (2)', + passthroughCSS, + '@media \0 all {}@media all {}' ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-discard-duplicates/src/index.js b/packages/postcss-discard-duplicates/src/index.js index 6d7e5c31f..ecaa00b8d 100644 --- a/packages/postcss-discard-duplicates/src/index.js +++ b/packages/postcss-discard-duplicates/src/index.js @@ -1,132 +1,127 @@ -import {plugin} from 'postcss'; +import { plugin } from 'postcss'; -function noop () {} +function noop() {} -function trimValue (value) { - return value ? value.trim() : value; +function trimValue(value) { + return value ? value.trim() : value; } -function empty (node) { - return !node.nodes - .filter(child => child.type !== 'comment') - .length; +function empty(node) { + return !node.nodes.filter((child) => child.type !== 'comment').length; } -function equals (a, b) { - if (a.type !== b.type) { - return false; - } +function equals(a, b) { + if (a.type !== b.type) { + return false; + } - if (a.important !== b.important) { - return false; - } + if (a.important !== b.important) { + return false; + } - if ((a.raws && !b.raws) || (!a.raws && b.raws)) { - return false; - } + if ((a.raws && !b.raws) || (!a.raws && b.raws)) { + return false; + } - switch (a.type) { + switch (a.type) { case 'rule': - if (a.selector !== b.selector) { - return false; - } - break; + if (a.selector !== b.selector) { + return false; + } + break; case 'atrule': - if (a.name !== b.name || a.params !== b.params) { - return false; - } + if (a.name !== b.name || a.params !== b.params) { + return false; + } - if (a.raws && trimValue(a.raws.before) !== trimValue(b.raws.before)) { - return false; - } + if (a.raws && trimValue(a.raws.before) !== trimValue(b.raws.before)) { + return false; + } - if (a.raws && trimValue(a.raws.afterName) !== trimValue(b.raws.afterName)) { - return false; - } - break; + if ( + a.raws && + trimValue(a.raws.afterName) !== trimValue(b.raws.afterName) + ) { + return false; + } + break; case 'decl': - if (a.prop !== b.prop || a.value !== b.value) { - return false; - } + if (a.prop !== b.prop || a.value !== b.value) { + return false; + } - if (a.raws && trimValue(a.raws.before) !== trimValue(b.raws.before)) { - return false; - } - break; - } + if (a.raws && trimValue(a.raws.before) !== trimValue(b.raws.before)) { + return false; + } + break; + } - if (a.nodes) { - if (a.nodes.length !== b.nodes.length) { - return false; - } + if (a.nodes) { + if (a.nodes.length !== b.nodes.length) { + return false; + } - for (let i = 0; i < a.nodes.length; i++) { - if (!equals(a.nodes[i], b.nodes[i])) { - return false; - } - } + for (let i = 0; i < a.nodes.length; i++) { + if (!equals(a.nodes[i], b.nodes[i])) { + return false; + } } - return true; + } + return true; } -function dedupeRule (last, nodes) { - let index = nodes.indexOf(last) -1; - while (index >= 0) { - const node = nodes[index--]; - if ( - node && - node.type === 'rule' && - node.selector === last.selector - ) { - last.each(child => { - if (child.type === 'decl') { - dedupeNode(child, node.nodes); - } - }); - - if (empty(node)) { - node.remove(); - } +function dedupeRule(last, nodes) { + let index = nodes.indexOf(last) - 1; + while (index >= 0) { + const node = nodes[index--]; + if (node && node.type === 'rule' && node.selector === last.selector) { + last.each((child) => { + if (child.type === 'decl') { + dedupeNode(child, node.nodes); } + }); + + if (empty(node)) { + node.remove(); + } } + } } -function dedupeNode (last, nodes) { - let index = !!~nodes.indexOf(last) - ? nodes.indexOf(last) - 1 - : nodes.length - 1; +function dedupeNode(last, nodes) { + let index = ~nodes.indexOf(last) ? nodes.indexOf(last) - 1 : nodes.length - 1; - while (index >= 0) { - const node = nodes[index--]; - if (node && equals(node, last)) { - node.remove(); - } + while (index >= 0) { + const node = nodes[index--]; + if (node && equals(node, last)) { + node.remove(); } + } } const handlers = { - rule: dedupeRule, - atrule: dedupeNode, - decl: dedupeNode, - comment: noop, + rule: dedupeRule, + atrule: dedupeNode, + decl: dedupeNode, + comment: noop, }; -function dedupe (root) { - const {nodes} = root; +function dedupe(root) { + const { nodes } = root; - if (!nodes) { - return; - } + if (!nodes) { + return; + } - let index = nodes.length - 1; - while (index >= 0) { - let last = nodes[index--]; - if (!last || !last.parent) { - continue; - } - dedupe(last); - handlers[last.type](last, nodes); + let index = nodes.length - 1; + while (index >= 0) { + let last = nodes[index--]; + if (!last || !last.parent) { + continue; } + dedupe(last); + handlers[last.type](last, nodes); + } } export default plugin('postcss-discard-duplicates', () => dedupe); diff --git a/packages/postcss-discard-empty/src/__tests__/index.js b/packages/postcss-discard-empty/src/__tests__/index.js index 102e2cdc2..1890ca454 100644 --- a/packages/postcss-discard-empty/src/__tests__/index.js +++ b/packages/postcss-discard-empty/src/__tests__/index.js @@ -1,120 +1,95 @@ import test from 'ava'; import plugin from '..'; import { - usePostCSSPlugin, - processCSSFactory, - processCSSWithPresetFactory, + usePostCSSPlugin, + processCSSFactory, + processCSSWithPresetFactory, } from '../../../../util/testHelpers'; -const {passthroughCSS, processor} = processCSSFactory(plugin); -const {processCSS: withDefaultPreset} = processCSSWithPresetFactory('default'); - -function testRemovals (t, fixture, expected, removedSelectors) { - return processor(fixture).then(result => { - removedSelectors.forEach((removedSelector) => { - const message = result.messages.some((m) => { - return m.plugin === 'postcss-discard-empty' && - m.type === 'removal' && - m.node.selector === removedSelector; - }); - - if (!message) { - t.fail('expected selector `' + removedSelector + '` was not removed'); - } - }); - - result.messages.forEach((m) => { - if ( - m.plugin !== 'postcss-discard-empty' || - m.type !== 'removal' || - m.selector !== undefined || - ~removedSelectors.indexOf(m.selector) - ) { - t.fail('unexpected selector `' + m.selector + '` was removed'); - } - }); - - t.deepEqual(result.css, expected); +const { passthroughCSS, processor } = processCSSFactory(plugin); +const { processCSS: withDefaultPreset } = processCSSWithPresetFactory( + 'default' +); + +function testRemovals(t, fixture, expected, removedSelectors) { + return processor(fixture).then((result) => { + removedSelectors.forEach((removedSelector) => { + const message = result.messages.some((m) => { + return ( + m.plugin === 'postcss-discard-empty' && + m.type === 'removal' && + m.node.selector === removedSelector + ); + }); + + if (!message) { + t.fail('expected selector `' + removedSelector + '` was not removed'); + } }); + + result.messages.forEach((m) => { + if ( + m.plugin !== 'postcss-discard-empty' || + m.type !== 'removal' || + m.selector !== undefined || + ~removedSelectors.indexOf(m.selector) + ) { + t.fail('unexpected selector `' + m.selector + '` was removed'); + } + }); + + t.deepEqual(result.css, expected); + }); } -test( - 'should remove empty @ rules', - withDefaultPreset, - '@font-face;', - '' -); +test('should remove empty @ rules', withDefaultPreset, '@font-face;', ''); -test( - 'should remove empty @ rules (2)', - withDefaultPreset, - '@font-face {}', - '' -); +test('should remove empty @ rules (2)', withDefaultPreset, '@font-face {}', ''); test( - 'should not mangle @ rules with decls', - passthroughCSS, - '@font-face {font-family: Helvetica}' + 'should not mangle @ rules with decls', + passthroughCSS, + '@font-face {font-family: Helvetica}' ); test( - 'should not mangle @ rules with parameters', - passthroughCSS, - '@charset "utf-8";' + 'should not mangle @ rules with parameters', + passthroughCSS, + '@charset "utf-8";' ); -test( - 'should remove empty rules', - withDefaultPreset, - 'h1{}h2{}h4{}h5,h6{}', - '' -); +test('should remove empty rules', withDefaultPreset, 'h1{}h2{}h4{}h5,h6{}', ''); -test( - 'should remove empty declarations', - withDefaultPreset, - 'h1{color:}', - '' -); +test('should remove empty declarations', withDefaultPreset, 'h1{color:}', ''); -test( - 'should remove null selectors', - withDefaultPreset, - '{color:blue}', - '' -); +test('should remove null selectors', withDefaultPreset, '{color:blue}', ''); test( - 'should remove null selectors in media queries', - withDefaultPreset, - '@media screen, print {{}}', - '' + 'should remove null selectors in media queries', + withDefaultPreset, + '@media screen, print {{}}', + '' ); test( - 'should remove empty media queries', - withDefaultPreset, - '@media screen, print {h1,h2{}}', - '' + 'should remove empty media queries', + withDefaultPreset, + '@media screen, print {h1,h2{}}', + '' ); test( - 'should not be responsible for removing comments', - passthroughCSS, - 'h1{/*comment*/}' + 'should not be responsible for removing comments', + passthroughCSS, + 'h1{/*comment*/}' ); test( - 'should report removed selectors', - testRemovals, - 'h1{}.hot{}.a.b{}{}@media screen, print{h1,h2{}}', - '', - ['h1', '.hot', '.a.b', '', 'h1,h2'] + 'should report removed selectors', + testRemovals, + 'h1{}.hot{}.a.b{}{}@media screen, print{h1,h2{}}', + '', + ['h1', '.hot', '.a.b', '', 'h1,h2'] ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-discard-empty/src/index.js b/packages/postcss-discard-empty/src/index.js index dc85b4e2e..5a9e26376 100644 --- a/packages/postcss-discard-empty/src/index.js +++ b/packages/postcss-discard-empty/src/index.js @@ -2,30 +2,30 @@ import postcss from 'postcss'; const plugin = 'postcss-discard-empty'; -function discardAndReport (css, result) { - function discardEmpty (node) { - const {type, nodes: sub, params} = node; +function discardAndReport(css, result) { + function discardEmpty(node) { + const { type, nodes: sub, params } = node; - if (sub) { - node.each(discardEmpty); - } + if (sub) { + node.each(discardEmpty); + } - if ( - (type === 'decl' && !node.value) || - (type === 'rule' && !node.selector || sub && !sub.length) || - (type === 'atrule' && (!sub && !params || !params && !sub.length)) - ) { - node.remove(); + if ( + (type === 'decl' && !node.value) || + ((type === 'rule' && !node.selector) || (sub && !sub.length)) || + (type === 'atrule' && ((!sub && !params) || (!params && !sub.length))) + ) { + node.remove(); - result.messages.push({ - type: 'removal', - plugin, - node, - }); - } + result.messages.push({ + type: 'removal', + plugin, + node, + }); } + } - css.each(discardEmpty); + css.each(discardEmpty); } export default postcss.plugin(plugin, () => discardAndReport); diff --git a/packages/postcss-discard-overridden/src/__tests__/index.js b/packages/postcss-discard-overridden/src/__tests__/index.js index 7e123ae33..1752ac305 100644 --- a/packages/postcss-discard-overridden/src/__tests__/index.js +++ b/packages/postcss-discard-overridden/src/__tests__/index.js @@ -1,63 +1,62 @@ import fs from 'fs'; import postcss from 'postcss'; import test from 'ava'; -import {diffLines} from 'diff'; +import { diffLines } from 'diff'; import chalk from 'chalk'; import plugin from '../'; -function getDiff (left, right) { - let msg = ['\n']; - diffLines(left, right).forEach(item => { - if (item.added || item.removed) { - let text = item.value - .replace('\n', '\u00b6\n') - .replace('\ufeff', '[[BOM]]'); - msg.push(chalk[item.added ? 'green' : 'red'](text)); - } else { - let value = item.value.replace('\ufeff', '[[BOM]]'); - let lines = value.split('\n'); +function getDiff(left, right) { + let msg = ['\n']; + diffLines(left, right).forEach((item) => { + if (item.added || item.removed) { + let text = item.value + .replace('\n', '\u00b6\n') + .replace('\ufeff', '[[BOM]]'); + msg.push(chalk[item.added ? 'green' : 'red'](text)); + } else { + let value = item.value.replace('\ufeff', '[[BOM]]'); + let lines = value.split('\n'); - // max line count for each item - let keepLines = 6; - // lines to be omitted - let omitLines = lines.length - keepLines; - if (lines.length > keepLines) { - lines.splice( - Math.floor(keepLines / 2), - omitLines, - chalk.gray('(...' + omitLines + ' lines omitted...)') - ); - } - msg.concat(lines); - } - }); - msg.push('\n'); - return msg.map(line => ' ' + line).join(''); + // max line count for each item + let keepLines = 6; + // lines to be omitted + let omitLines = lines.length - keepLines; + if (lines.length > keepLines) { + lines.splice( + Math.floor(keepLines / 2), + omitLines, + chalk.gray('(...' + omitLines + ' lines omitted...)') + ); + } + msg.concat(lines); + } + }); + msg.push('\n'); + return msg.map((line) => ' ' + line).join(''); } -function read (file) { - return fs.readFileSync(__dirname + `/fixtures/${file}.css`, {encoding: 'utf-8'}); +function read(file) { + return fs.readFileSync(__dirname + `/fixtures/${file}.css`, { + encoding: 'utf-8', + }); } -function exec (t, input) { - let output = read(`${input}.post`); - return postcss([ plugin() ]).process(read(input)) - .then( result => { - if (result.css !== output) { - t.fail(getDiff(result.css, output)); - } - t.deepEqual(result.warnings().length, 0); - }); +function exec(t, input) { + let output = read(`${input}.post`); + return postcss([plugin()]) + .process(read(input)) + .then((result) => { + if (result.css !== output) { + t.fail(getDiff(result.css, output)); + } + t.deepEqual(result.warnings().length, 0); + }); } -test( - 'Overridden @keyframes should be discarded correctly.', - exec, - 'keyframes' -); +test('Overridden @keyframes should be discarded correctly.', exec, 'keyframes'); test( - 'Overridden @counter-style should be discarded correctly.', - exec, - 'counter-style' + 'Overridden @counter-style should be discarded correctly.', + exec, + 'counter-style' ); diff --git a/packages/postcss-discard-overridden/src/index.js b/packages/postcss-discard-overridden/src/index.js index bf5857fc1..0f40e97b5 100644 --- a/packages/postcss-discard-overridden/src/index.js +++ b/packages/postcss-discard-overridden/src/index.js @@ -3,44 +3,52 @@ import postcss from 'postcss'; const OVERRIDABLE_RULES = ['keyframes', 'counter-style']; const SCOPE_RULES = ['media', 'supports']; -function isOverridable (name) { - return ~OVERRIDABLE_RULES.indexOf(postcss.vendor.unprefixed(name.toLowerCase())); +function isOverridable(name) { + return ~OVERRIDABLE_RULES.indexOf( + postcss.vendor.unprefixed(name.toLowerCase()) + ); } -function isScope (name) { - return ~SCOPE_RULES.indexOf(postcss.vendor.unprefixed(name.toLowerCase())); +function isScope(name) { + return ~SCOPE_RULES.indexOf(postcss.vendor.unprefixed(name.toLowerCase())); } -function getScope (node) { - let current = node.parent; - const chain = [node.name.toLowerCase(), node.params]; - do { - if (current.type === 'atrule' && isScope(current.name)) { - chain.unshift(current.name + ' ' + current.params); - } - current = current.parent; - } while (current); - return chain.join('|'); +function getScope(node) { + let current = node.parent; + + const chain = [node.name.toLowerCase(), node.params]; + + do { + if (current.type === 'atrule' && isScope(current.name)) { + chain.unshift(current.name + ' ' + current.params); + } + current = current.parent; + } while (current); + + return chain.join('|'); } export default postcss.plugin('postcss-discard-overridden', () => { - return css => { - const cache = {}; - const rules = []; - css.walkAtRules(node => { - if (isOverridable(node.name)) { - const scope = getScope(node); - cache[scope] = node; - rules.push({ - node, - scope, - }); - } - }); - rules.forEach(rule => { - if (cache[rule.scope] !== rule.node) { - rule.node.remove(); - } + return (css) => { + const cache = {}; + const rules = []; + + css.walkAtRules((node) => { + if (isOverridable(node.name)) { + const scope = getScope(node); + + cache[scope] = node; + rules.push({ + node, + scope, }); - }; + } + }); + + rules.forEach((rule) => { + if (cache[rule.scope] !== rule.node) { + rule.node.remove(); + } + }); + }; }); diff --git a/packages/postcss-discard-unused/src/__tests__/index.js b/packages/postcss-discard-unused/src/__tests__/index.js index 3b5321604..4866a935c 100644 --- a/packages/postcss-discard-unused/src/__tests__/index.js +++ b/packages/postcss-discard-unused/src/__tests__/index.js @@ -1,172 +1,171 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should remove unused counter styles', - processCSS, - '@counter-style custom{system:extends decimal;suffix:"> "}', - '' + 'should remove unused counter styles', + processCSS, + '@counter-style custom{system:extends decimal;suffix:"> "}', + '' ); test( - 'should be aware of extensions', - passthroughCSS, - '@counter-style custom{system:extends decimal;suffix:"> "}@counter-style custom2{system:extends custom;suffix:"| "}a{list-style: custom2}' + 'should be aware of extensions', + passthroughCSS, + '@counter-style custom{system:extends decimal;suffix:"> "}@counter-style custom2{system:extends custom;suffix:"| "}a{list-style: custom2}' ); test( - 'should remove unused counters & keep used counters', - processCSS, - '@counter-style custom{system:extends decimal;suffix:"> "}@counter-style custom2{system:extends decimal;suffix:"| "}a{list-style: custom2}', - '@counter-style custom2{system:extends decimal;suffix:"| "}a{list-style: custom2}' + 'should remove unused counters & keep used counters', + processCSS, + '@counter-style custom{system:extends decimal;suffix:"> "}@counter-style custom2{system:extends decimal;suffix:"| "}a{list-style: custom2}', + '@counter-style custom2{system:extends decimal;suffix:"| "}a{list-style: custom2}' ); test( - 'should remove counter styles if they have no identifier', - processCSS, - '@counter-style {system:extends decimal;suffix:"> "}', - '' + 'should remove counter styles if they have no identifier', + processCSS, + '@counter-style {system:extends decimal;suffix:"> "}', + '' ); test( - 'should remove unused keyframes', - processCSS, - '@keyframes fadeOut{0%{opacity:1}to{opacity:0}}', - '' + 'should remove unused keyframes', + processCSS, + '@keyframes fadeOut{0%{opacity:1}to{opacity:0}}', + '' ); test( - 'should remove unused keyframes & keep used keyframes', - processCSS, - '@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}a{animation-name:fadeIn}', - '@keyframes fadeIn{0%{opacity:0}to{opacity:1}}a{animation-name:fadeIn}' + 'should remove unused keyframes & keep used keyframes', + processCSS, + '@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}a{animation-name:fadeIn}', + '@keyframes fadeIn{0%{opacity:0}to{opacity:1}}a{animation-name:fadeIn}' ); test( - 'should remove keyframes if they have no identifier', - processCSS, - '@keyframes {0%{opacity:0}to{opacity:1}}', - '' + 'should remove keyframes if they have no identifier', + processCSS, + '@keyframes {0%{opacity:0}to{opacity:1}}', + '' ); test( - 'should support multiple animations', - passthroughCSS, - '@keyframes one{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes two{0%{border-width:0;opacity:0}}.loader{animation:one 1250ms infinite linear,two .3s ease-out both}' + 'should support multiple animations', + passthroughCSS, + '@keyframes one{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes two{0%{border-width:0;opacity:0}}.loader{animation:one 1250ms infinite linear,two .3s ease-out both}' ); test( - 'should remove unused fonts', - processCSS, - '@font-face {font-family:"Does Not Exist";src:url("fonts/does-not-exist.ttf") format("truetype")}', - '' + 'should remove unused fonts', + processCSS, + '@font-face {font-family:"Does Not Exist";src:url("fonts/does-not-exist.ttf") format("truetype")}', + '' ); test( - 'should remove unused fonts (2)', - processCSS, - '@font-face {font-family:"Does Not Exist";src:url("fonts/does-not-exist.ttf") format("truetype")}@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}', - '' + 'should remove unused fonts (2)', + processCSS, + '@font-face {font-family:"Does Not Exist";src:url("fonts/does-not-exist.ttf") format("truetype")}@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}', + '' ); test( - 'should remove unused fonts & keep used fonts', - processCSS, - '@font-face {font-family:"Does Not Exist";src:url("fonts/does-not-exist.ttf") format("truetype")}@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font-family:"Does Exist",Helvetica,Arial,sans-serif}', - '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font-family:"Does Exist",Helvetica,Arial,sans-serif}' + 'should remove unused fonts & keep used fonts', + processCSS, + '@font-face {font-family:"Does Not Exist";src:url("fonts/does-not-exist.ttf") format("truetype")}@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font-family:"Does Exist",Helvetica,Arial,sans-serif}', + '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font-family:"Does Exist",Helvetica,Arial,sans-serif}' ); test( - 'should work with the font shorthand', - passthroughCSS, - '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font: 10px/1.5 "Does Exist",Helvetica,Arial,sans-serif}' + 'should work with the font shorthand', + passthroughCSS, + '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font: 10px/1.5 "Does Exist",Helvetica,Arial,sans-serif}' ); test( - 'should normalize fonts', - passthroughCSS, - '@font-face {font-family:"Does Exist";src:url("fonts/does-exist.ttf") format("truetype")}body{font-family:Does Exist}', + 'should normalize fonts', + passthroughCSS, + '@font-face {font-family:"Does Exist";src:url("fonts/does-exist.ttf") format("truetype")}body{font-family:Does Exist}', ); test( - 'should work with mixed quote styles', - passthroughCSS, - '@font-face {font-family:"Does Exist";src:url("fonts/does-exist.ttf") format("truetype")}@font-face {font-family:\'Does Exist 2\';src:url("fonts/does-exist.ttf") format("truetype")}body{font-family: \'Does Exist\'; font: 10px Does\\ Exist\\ 2}' + 'should work with mixed quote styles', + passthroughCSS, + '@font-face {font-family:"Does Exist";src:url("fonts/does-exist.ttf") format("truetype")}@font-face {font-family:\'Does Exist 2\';src:url("fonts/does-exist.ttf") format("truetype")}body{font-family: \'Does Exist\'; font: 10px Does\\ Exist\\ 2}' ); test( - 'should work spaces in font lists', - passthroughCSS, - '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")} @font-face {font-family:\'DoesExist\';src:url("fonts/does-exist.ttf") format("truetype")} body { font-family: "Does Exist", Helvetica, Arial, sans-serif; font: 10px/1.5 DoesExist, Helvetica, Arial, sans-serif }' + 'should work spaces in font lists', + passthroughCSS, + '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")} @font-face {font-family:\'DoesExist\';src:url("fonts/does-exist.ttf") format("truetype")} body { font-family: "Does Exist", Helvetica, Arial, sans-serif; font: 10px/1.5 DoesExist, Helvetica, Arial, sans-serif }' ); test( - 'should work with weird font names', - passthroughCSS, - '@font-face {font-family:"ൠ😳ฬ𝔢IяĎ 🐉💩👍Iñtërnâtiônàlizætiøn☃💩";src: url("fonts/weird.woff") format("truetype")}body {font-family: "ൠ😳ฬ𝔢IяĎ 🐉💩👍Iñtërnâtiônàlizætiøn☃💩"}' + 'should work with weird font names', + passthroughCSS, + '@font-face {font-family:"ൠ😳ฬ𝔢IяĎ 🐉💩👍Iñtërnâtiônàlizætiøn☃💩";src: url("fonts/weird.woff") format("truetype")}body {font-family: "ൠ😳ฬ𝔢IяĎ 🐉💩👍Iñtërnâtiônàlizætiøn☃💩"}' ); test( - "should handle font shorthands that don't include a font-family", - processCSS, - '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font: italic bold 10px/1.5}', - 'body{font: italic bold 10px/1.5}' + "should handle font shorthands that don't include a font-family", + processCSS, + '@font-face {font-family:"Does Exist";src: url("fonts/does-exist.ttf") format("truetype")}body{font: italic bold 10px/1.5}', + 'body{font: italic bold 10px/1.5}' ); test( - 'should remove font faces if they have no font-family property', - processCSS, - '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', - '' + 'should remove font faces if they have no font-family property', + processCSS, + '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', + '' ); test( - 'should not remove fonts used with a different casing', - passthroughCSS, - '@font-face {font-family:"DoEs ExIst";src: url("fonts/does-exist.ttf") format("truetype")}body{font: 10px/1.5 "does exisT",Helvetica,Arial,sans-serif}' + 'should not remove fonts used with a different casing', + passthroughCSS, + '@font-face {font-family:"DoEs ExIst";src: url("fonts/does-exist.ttf") format("truetype")}body{font: 10px/1.5 "does exisT",Helvetica,Arial,sans-serif}' ); test( - 'shouldn\'t remove font fames', - processCSS, - [ - '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', - '@keyframes {0%{opacity:0}to{opacity:1}}', - '@counter-style custom{system:extends decimal;suffix:"> "}', - ].join(''), + "shouldn't remove font fames", + processCSS, + [ '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', - {fontFace: false} + '@keyframes {0%{opacity:0}to{opacity:1}}', + '@counter-style custom{system:extends decimal;suffix:"> "}', + ].join(''), + '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', + { fontFace: false } ); test( - 'shouldn\'t remove keyframes if they have no identifier', - processCSS, - [ - '@keyframes {0%{opacity:0}to{opacity:1}}', - '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', - '@counter-style custom{system:extends decimal;suffix:"> "}', - ].join(''), + "shouldn't remove keyframes if they have no identifier", + processCSS, + [ '@keyframes {0%{opacity:0}to{opacity:1}}', - {keyframes: false} + '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', + '@counter-style custom{system:extends decimal;suffix:"> "}', + ].join(''), + '@keyframes {0%{opacity:0}to{opacity:1}}', + { keyframes: false } ); test( - 'shouldn\'t remove unused counter styles', - processCSS, - [ - '@counter-style custom{system:extends decimal;suffix:"> "}', - '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', - '@keyframes {0%{opacity:0}to{opacity:1}}', - ].join(''), + "shouldn't remove unused counter styles", + processCSS, + [ '@counter-style custom{system:extends decimal;suffix:"> "}', - {counterStyle: false} + '@font-face {src:url("fonts/does-not-exist.ttf") format("truetype")}', + '@keyframes {0%{opacity:0}to{opacity:1}}', + ].join(''), + '@counter-style custom{system:extends decimal;suffix:"> "}', + { counterStyle: false } ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-discard-unused/src/__tests__/namespace.js b/packages/postcss-discard-unused/src/__tests__/namespace.js index 82f029668..ee136cfa9 100644 --- a/packages/postcss-discard-unused/src/__tests__/namespace.js +++ b/packages/postcss-discard-unused/src/__tests__/namespace.js @@ -1,50 +1,45 @@ import test from 'ava'; import plugin from '..'; -import {processCSSFactory} from '../../../../util/testHelpers'; +import { processCSSFactory } from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should remove unused prefixed namespace', - processCSS, - '@namespace svg url(http://www.w3.org/2000/svg);a{color:blue}', - 'a{color:blue}' + 'should remove unused prefixed namespace', + processCSS, + '@namespace svg url(http://www.w3.org/2000/svg);a{color:blue}', + 'a{color:blue}' ); -test( - 'should remove invalid namespace', - processCSS, - '@namespace', - '' -); +test('should remove invalid namespace', processCSS, '@namespace', ''); test( - 'shouldn\'t remove default namespace', - passthroughCSS, - '@namespace url(http://www.w3.org/2000/svg)' + "shouldn't remove default namespace", + passthroughCSS, + '@namespace url(http://www.w3.org/2000/svg)' ); test( - 'shouldn\'t remove used prefixed namespace', - passthroughCSS, - '@namespace svg url(http://www.w3.org/2000/svg);svg|a{color:blue}' + "shouldn't remove used prefixed namespace", + passthroughCSS, + '@namespace svg url(http://www.w3.org/2000/svg);svg|a{color:blue}' ); test( - 'shouldn\'t remove prefixed namespace in case of universal selector', - passthroughCSS, - '@namespace svg url(http://www.w3.org/2000/svg);*|a{color:blue}' + "shouldn't remove prefixed namespace in case of universal selector", + passthroughCSS, + '@namespace svg url(http://www.w3.org/2000/svg);*|a{color:blue}' ); test( - `shouldn't remove when namespace is used in attribute selector`, - passthroughCSS, - `@namespace xlink url('http://www.w3.org/1999/xlink');svg:hover use[xlink|href*=facebook]{fill:blue}` + `shouldn't remove when namespace is used in attribute selector`, + passthroughCSS, + `@namespace xlink url('http://www.w3.org/1999/xlink');svg:hover use[xlink|href*=facebook]{fill:blue}` ); test( - 'shouldn\'t remove unused prefixed namespace', - passthroughCSS, - '@namespace svg url(http://www.w3.org/2000/svg)', - {namespace: false} + "shouldn't remove unused prefixed namespace", + passthroughCSS, + '@namespace svg url(http://www.w3.org/2000/svg)', + { namespace: false } ); diff --git a/packages/postcss-discard-unused/src/index.js b/packages/postcss-discard-unused/src/index.js index a8d3ef827..442b3f6cc 100644 --- a/packages/postcss-discard-unused/src/index.js +++ b/packages/postcss-discard-unused/src/index.js @@ -1,118 +1,140 @@ import uniqs from 'uniqs'; -import {list, plugin} from 'postcss'; +import { list, plugin } from 'postcss'; import selectorParser from 'postcss-selector-parser'; import parseFontNames from './parseFontNames'; -const {comma, space} = list; +const { comma, space } = list; const atrule = 'atrule'; const decl = 'decl'; const rule = 'rule'; -function addValues (cache, {value}) { - return comma(value).reduce((memo, val) => [...memo, ...space(val)], cache); +function addValues(cache, { value }) { + return comma(value).reduce((memo, val) => [...memo, ...space(val)], cache); } -function filterAtRule ({atRules, values}) { - values = uniqs(values); - atRules.forEach(node => { - const hasAtRule = values.some(value => value === node.params); - if (!hasAtRule) { - node.remove(); - } - }); +function filterAtRule({ atRules, values }) { + values = uniqs(values); + atRules.forEach((node) => { + const hasAtRule = values.some((value) => value === node.params); + + if (!hasAtRule) { + node.remove(); + } + }); } -function filterNamespace ({atRules, rules}) { - rules = uniqs(rules); - atRules.forEach(atRule => { - const {0: param, length: len} = atRule.params.split(' ').filter(Boolean); - if (len === 1) { - return; - } - const hasRule = rules.some(r => r === param || r === '*'); - if (!hasRule) { - atRule.remove(); - } - }); +function filterNamespace({ atRules, rules }) { + rules = uniqs(rules); + atRules.forEach((atRule) => { + const { 0: param, length: len } = atRule.params.split(' ').filter(Boolean); + + if (len === 1) { + return; + } + + const hasRule = rules.some((r) => r === param || r === '*'); + + if (!hasRule) { + atRule.remove(); + } + }); } // fonts have slightly different logic -function filterFont ({atRules, values}) { - values = uniqs(values); - atRules.forEach(r => { - const fontFamilyRule = r.nodes.find(({prop}) => prop === 'font-family'); - const fontNames = fontFamilyRule && parseFontNames(fontFamilyRule); - // Discard the @font-face if it has no font-family rule or if it is unused - if (!fontFamilyRule || !fontNames.some(fontName => values.includes(fontName))) { - r.remove(); +function filterFont({ atRules, values }) { + values = uniqs(values); + atRules.forEach((r) => { + const fontFamilyRule = r.nodes.find(({ prop }) => prop === 'font-family'); + const fontNames = fontFamilyRule && parseFontNames(fontFamilyRule); + // Discard the @font-face if it has no font-family rule or if it is unused + if ( + !fontFamilyRule || + !fontNames.some((fontName) => values.includes(fontName)) + ) { + r.remove(); + } + }); +} + +export default plugin('postcss-discard-unused', (opts) => { + const { fontFace, counterStyle, keyframes, namespace } = Object.assign( + {}, + { + fontFace: true, + counterStyle: true, + keyframes: true, + namespace: true, + }, + opts + ); + return (css) => { + const counterStyleCache = { atRules: [], values: [] }; + const keyframesCache = { atRules: [], values: [] }; + const namespaceCache = { atRules: [], rules: [] }; + const fontCache = { atRules: [], values: [] }; + + css.walk((node) => { + const { type, prop, selector, name } = node; + + if (type === rule && namespace && ~selector.indexOf('|')) { + if (~selector.indexOf('[')) { + // Attribute selector, so we should parse further. + selectorParser((ast) => { + ast.walkAttributes(({ namespace: ns }) => { + namespaceCache.rules = namespaceCache.rules.concat(ns); + }); + }).process(selector); + } else { + // Use a simple split function for the namespace + namespaceCache.rules = namespaceCache.rules.concat( + selector.split('|')[0] + ); } + return; + } + + if (type === decl) { + if (counterStyle && /list-style|system/.test(prop)) { + counterStyleCache.values = addValues(counterStyleCache.values, node); + } + + if ( + fontFace && + node.parent.type === rule && + /font(|-family)/.test(prop) + ) { + fontCache.values.push(...parseFontNames(node)); + } + + if (keyframes && /animation/.test(prop)) { + keyframesCache.values = addValues(keyframesCache.values, node); + } + + return; + } + + if (type === atrule) { + if (counterStyle && /counter-style/.test(name)) { + counterStyleCache.atRules.push(node); + } + if (fontFace && name === 'font-face' && node.nodes) { + fontCache.atRules.push(node); + } + if (keyframes && /keyframes/.test(name)) { + keyframesCache.atRules.push(node); + } + if (namespace && name === 'namespace') { + namespaceCache.atRules.push(node); + } + + return; + } }); -} -export default plugin('postcss-discard-unused', opts => { - const {fontFace, counterStyle, keyframes, namespace} = Object.assign({}, { - fontFace: true, - counterStyle: true, - keyframes: true, - namespace: true, - }, opts); - return css => { - const counterStyleCache = {atRules: [], values: []}; - const keyframesCache = {atRules: [], values: []}; - const namespaceCache = {atRules: [], rules: []}; - const fontCache = {atRules: [], values: []}; - css.walk(node => { - const {type, prop, selector, name} = node; - if (type === rule && namespace && ~selector.indexOf('|')) { - if (~selector.indexOf('[')) { - // Attribute selector, so we should parse further. - selectorParser(ast => { - ast.walkAttributes(({namespace: ns}) => { - namespaceCache.rules = namespaceCache.rules.concat( - ns - ); - }); - }).process(selector); - } else { - // Use a simple split function for the namespace - namespaceCache.rules = namespaceCache.rules.concat( - selector.split('|')[0] - ); - } - return; - } - if (type === decl) { - if (counterStyle && /list-style|system/.test(prop)) { - counterStyleCache.values = addValues(counterStyleCache.values, node); - } - if (fontFace && node.parent.type === rule && /font(|-family)/.test(prop)) { - fontCache.values.push(...parseFontNames(node)); - } - if (keyframes && /animation/.test(prop)) { - keyframesCache.values = addValues(keyframesCache.values, node); - } - return; - } - if (type === atrule) { - if (counterStyle && /counter-style/.test(name)) { - counterStyleCache.atRules.push(node); - } - if (fontFace && name === 'font-face' && node.nodes) { - fontCache.atRules.push(node); - } - if (keyframes && /keyframes/.test(name)) { - keyframesCache.atRules.push(node); - } - if (namespace && name === 'namespace') { - namespaceCache.atRules.push(node); - } - return; - } - }); - counterStyle && filterAtRule(counterStyleCache); - fontFace && filterFont(fontCache); - keyframes && filterAtRule(keyframesCache); - namespace && filterNamespace(namespaceCache); - }; + counterStyle && filterAtRule(counterStyleCache); + fontFace && filterFont(fontCache); + keyframes && filterAtRule(keyframesCache); + namespace && filterNamespace(namespaceCache); + }; }); diff --git a/packages/postcss-discard-unused/src/parseFontNames.js b/packages/postcss-discard-unused/src/parseFontNames.js index f6ece6b29..ff65c1702 100644 --- a/packages/postcss-discard-unused/src/parseFontNames.js +++ b/packages/postcss-discard-unused/src/parseFontNames.js @@ -1,38 +1,37 @@ import valueParser from 'postcss-value-parser'; -function normalizeFontName (fontName) { - return fontName.toLowerCase().replace(/\\ /g, ' '); +function normalizeFontName(fontName) { + return fontName.toLowerCase().replace(/\\ /g, ' '); } -function parseFontNames (node) { - const parsed = valueParser(node.value); - if (node.prop === 'font') { - // The first property after the last unescaped/unquoted space is the font-family - const lastSpaceIndex = parsed.nodes.reduce( - (prev, {type}, i) => type === 'space' ? i : prev, - -1 - ); - const fontFamilyNodes = parsed.nodes.slice(lastSpaceIndex + 1); - return fontFamilyNodes - .filter(({type}) => type === 'word' || type === 'string') - .map(({value}) => normalizeFontName(value)); +function parseFontNames(node) { + const parsed = valueParser(node.value); + if (node.prop === 'font') { + // The first property after the last unescaped/unquoted space is the font-family + const lastSpaceIndex = parsed.nodes.reduce( + (prev, { type }, i) => (type === 'space' ? i : prev), + -1 + ); + const fontFamilyNodes = parsed.nodes.slice(lastSpaceIndex + 1); + return fontFamilyNodes + .filter(({ type }) => type === 'word' || type === 'string') + .map(({ value }) => normalizeFontName(value)); + } + let joinPrev; + return parsed.nodes.reduce((fonts, { type, value }) => { + if (type === 'space') { + joinPrev = true; + fonts[fonts.length - 1] += value; + } else if (type === 'word' || type === 'string') { + if (joinPrev) { + fonts[fonts.length - 1] += normalizeFontName(value); + joinPrev = false; + } else { + return [...fonts, normalizeFontName(value)]; + } } - let joinPrev; - return parsed.nodes - .reduce((fonts, {type, value}) => { - if (type === 'space') { - joinPrev = true; - fonts[fonts.length - 1] += value; - } else if (type === 'word' || type === 'string') { - if (joinPrev) { - fonts[fonts.length - 1] += normalizeFontName(value); - joinPrev = false; - } else { - return [...fonts, normalizeFontName(value)]; - } - } - return fonts; - }, []); + return fonts; + }, []); } export default parseFontNames; diff --git a/packages/postcss-merge-idents/src/__tests__/index.js b/packages/postcss-merge-idents/src/__tests__/index.js index 1d042becc..e0d290034 100644 --- a/packages/postcss-merge-idents/src/__tests__/index.js +++ b/packages/postcss-merge-idents/src/__tests__/index.js @@ -1,202 +1,201 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should merge keyframe identifiers', - processCSS, - '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}', - '@keyframes b{0%{color:#fff}to{color:#000}}' + 'should merge keyframe identifiers', + processCSS, + '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}', + '@keyframes b{0%{color:#fff}to{color:#000}}' ); test( - 'should merge keyframe identifiers (2)', - processCSS, - '@keyframes a{0%{color:#fff}to{color:#000}}@KEYFRAMES b{0%{color:#fff}to{color:#000}}', - '@KEYFRAMES b{0%{color:#fff}to{color:#000}}' + 'should merge keyframe identifiers (2)', + processCSS, + '@keyframes a{0%{color:#fff}to{color:#000}}@KEYFRAMES b{0%{color:#fff}to{color:#000}}', + '@KEYFRAMES b{0%{color:#fff}to{color:#000}}' ); test( - 'should merge multiple keyframe identifiers', - processCSS, - '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}@keyframes c{0%{color:#fff}to{color:#000}}', - '@keyframes c{0%{color:#fff}to{color:#000}}' + 'should merge multiple keyframe identifiers', + processCSS, + '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}@keyframes c{0%{color:#fff}to{color:#000}}', + '@keyframes c{0%{color:#fff}to{color:#000}}' ); test( - 'should update relevant animation declarations', - processCSS, - '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}div{animation:a .2s ease}', - '@keyframes b{0%{color:#fff}to{color:#000}}div{animation:b .2s ease}' + 'should update relevant animation declarations', + processCSS, + '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}div{animation:a .2s ease}', + '@keyframes b{0%{color:#fff}to{color:#000}}div{animation:b .2s ease}' ); test( - 'should update relevant animation declarations (2)', - processCSS, - '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}div{ANIMATION:a .2s ease}', - '@keyframes b{0%{color:#fff}to{color:#000}}div{ANIMATION:b .2s ease}' + 'should update relevant animation declarations (2)', + processCSS, + '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}div{ANIMATION:a .2s ease}', + '@keyframes b{0%{color:#fff}to{color:#000}}div{ANIMATION:b .2s ease}' ); test( - 'should update relevant animation declarations (2)', - processCSS, - '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}@keyframes c{0%{color:#fff}to{color:#000}}div{animation:a .2s ease}', - '@keyframes c{0%{color:#fff}to{color:#000}}div{animation:c .2s ease}' + 'should update relevant animation declarations (2)', + processCSS, + '@keyframes a{0%{color:#fff}to{color:#000}}@keyframes b{0%{color:#fff}to{color:#000}}@keyframes c{0%{color:#fff}to{color:#000}}div{animation:a .2s ease}', + '@keyframes c{0%{color:#fff}to{color:#000}}div{animation:c .2s ease}' ); test( - 'should not merge vendor prefixed keyframes', - passthroughCSS, - '@-webkit-keyframes a{0%{color:#fff}to{color:#000}}@keyframes a{0%{color:#fff}to{color:#000}}' + 'should not merge vendor prefixed keyframes', + passthroughCSS, + '@-webkit-keyframes a{0%{color:#fff}to{color:#000}}@keyframes a{0%{color:#fff}to{color:#000}}' ); test( - 'should merge duplicated keyframes with the same name', - processCSS, - '@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{opacity:1}to{opacity:0}}', - '@keyframes a{0%{opacity:1}to{opacity:0}}' + 'should merge duplicated keyframes with the same name', + processCSS, + '@keyframes a{0%{opacity:1}to{opacity:0}}@keyframes a{0%{opacity:1}to{opacity:0}}', + '@keyframes a{0%{opacity:1}to{opacity:0}}' ); test( - 'should merge duplicated counter styles with the same name', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style a{system:extends decimal;suffix:"> "}', - '@counter-style a{system:extends decimal;suffix:"> "}' + 'should merge duplicated counter styles with the same name', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style a{system:extends decimal;suffix:"> "}', + '@counter-style a{system:extends decimal;suffix:"> "}' ); test( - 'should merge duplicated counter styles with the same name (2)', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@COUNTER-STYLE a{system:extends decimal;suffix:"> "}', - '@COUNTER-STYLE a{system:extends decimal;suffix:"> "}' + 'should merge duplicated counter styles with the same name (2)', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@COUNTER-STYLE a{system:extends decimal;suffix:"> "}', + '@COUNTER-STYLE a{system:extends decimal;suffix:"> "}' ); test( - 'should merge counter style identifiers', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}', - '@counter-style b{system:extends decimal;suffix:"> "}' + 'should merge counter style identifiers', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}', + '@counter-style b{system:extends decimal;suffix:"> "}' ); test( - 'should merge multiple counter style identifiers', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}@counter-style c{system:extends decimal;suffix:"> "}', - '@counter-style c{system:extends decimal;suffix:"> "}' + 'should merge multiple counter style identifiers', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}@counter-style c{system:extends decimal;suffix:"> "}', + '@counter-style c{system:extends decimal;suffix:"> "}' ); test( - 'should update relevant list style declarations', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}ol{list-style:a}', - '@counter-style b{system:extends decimal;suffix:"> "}ol{list-style:b}' + 'should update relevant list style declarations', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}ol{list-style:a}', + '@counter-style b{system:extends decimal;suffix:"> "}ol{list-style:b}' ); test( - 'should update relevant list style declarations (2)', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}@counter-style c{system:extends decimal;suffix:"> "}ol{list-style:a}', - '@counter-style c{system:extends decimal;suffix:"> "}ol{list-style:c}' + 'should update relevant list style declarations (2)', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}@counter-style c{system:extends decimal;suffix:"> "}ol{list-style:a}', + '@counter-style c{system:extends decimal;suffix:"> "}ol{list-style:c}' ); test( - 'should update relevant list style declarations (3)', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}ol{LIST-STYLE:a}', - '@counter-style b{system:extends decimal;suffix:"> "}ol{LIST-STYLE:b}' + 'should update relevant list style declarations (3)', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends decimal;suffix:"> "}ol{LIST-STYLE:a}', + '@counter-style b{system:extends decimal;suffix:"> "}ol{LIST-STYLE:b}' ); test( - 'should update relevant system declarations', - processCSS, - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends a;suffix:"> "}@counter-style c{system:extends a;suffix:"> "}ol{list-style:c}', - '@counter-style a{system:extends decimal;suffix:"> "}@counter-style c{system:extends a;suffix:"> "}ol{list-style:c}' + 'should update relevant system declarations', + processCSS, + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style b{system:extends a;suffix:"> "}@counter-style c{system:extends a;suffix:"> "}ol{list-style:c}', + '@counter-style a{system:extends decimal;suffix:"> "}@counter-style c{system:extends a;suffix:"> "}ol{list-style:c}' ); test( - 'should not output JS functions', - passthroughCSS, - '.ui.indeterminate.loader:after{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}' + 'should not output JS functions', + passthroughCSS, + '.ui.indeterminate.loader:after{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}' ); test( - 'should handle duplicated definitions', - processCSS, - [ - '.checkbox input[type=checkbox]:checked + .checkbox-material:before{-webkit-animation:rippleOn 500ms;-o-animation:rippleOn 500ms;animation:rippleOn 500ms}', - '.checkbox input[type=checkbox]:checked + .checkbox-material .check:after{-webkit-animation:rippleOn 500ms forwards;-o-animation:rippleOn 500ms forwards;animation:rippleOn 500ms forwards}', - '@-webkit-keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@-o-keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@-webkit-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@-o-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - ].join(''), - [ - '.checkbox input[type=checkbox]:checked + .checkbox-material:before{-webkit-animation:rippleOff 500ms;-o-animation:rippleOff 500ms;animation:rippleOff 500ms}', - '.checkbox input[type=checkbox]:checked + .checkbox-material .check:after{-webkit-animation:rippleOff 500ms forwards;-o-animation:rippleOff 500ms forwards;animation:rippleOff 500ms forwards}', - '@-webkit-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@-o-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - '@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', - ].join('') + 'should handle duplicated definitions', + processCSS, + [ + '.checkbox input[type=checkbox]:checked + .checkbox-material:before{-webkit-animation:rippleOn 500ms;-o-animation:rippleOn 500ms;animation:rippleOn 500ms}', + '.checkbox input[type=checkbox]:checked + .checkbox-material .check:after{-webkit-animation:rippleOn 500ms forwards;-o-animation:rippleOn 500ms forwards;animation:rippleOn 500ms forwards}', + '@-webkit-keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@-o-keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@-webkit-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@-o-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@keyframes rippleOn{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + ].join(''), + [ + '.checkbox input[type=checkbox]:checked + .checkbox-material:before{-webkit-animation:rippleOff 500ms;-o-animation:rippleOff 500ms;animation:rippleOff 500ms}', + '.checkbox input[type=checkbox]:checked + .checkbox-material .check:after{-webkit-animation:rippleOff 500ms forwards;-o-animation:rippleOff 500ms forwards;animation:rippleOff 500ms forwards}', + '@-webkit-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@-o-keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + '@keyframes rippleOff{0%{opacity:0}50%{opacity:0.2}100%{opacity:0}}', + ].join('') ); test( - 'should handle duplication within media queries', - passthroughCSS, - [ - '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', - '@media (max-width:400px){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', - '.spin{animation:1s spin infinite linear}', - ].join('') + 'should handle duplication within media queries', + passthroughCSS, + [ + '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', + '@media (max-width:400px){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', + '.spin{animation:1s spin infinite linear}', + ].join('') ); test( - 'should handle duplication within supports rules', - passthroughCSS, - [ - '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', - '@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', - '.spin{animation:1s spin infinite linear}', - ].join('') + 'should handle duplication within supports rules', + passthroughCSS, + [ + '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', + '@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', + '.spin{animation:1s spin infinite linear}', + ].join('') ); test( - 'should handle duplication within supports rules & media queries', - passthroughCSS, - [ - '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', - '@media (max-width:400px){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', - '@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', - '.spin{animation:1s spin infinite linear}', - ].join('') + 'should handle duplication within supports rules & media queries', + passthroughCSS, + [ + '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', + '@media (max-width:400px){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', + '@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', + '.spin{animation:1s spin infinite linear}', + ].join('') ); test( - 'should handle duplication within nested at-rules', - passthroughCSS, - [ - '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', - '@media (max-width:400px){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', - '@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', - '@media (max-width: 400px){@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}}', - '.spin{animation:1s spin infinite linear}', - ].join('') + 'should handle duplication within nested at-rules', + passthroughCSS, + [ + '@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}', + '@media (max-width:400px){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', + '@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}', + '@media (max-width: 400px){@supports (transform:rotate(0deg)){@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}}}', + '.spin{animation:1s spin infinite linear}', + ].join('') ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); test( - 'should not crash on potential circular references', - processCSS, - `.hi{animation:hi 2s infinite linear}@-webkit-keyframes hi{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.ho{animation:ho 2s infinite linear}@-webkit-keyframes ho{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes ho{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes hi{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}`, - `.hi{animation:hi 2s infinite linear}.ho{animation:ho 2s infinite linear}@-webkit-keyframes ho{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes hi{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}` + 'should not crash on potential circular references', + processCSS, + `.hi{animation:hi 2s infinite linear}@-webkit-keyframes hi{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.ho{animation:ho 2s infinite linear}@-webkit-keyframes ho{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes ho{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes hi{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}`, + `.hi{animation:hi 2s infinite linear}.ho{animation:ho 2s infinite linear}@-webkit-keyframes ho{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}@keyframes hi{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}` ); diff --git a/packages/postcss-merge-idents/src/index.js b/packages/postcss-merge-idents/src/index.js index 80c61f19e..73637dd6c 100644 --- a/packages/postcss-merge-idents/src/index.js +++ b/packages/postcss-merge-idents/src/index.js @@ -1,86 +1,108 @@ import has from 'has'; -import {plugin} from 'postcss'; +import { plugin } from 'postcss'; import valueParser from 'postcss-value-parser'; import sameParent from 'lerna:cssnano-util-same-parent'; -function canonical (obj) { - // Prevent potential infinite loops - let stack = 50; - return function recurse (key) { - if (has(obj, key) && obj[key] !== key && stack) { - stack --; - return recurse(obj[key]); - } - stack = 50; - return key; - }; +function canonical(obj) { + // Prevent potential infinite loops + let stack = 50; + + return function recurse(key) { + if (has(obj, key) && obj[key] !== key && stack) { + stack--; + + return recurse(obj[key]); + } + + stack = 50; + + return key; + }; } -function mergeAtRules (css, pairs) { - pairs.forEach(pair => { - pair.cache = []; - pair.replacements = []; - pair.decls = []; - pair.removals = []; - }); +function mergeAtRules(css, pairs) { + pairs.forEach((pair) => { + pair.cache = []; + pair.replacements = []; + pair.decls = []; + pair.removals = []; + }); - let relevant; - - css.walk(node => { - if (node.type === 'atrule') { - relevant = pairs.filter(pair => pair.atrule.test(node.name.toLowerCase()))[0]; - if (!relevant) { - return; - } - if (relevant.cache.length < 1) { - relevant.cache.push(node); - return; - } else { - let toString = node.nodes.toString(); - relevant.cache.forEach(cached => { - if ( - cached.name.toLowerCase() === node.name.toLowerCase() && - sameParent(cached, node) && - cached.nodes.toString() === toString - ) { - relevant.removals.push(cached); - relevant.replacements[cached.params] = node.params; - } - }); - relevant.cache.push(node); - return; - } - } - if (node.type === 'decl') { - relevant = pairs.filter(pair => pair.decl.test(node.prop.toLowerCase()))[0]; - if (!relevant) { - return; - } - relevant.decls.push(node); - } - }); + let relevant; + + css.walk((node) => { + if (node.type === 'atrule') { + relevant = pairs.filter((pair) => + pair.atrule.test(node.name.toLowerCase()) + )[0]; + + if (!relevant) { + return; + } - pairs.forEach(pair => { - let canon = canonical(pair.replacements); - pair.decls.forEach(decl => { - decl.value = valueParser(decl.value).walk(node => { - if (node.type === 'word') { - node.value = canon(node.value); - } - }).toString(); + if (relevant.cache.length < 1) { + relevant.cache.push(node); + return; + } else { + let toString = node.nodes.toString(); + + relevant.cache.forEach((cached) => { + if ( + cached.name.toLowerCase() === node.name.toLowerCase() && + sameParent(cached, node) && + cached.nodes.toString() === toString + ) { + relevant.removals.push(cached); + relevant.replacements[cached.params] = node.params; + } }); - pair.removals.forEach(cached => cached.remove()); + + relevant.cache.push(node); + + return; + } + } + + if (node.type === 'decl') { + relevant = pairs.filter((pair) => + pair.decl.test(node.prop.toLowerCase()) + )[0]; + + if (!relevant) { + return; + } + + relevant.decls.push(node); + } + }); + + pairs.forEach((pair) => { + let canon = canonical(pair.replacements); + + pair.decls.forEach((decl) => { + decl.value = valueParser(decl.value) + .walk((node) => { + if (node.type === 'word') { + node.value = canon(node.value); + } + }) + .toString(); }); + pair.removals.forEach((cached) => cached.remove()); + }); } export default plugin('postcss-merge-idents', () => { - return css => { - mergeAtRules(css, [{ - atrule: /keyframes/i, - decl: /animation/i, - }, { - atrule: /counter-style/i, - decl: /(list-style|system)/i, - }]); - }; + return (css) => { + mergeAtRules(css, [ + { + atrule: /keyframes/i, + decl: /animation/i, + }, + { + atrule: /counter-style/i, + decl: /(list-style|system)/i, + }, + ]); + }; }); diff --git a/packages/postcss-merge-longhand/src/__tests__/api.js b/packages/postcss-merge-longhand/src/__tests__/api.js index cba459fbe..2ae404e46 100644 --- a/packages/postcss-merge-longhand/src/__tests__/api.js +++ b/packages/postcss-merge-longhand/src/__tests__/api.js @@ -1,8 +1,8 @@ import test from 'ava'; import plugin from '..'; -import {name} from '../../package.json'; +import { name } from '../../package.json'; -test('should use the postcss plugin api', t => { - t.truthy(plugin().postcssVersion, 'should be able to access version'); - t.deepEqual(plugin().postcssPlugin, name, 'should be able to access name'); +test('should use the postcss plugin api', (t) => { + t.truthy(plugin().postcssVersion, 'should be able to access version'); + t.deepEqual(plugin().postcssPlugin, name, 'should be able to access name'); }); diff --git a/packages/postcss-merge-longhand/src/__tests__/borders.js b/packages/postcss-merge-longhand/src/__tests__/borders.js index 304252483..626cc3161 100644 --- a/packages/postcss-merge-longhand/src/__tests__/borders.js +++ b/packages/postcss-merge-longhand/src/__tests__/borders.js @@ -1,1121 +1,1137 @@ import test from 'ava'; import trbl from '../lib/trbl'; import plugin from '..'; -import {processCSSFactory} from '../../../../util/testHelpers'; +import { processCSSFactory } from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); -const wsc = [{ +const wsc = [ + { property: 'width', fixture: '1px', -}, { + }, + { property: 'style', fixture: 'solid', -}, { + }, + { property: 'color', fixture: 'red', -}]; - -wsc.forEach(({property, fixture}) => { - test( - `should merge to form a border-trbl-${property} definition`, - processCSS, - [ - `h1{`, - `border-${trbl[0]}-${property}:${fixture};`, - `border-${trbl[1]}-${property}:${fixture};`, - `border-${trbl[2]}-${property}:${fixture};`, - `border-${trbl[3]}-${property}:${fixture}`, - `}`, - ].join(''), - `h1{border-${property}:${fixture}}` - ); - - test( - `should merge to form a BORDER-TRBL-${property.toUpperCase()} definition`, - processCSS, - [ - `h1{`, - `BORDER-${trbl[0].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()};`, - `BORDER-${trbl[1].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()};`, - `BORDER-${trbl[2].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()};`, - `BORDER-${trbl[3].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()}`, - `}`, - ].join(''), - `h1{border-${property}:${fixture.toUpperCase()}}` - ); + }, +]; + +wsc.forEach(({ property, fixture }) => { + test( + `should merge to form a border-trbl-${property} definition`, + processCSS, + [ + `h1{`, + `border-${trbl[0]}-${property}:${fixture};`, + `border-${trbl[1]}-${property}:${fixture};`, + `border-${trbl[2]}-${property}:${fixture};`, + `border-${trbl[3]}-${property}:${fixture}`, + `}`, + ].join(''), + `h1{border-${property}:${fixture}}` + ); + + test( + `should merge to form a BORDER-TRBL-${property.toUpperCase()} definition`, + processCSS, + [ + `h1{`, + `BORDER-${trbl[0].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()};`, + `BORDER-${trbl[1].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()};`, + `BORDER-${trbl[2].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()};`, + `BORDER-${trbl[3].toUpperCase()}-${property.toUpperCase()}:${fixture.toUpperCase()}`, + `}`, + ].join(''), + `h1{border-${property}:${fixture.toUpperCase()}}` + ); }); -trbl.forEach(direction => { - const value = wsc.reduce((list, {fixture}) => [...list, fixture], []); - - test( - `should merge to form a border-${direction} definition`, - processCSS, - [ - `h1{`, - `border-${direction}-width:${value[0]};`, - `border-${direction}-style:${value[1]};`, - `border-${direction}-color:${value[2]}`, - `}`, - ].join(''), - `h1{border-${direction}:${value[0]} ${value[1]} ${value[2]}}` - ); - - test( - `should merge to form a border-${direction.toUpperCase()} definition`, - processCSS, - [ - `h1{`, - `BORDER-${direction.toUpperCase()}-WIDTH:${value[0].toUpperCase()};`, - `BORDER-${direction.toUpperCase()}-STYLE:${value[1].toUpperCase()};`, - `BORDER-${direction.toUpperCase()}-COLOR:${value[2].toUpperCase()}`, - `}`, - ].join(''), - `h1{border-${direction}:${value[0]} ${value[1]} ${value[2]}}` - ); +trbl.forEach((direction) => { + const value = wsc.reduce((list, { fixture }) => [...list, fixture], []); + + test( + `should merge to form a border-${direction} definition`, + processCSS, + [ + `h1{`, + `border-${direction}-width:${value[0]};`, + `border-${direction}-style:${value[1]};`, + `border-${direction}-color:${value[2]}`, + `}`, + ].join(''), + `h1{border-${direction}:${value[0]} ${value[1]} ${value[2]}}` + ); + + test( + `should merge to form a border-${direction.toUpperCase()} definition`, + processCSS, + [ + `h1{`, + `BORDER-${direction.toUpperCase()}-WIDTH:${value[0].toUpperCase()};`, + `BORDER-${direction.toUpperCase()}-STYLE:${value[1].toUpperCase()};`, + `BORDER-${direction.toUpperCase()}-COLOR:${value[2].toUpperCase()}`, + `}`, + ].join(''), + `h1{border-${direction}:${value[0]} ${value[1]} ${value[2]}}` + ); }); test( - 'should merge identical border values', - processCSS, - 'h1{border-top:1px solid black;border-bottom:1px solid black;border-left:1px solid black;border-right:1px solid black}', - 'h1{border:1px solid black}', + 'should merge identical border values', + processCSS, + 'h1{border-top:1px solid black;border-bottom:1px solid black;border-left:1px solid black;border-right:1px solid black}', + 'h1{border:1px solid black}' ); test( - 'should merge identical border values (uppercase)', - processCSS, - 'h1{BORDER-TOP:1px solid black;BORDER-BOTTOM:1px solid black;BORDER-LEFT:1px solid black;BORDER-RIGHT:1px solid black}', - 'h1{border:1px solid black}', + 'should merge identical border values (uppercase)', + processCSS, + 'h1{BORDER-TOP:1px solid black;BORDER-BOTTOM:1px solid black;BORDER-LEFT:1px solid black;BORDER-RIGHT:1px solid black}', + 'h1{border:1px solid black}' ); test( - 'should merge identical border values with !important', - processCSS, - 'h1{border-top:1px solid black!important;border-bottom:1px solid black!important;border-left:1px solid black!important;border-right:1px solid black!important}', - 'h1{border:1px solid black!important}' + 'should merge identical border values with !important', + processCSS, + 'h1{border-top:1px solid black!important;border-bottom:1px solid black!important;border-left:1px solid black!important;border-right:1px solid black!important}', + 'h1{border:1px solid black!important}' ); test( - 'should merge identical border values with !important (uppercase)', - processCSS, - 'h1{BORDER-TOP:1px solid black!important;BORDER-BOTTOM:1px solid black!important;BORDER-LEFT:1px solid black!important;BORDER-RIGHT:1px solid black!important}', - 'h1{border:1px solid black!important}' + 'should merge identical border values with !important (uppercase)', + processCSS, + 'h1{BORDER-TOP:1px solid black!important;BORDER-BOTTOM:1px solid black!important;BORDER-LEFT:1px solid black!important;BORDER-RIGHT:1px solid black!important}', + 'h1{border:1px solid black!important}' ); test( - 'should merge identical border values with !important 1 (uppercase)', - processCSS, - 'h1{border-top:1px solid black!IMPORTANT;border-bottom:1px solid black!IMPORTANT;border-left:1px solid black!IMPORTANT;border-right:1px solid black!IMPORTANT}', - 'h1{border:1px solid black!IMPORTANT}' + 'should merge identical border values with !important 1 (uppercase)', + processCSS, + 'h1{border-top:1px solid black!IMPORTANT;border-bottom:1px solid black!IMPORTANT;border-left:1px solid black!IMPORTANT;border-right:1px solid black!IMPORTANT}', + 'h1{border:1px solid black!IMPORTANT}' ); test( - 'should not merge identical border values with mixed !important', - passthroughCSS, - 'h1{border-top:1px solid black;border-bottom:1px solid black;border-left:1px solid black!important;border-right:1px solid black!important}' + 'should not merge identical border values with mixed !important', + passthroughCSS, + 'h1{border-top:1px solid black;border-bottom:1px solid black;border-left:1px solid black!important;border-right:1px solid black!important}' ); test( - 'should merge border values', - processCSS, - 'h1{border-color:red;border-width:1px;border-style:dashed}', - 'h1{border:1px dashed red}' + 'should merge border values', + processCSS, + 'h1{border-color:red;border-width:1px;border-style:dashed}', + 'h1{border:1px dashed red}' ); test( - 'should merge border values (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED;BORDER-WIDTH:1PX;BORDER-STYLE:DASHED}', - 'h1{border:1px dashed red}' + 'should merge border values (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED;BORDER-WIDTH:1PX;BORDER-STYLE:DASHED}', + 'h1{border:1px dashed red}' ); test( - 'should merge border values with !important', - processCSS, - 'h1{border-color:red!important;border-width:1px!important;border-style:dashed!important}', - 'h1{border:1px dashed red!important}' + 'should merge border values with !important', + processCSS, + 'h1{border-color:red!important;border-width:1px!important;border-style:dashed!important}', + 'h1{border:1px dashed red!important}' ); test( - 'should merge border values with !important (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED!IMPORTANT;BORDER-WIDTH:1PX!IMPORTANT;BORDER-STYLE:DASHED!IMPORTANT}', - 'h1{border:1px dashed red!IMPORTANT}' + 'should merge border values with !important (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED!IMPORTANT;BORDER-WIDTH:1PX!IMPORTANT;BORDER-STYLE:DASHED!IMPORTANT}', + 'h1{border:1px dashed red!IMPORTANT}' ); test( - 'should merge border values with identical values for all sides', - processCSS, - 'h1{border-color:red red red red;border-width:1px 1px 1px 1px;border-style:solid solid solid solid}', - 'h1{border:1px solid red}' + 'should merge border values with identical values for all sides', + processCSS, + 'h1{border-color:red red red red;border-width:1px 1px 1px 1px;border-style:solid solid solid solid}', + 'h1{border:1px solid red}' ); test( - 'should merge border values with identical values for all sides (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED RED RED RED;BORDER-WIDTH:1PX 1PX 1PX 1PX;BORDER-STYLE:SOLID SOLID SOLID SOLID}', - 'h1{border:1px solid red}' + 'should merge border values with identical values for all sides (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED RED RED RED;BORDER-WIDTH:1PX 1PX 1PX 1PX;BORDER-STYLE:SOLID SOLID SOLID SOLID}', + 'h1{border:1px solid red}' ); test( - 'should merge border value shorthands', - processCSS, - 'h1{border-color:red blue red blue;border-style:solid;border-width:10px 20px 10px 20px}', - 'h1{border-color:red blue;border-style:solid;border-width:10px 20px}' + 'should merge border value shorthands', + processCSS, + 'h1{border-color:red blue red blue;border-style:solid;border-width:10px 20px 10px 20px}', + 'h1{border-color:red blue;border-style:solid;border-width:10px 20px}' ); test( - 'should merge border value shorthands (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED BLUE RED BLUE;BORDER-STYLE:SOLID;BORDER-WIDTH:10PX 20PX 10PX 20PX}', - 'h1{border-color:red blue;border-style:solid;border-width:10px 20px}' + 'should merge border value shorthands (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED BLUE RED BLUE;BORDER-STYLE:SOLID;BORDER-WIDTH:10PX 20PX 10PX 20PX}', + 'h1{border-color:red blue;border-style:solid;border-width:10px 20px}' ); test( - 'should not merge border values with mixed !important', - passthroughCSS, - 'h1{border-color:red;border-width:1px!important;border-style:dashed!important}' + 'should not merge border values with mixed !important', + passthroughCSS, + 'h1{border-color:red;border-width:1px!important;border-style:dashed!important}' ); test( - 'should not merge border values with mixed !important (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED;BORDER-WIDTH:1PX!IMPORTANT;BORDER-STYLE:DASHED!IMPORTANT}', - 'h1{border-color:RED;border-width:1PX!IMPORTANT;border-style:DASHED!IMPORTANT}', + 'should not merge border values with mixed !important (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED;BORDER-WIDTH:1PX!IMPORTANT;BORDER-STYLE:DASHED!IMPORTANT}', + 'h1{border-color:RED;border-width:1PX!IMPORTANT;border-style:DASHED!IMPORTANT}' ); test( - 'should not merge border values with more than 3 values', - passthroughCSS, - 'h1{border-color:red;border-style:dashed;border-width:1px 5px}' + 'should not merge border values with more than 3 values', + passthroughCSS, + 'h1{border-color:red;border-style:dashed;border-width:1px 5px}' ); test( - 'should not merge border values with more than 3 values (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED;BORDER-STYLE:DASHED;BORDER-WIDTH:1PX 5PX}', - 'h1{border-color:red;border-style:dashed;border-width:1px 5px}' + 'should not merge border values with more than 3 values (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED;BORDER-STYLE:DASHED;BORDER-WIDTH:1PX 5PX}', + 'h1{border-color:red;border-style:dashed;border-width:1px 5px}' ); test( - 'should not merge rules with the inherit keyword', - processCSS, - 'h1{border-width:3px;border-style:solid;border-color:inherit}', - 'h1{border:3px solid;border-color:inherit}' + 'should not merge rules with the inherit keyword', + processCSS, + 'h1{border-width:3px;border-style:solid;border-color:inherit}', + 'h1{border:3px solid;border-color:inherit}' ); test( - 'should not merge rules with the inherit keyword (uppercase)', - processCSS, - 'h1{BORDER-WIDTH:3PX;BORDER-STYLE:SOLID;BORDER-COLOR:INHERIT}', - 'h1{border:3px solid;BORDER-COLOR:INHERIT}' + 'should not merge rules with the inherit keyword (uppercase)', + processCSS, + 'h1{BORDER-WIDTH:3PX;BORDER-STYLE:SOLID;BORDER-COLOR:INHERIT}', + 'h1{border:3px solid;BORDER-COLOR:INHERIT}' ); test( - 'should not crash on comments', - processCSS, - 'h1{\n border-width:3px;/* 1 */\n border-style:solid;/* 2 */\n border-color:red;/* 3 */}', - 'h1{/* 1 *//* 2 */\n border:3px solid red;/* 3 */}' + 'should not crash on comments', + processCSS, + 'h1{\n border-width:3px;/* 1 */\n border-style:solid;/* 2 */\n border-color:red;/* 3 */}', + 'h1{/* 1 *//* 2 */\n border:3px solid red;/* 3 */}' ); test( - 'should not convert border: 0 to border-width: 0', - passthroughCSS, - 'h1{border:none}' + 'should not convert border: 0 to border-width: 0', + passthroughCSS, + 'h1{border:none}' ); test( - 'should not convert border: 0 to border-width: 0 (uppercase)', - processCSS, - 'h1{BORDER:none}', - 'h1{border:none}', + 'should not convert border: 0 to border-width: 0 (uppercase)', + processCSS, + 'h1{BORDER:none}', + 'h1{border:none}' ); test( - 'should not merge border-left values with mixed !important', - passthroughCSS, - 'h1{border-left-color:red;border-left-width:1px!important;border-left-style:dashed!important}' + 'should not merge border-left values with mixed !important', + passthroughCSS, + 'h1{border-left-color:red;border-left-width:1px!important;border-left-style:dashed!important}' ); test( - 'should not merge border-left values with mixed !important (uppercase)', - passthroughCSS, - 'h1{BORDER-LEFT-COLOR:RED;BORDER-LEFT-WIDTH:1PX!IMPORTANT;BORDER-LEFT-STYLE:DASHED!IMPORTANT}' + 'should not merge border-left values with mixed !important (uppercase)', + passthroughCSS, + 'h1{BORDER-LEFT-COLOR:RED;BORDER-LEFT-WIDTH:1PX!IMPORTANT;BORDER-LEFT-STYLE:DASHED!IMPORTANT}' ); test( - 'should minimize default border values', - processCSS, - 'h1{border:medium none currentColor}', - 'h1{border:none}' + 'should minimize default border values', + processCSS, + 'h1{border:medium none currentColor}', + 'h1{border:none}' ); test( - 'should minimize default border values (uppercase)', - processCSS, - 'h1{BORDER:medium none currentColor}', - 'h1{border:none}' + 'should minimize default border values (uppercase)', + processCSS, + 'h1{BORDER:medium none currentColor}', + 'h1{border:none}' ); test( - 'should optimize border merging for length', - processCSS, - 'h1{border:1px solid #ddd;border-bottom:1px solid #fff}', - 'h1{border:1px solid;border-color:#ddd #ddd #fff}' + 'should optimize border merging for length', + processCSS, + 'h1{border:1px solid #ddd;border-bottom:1px solid #fff}', + 'h1{border:1px solid;border-color:#ddd #ddd #fff}' ); test( - 'should optimize border merging for length (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM:1PX SOLID #FFF}', - 'h1{border:1px solid;border-color:#ddd #ddd #fff}' + 'should optimize border merging for length (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM:1PX SOLID #FFF}', + 'h1{border:1px solid;border-color:#ddd #ddd #fff}' ); test( - 'should not mangle borders', - passthroughCSS, - 'hr{display:block;height:1px;border:none;border-top:1px solid #ddd}' + 'should not mangle borders', + passthroughCSS, + 'hr{display:block;height:1px;border:none;border-top:1px solid #ddd}' ); test( - 'should not mangle borders (uppercase)', - processCSS, - 'hr{DISPLAY:BLOCK;HEIGHT:1PX;BORDER:NONE;BORDER-TOP:1PX SOLID #DDD}', - 'hr{DISPLAY:BLOCK;HEIGHT:1PX;border:none;border-top:1px solid #ddd}' + 'should not mangle borders (uppercase)', + processCSS, + 'hr{DISPLAY:BLOCK;HEIGHT:1PX;BORDER:NONE;BORDER-TOP:1PX SOLID #DDD}', + 'hr{DISPLAY:BLOCK;HEIGHT:1PX;border:none;border-top:1px solid #ddd}' ); test( - 'Should not mangle borders (#579) (1)', - processCSS, - 'h1{border-bottom:none;border-color:red}', - 'h1{border-bottom:none;border-color:red}', + 'Should not mangle borders (#579) (1)', + processCSS, + 'h1{border-bottom:none;border-color:red}', + 'h1{border-bottom:none;border-color:red}' ); test( - 'Should not mangle borders (#579) (1) (uppercase)', - processCSS, - 'h1{BORDER-BOTTOM:NONE;BORDER-COLOR:RED}', - 'h1{border-bottom:none;border-color:red}', + 'Should not mangle borders (#579) (1) (uppercase)', + processCSS, + 'h1{BORDER-BOTTOM:NONE;BORDER-COLOR:RED}', + 'h1{border-bottom:none;border-color:red}' ); - test( - 'Should not mangle borders (#579) (2)', - processCSS, - 'h1{border:none;border-color:red}', - 'h1{border:red}', + 'Should not mangle borders (#579) (2)', + processCSS, + 'h1{border:none;border-color:red}', + 'h1{border:red}' ); test( - 'Should not mangle borders (#579) (2) (uppercase)', - processCSS, - 'h1{BORDER:NONE;BORDER-COLOR:RED}', - 'h1{border:red}', + 'Should not mangle borders (#579) (2) (uppercase)', + processCSS, + 'h1{BORDER:NONE;BORDER-COLOR:RED}', + 'h1{border:red}' ); test( - 'should use shorter equivalent rules', - processCSS, - 'h1{border:5px solid;border-color:#222 transparent transparent}', - 'h1{border:5px solid transparent;border-top-color:#222}', + 'should use shorter equivalent rules', + processCSS, + 'h1{border:5px solid;border-color:#222 transparent transparent}', + 'h1{border:5px solid transparent;border-top-color:#222}' ); test( - 'should use shorter equivalent rules (uppercase)', - processCSS, - 'h1{BORDER:5PX SOLID;BORDER-COLOR:#222 TRANSPARENT TRANSPARENT}', - 'h1{border:5px solid transparent;border-top-color:#222}', + 'should use shorter equivalent rules (uppercase)', + processCSS, + 'h1{BORDER:5PX SOLID;BORDER-COLOR:#222 TRANSPARENT TRANSPARENT}', + 'h1{border:5px solid transparent;border-top-color:#222}' ); test( - 'should merge redundant values', - processCSS, - 'h1{border-width:5px 5px 0;border-bottom-width:0}', - 'h1{border-width:5px 5px 0}' + 'should merge redundant values', + processCSS, + 'h1{border-width:5px 5px 0;border-bottom-width:0}', + 'h1{border-width:5px 5px 0}' ); test( - 'should merge redundant values (uppercase)', - processCSS, - 'h1{BORDER-WIDTH:5PX 5PX 0;BORDER-BOTTOM-WIDTH:0}', - 'h1{border-width:5PX 5PX 0}' + 'should merge redundant values (uppercase)', + processCSS, + 'h1{BORDER-WIDTH:5PX 5PX 0;BORDER-BOTTOM-WIDTH:0}', + 'h1{border-width:5PX 5PX 0}' ); test( - 'should merge redundant values (2)', - processCSS, - 'h1{border-width:5px 5px 0;border-bottom-width:10px}', - 'h1{border-width:5px 5px 10px}' + 'should merge redundant values (2)', + processCSS, + 'h1{border-width:5px 5px 0;border-bottom-width:10px}', + 'h1{border-width:5px 5px 10px}' ); test( - 'should merge redundant values (2) (uppercase)', - processCSS, - 'h1{BORDER-WIDTH:5PX 5PX 0;BORDER-BOTTOM-WIDTH:10PX}', - 'h1{border-width:5PX 5PX 10PX}' + 'should merge redundant values (2) (uppercase)', + processCSS, + 'h1{BORDER-WIDTH:5PX 5PX 0;BORDER-BOTTOM-WIDTH:10PX}', + 'h1{border-width:5PX 5PX 10PX}' ); test( - 'should merge redundant values (3)', - processCSS, - 'h1{border:1px solid #ddd;border-bottom-color:transparent}', - 'h1{border:1px solid;border-color:#ddd #ddd transparent}' + 'should merge redundant values (3)', + processCSS, + 'h1{border:1px solid #ddd;border-bottom-color:transparent}', + 'h1{border:1px solid;border-color:#ddd #ddd transparent}' ); test( - 'should merge redundant values (3) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM-COLOR:TRANSPARENT}', - 'h1{border:1px solid;border-color:#ddd #ddd transparent}' + 'should merge redundant values (3) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM-COLOR:TRANSPARENT}', + 'h1{border:1px solid;border-color:#ddd #ddd transparent}' ); test( - 'should merge redundant values (4)', - processCSS, - 'h1{border:1px solid #ddd;border-bottom-style:dotted}', - 'h1{border:1px #ddd;border-style:solid solid dotted}' + 'should merge redundant values (4)', + processCSS, + 'h1{border:1px solid #ddd;border-bottom-style:dotted}', + 'h1{border:1px #ddd;border-style:solid solid dotted}' ); test( - 'should merge redundant values (4) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM-STYLE:DOTTED}', - 'h1{border:1px #ddd;border-style:solid solid dotted}' + 'should merge redundant values (4) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM-STYLE:DOTTED}', + 'h1{border:1px #ddd;border-style:solid solid dotted}' ); test( - 'should merge redundant values (5)', - processCSS, - 'h1{border:1px solid #ddd;border-bottom-width:5px}', - 'h1{border:solid #ddd;border-width:1px 1px 5px}' + 'should merge redundant values (5)', + processCSS, + 'h1{border:1px solid #ddd;border-bottom-width:5px}', + 'h1{border:solid #ddd;border-width:1px 1px 5px}' ); test( - 'should merge redundant values (5) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM-WIDTH:5PX}', - 'h1{border:solid #ddd;border-width:1px 1px 5px}' + 'should merge redundant values (5) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #DDD;BORDER-BOTTOM-WIDTH:5PX}', + 'h1{border:solid #ddd;border-width:1px 1px 5px}' ); test( - 'should merge redundant values (6)', - processCSS, - 'h1{border-width:1px;border-top-width:none;border-left-width:none;border-style:solid;border-color:#000;}', - 'h1{border-color:#000;border-style:solid;border-width:0 1px 1px 0;}', + 'should merge redundant values (6)', + processCSS, + 'h1{border-width:1px;border-top-width:none;border-left-width:none;border-style:solid;border-color:#000;}', + 'h1{border-color:#000;border-style:solid;border-width:0 1px 1px 0;}' ); test( - 'should merge redundant values (6) (uppercase)', - processCSS, - 'h1{BORDER-WIDTH:1PX;BORDER-TOP-WIDTH:NONE;BORDER-LEFT-WIDTH:NONE;BORDER-STYLE:SOLID;BORDER-COLOR:#000;}', - 'h1{border-color:#000;border-style:solid;border-width:0 1px 1px 0;}', + 'should merge redundant values (6) (uppercase)', + processCSS, + 'h1{BORDER-WIDTH:1PX;BORDER-TOP-WIDTH:NONE;BORDER-LEFT-WIDTH:NONE;BORDER-STYLE:SOLID;BORDER-COLOR:#000;}', + 'h1{border-color:#000;border-style:solid;border-width:0 1px 1px 0;}' ); test( - 'Should not merge redundant values if declarations are of different importance (#618)', - passthroughCSS, - 'h1{border:1px solid #3060b1;border-bottom:1px solid #3060b1 !important}', + 'Should not merge redundant values if declarations are of different importance (#618)', + passthroughCSS, + 'h1{border:1px solid #3060b1;border-bottom:1px solid #3060b1 !important}' ); test( - 'Should not merge redundant values if declarations are of different importance (#618) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #3060B1;BORDER-BOTTOM:1PX SOLID #3060B1 !IMPORTANT}', - 'h1{border:1px solid #3060b1;border-bottom:1px solid #3060b1 !IMPORTANT}' + 'Should not merge redundant values if declarations are of different importance (#618) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #3060B1;BORDER-BOTTOM:1PX SOLID #3060B1 !IMPORTANT}', + 'h1{border:1px solid #3060b1;border-bottom:1px solid #3060b1 !IMPORTANT}' ); test( - 'should merge redundant border-spacing values', - processCSS, - 'h1{border-spacing:10px 10px;}', - 'h1{border-spacing:10px;}' + 'should merge redundant border-spacing values', + processCSS, + 'h1{border-spacing:10px 10px;}', + 'h1{border-spacing:10px;}' ); test( - 'should merge redundant border-spacing values (uppercase)', - processCSS, - 'h1{BORDER-SPACING:10px 10px;}', - 'h1{BORDER-SPACING:10px;}' + 'should merge redundant border-spacing values (uppercase)', + processCSS, + 'h1{BORDER-SPACING:10px 10px;}', + 'h1{BORDER-SPACING:10px;}' ); test( - 'should not merge different border-spacing values', - passthroughCSS, - 'h1{border-spacing:10px 50px;}' + 'should not merge different border-spacing values', + passthroughCSS, + 'h1{border-spacing:10px 50px;}' ); test( - 'should not merge different border-spacing values (uppercase)', - passthroughCSS, - 'h1{BORDER-SPACING:10px 50px;}' + 'should not merge different border-spacing values (uppercase)', + passthroughCSS, + 'h1{BORDER-SPACING:10px 50px;}' ); test( - 'should merge border and border-width values', - processCSS, - 'h1{border:0 solid rgba(0, 0, 0, 0.2);border-width:1px;}', - 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' + 'should merge border and border-width values', + processCSS, + 'h1{border:0 solid rgba(0, 0, 0, 0.2);border-width:1px;}', + 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' ); test( - 'should merge border and border-width values (uppercase)', - processCSS, - 'h1{BORDER:0 SOLID RGBA(0, 0, 0, 0.2);BORDER-WIDTH:1PX;}', - 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' + 'should merge border and border-width values (uppercase)', + processCSS, + 'h1{BORDER:0 SOLID RGBA(0, 0, 0, 0.2);BORDER-WIDTH:1PX;}', + 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' ); test( - 'should merge border and multiple border-*-width values', - processCSS, - 'h1{border:0 solid rgba(0, 0, 0, 0.2);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;}', - 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' + 'should merge border and multiple border-*-width values', + processCSS, + 'h1{border:0 solid rgba(0, 0, 0, 0.2);border-top-width:1px;border-right-width:1px;border-bottom-width:1px;border-left-width:1px;}', + 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' ); test( - 'should merge border and multiple border-*-width values (uppercase)', - processCSS, - 'h1{BORDER:0 SOLID RGBA(0, 0, 0, 0.2);BORDER-TOP-WIDTH:1PX;BORDER-RIGHT-WIDTH:1PX;BORDER-BOTTOM-WIDTH:1PX;BORDER-LEFT-WIDTH:1PX;}', - 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' + 'should merge border and multiple border-*-width values (uppercase)', + processCSS, + 'h1{BORDER:0 SOLID RGBA(0, 0, 0, 0.2);BORDER-TOP-WIDTH:1PX;BORDER-RIGHT-WIDTH:1PX;BORDER-BOTTOM-WIDTH:1PX;BORDER-LEFT-WIDTH:1PX;}', + 'h1{border:1px solid rgba(0, 0, 0, 0.2);}' ); test( - 'should produce the minimum css necessary', - passthroughCSS, - 'h1{border-width:none;border-top:1px solid #e1e1e1}' + 'should produce the minimum css necessary', + passthroughCSS, + 'h1{border-width:none;border-top:1px solid #e1e1e1}' ); test( - 'should produce the minimum css necessary (uppercase)', - processCSS, - 'h1{BORDER-WIDTH:NONE;BORDER-TOP:1PX SOLID #E1E1E1}', - 'h1{border-width:NONE;border-top:1px solid #e1e1e1}' + 'should produce the minimum css necessary (uppercase)', + processCSS, + 'h1{BORDER-WIDTH:NONE;BORDER-TOP:1PX SOLID #E1E1E1}', + 'h1{border-width:NONE;border-top:1px solid #e1e1e1}' ); test( - 'should produce the minimum css necessary (2)', - processCSS, - 'h1{border-color:rgba(0,0,0,.2);border-right-style:solid;border-right-width:1px}', - 'h1{border-right:1px solid;border-color:rgba(0,0,0,.2)}' + 'should produce the minimum css necessary (2)', + processCSS, + 'h1{border-color:rgba(0,0,0,.2);border-right-style:solid;border-right-width:1px}', + 'h1{border-right:1px solid;border-color:rgba(0,0,0,.2)}' ); test( - 'should produce the minimum css necessary (2) (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RGBA(0,0,0,.2);BORDER-RIGHT-STYLE:SOLID;BORDER-RIGHT-WIDTH:1PX}', - 'h1{border-right:1px solid;border-color:RGBA(0,0,0,.2)}' + 'should produce the minimum css necessary (2) (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RGBA(0,0,0,.2);BORDER-RIGHT-STYLE:SOLID;BORDER-RIGHT-WIDTH:1PX}', + 'h1{border-right:1px solid;border-color:RGBA(0,0,0,.2)}' ); test( - 'should produce the minimum css necessary (3)', - processCSS, - 'h1{border-top:0 solid transparent;border-right:4em solid transparent;border-bottom:4em solid transparent;border-left:0 solid transparent;border-right-color:inherit}', - 'h1{border-color:transparent;border-style:solid;border-width:0 4em 4em 0;border-right-color:inherit}' + 'should produce the minimum css necessary (3)', + processCSS, + 'h1{border-top:0 solid transparent;border-right:4em solid transparent;border-bottom:4em solid transparent;border-left:0 solid transparent;border-right-color:inherit}', + 'h1{border-color:transparent;border-style:solid;border-width:0 4em 4em 0;border-right-color:inherit}' ); test( - 'should produce the minimum css necessary (3) (uppercase)', - processCSS, - 'h1{BORDER-TOP:0 SOLID TRANSPARENT;BORDER-RIGHT:4EM SOLID TRANSPARENT;BORDER-BOTTOM:4EM SOLID TRANSPARENT;BORDER-LEFT:0 SOLID TRANSPARENT;BORDER-RIGHT-COLOR:INHERIT}', - 'h1{border-color:transparent;border-style:solid;border-width:0 4em 4em 0;BORDER-RIGHT-COLOR:INHERIT}' + 'should produce the minimum css necessary (3) (uppercase)', + processCSS, + 'h1{BORDER-TOP:0 SOLID TRANSPARENT;BORDER-RIGHT:4EM SOLID TRANSPARENT;BORDER-BOTTOM:4EM SOLID TRANSPARENT;BORDER-LEFT:0 SOLID TRANSPARENT;BORDER-RIGHT-COLOR:INHERIT}', + 'h1{border-color:transparent;border-style:solid;border-width:0 4em 4em 0;BORDER-RIGHT-COLOR:INHERIT}' ); test( - 'should produce the minimum css necessary (4)', - processCSS, - 'h1{border:none;border-top:1px solid #d4d4d5;border-right:1px solid #d4d4d5}', - 'h1{border:1px solid #d4d4d5;border-bottom:none;border-left:none}' + 'should produce the minimum css necessary (4)', + processCSS, + 'h1{border:none;border-top:1px solid #d4d4d5;border-right:1px solid #d4d4d5}', + 'h1{border:1px solid #d4d4d5;border-bottom:none;border-left:none}' ); test( - 'should produce the minimum css necessary (4) (uppercase)', - processCSS, - 'h1{BORDER:NONE;BORDER-TOP:1PX SOLID #D4D4D5;BORDER-RIGHT:1PX SOLID #D4D4D5}', - 'h1{border:1px solid #d4d4d5;border-bottom:none;border-left:none}' + 'should produce the minimum css necessary (4) (uppercase)', + processCSS, + 'h1{BORDER:NONE;BORDER-TOP:1PX SOLID #D4D4D5;BORDER-RIGHT:1PX SOLID #D4D4D5}', + 'h1{border:1px solid #d4d4d5;border-bottom:none;border-left:none}' ); test( - 'should produce the minimum css necessary (5)', - processCSS, - 'h1{border-spacing:50px 50px;border-top:0 solid transparent;border-right:4em solid transparent;border-bottom:4em solid transparent;border-left:0 solid transparent;border-right-color:inherit}', - 'h1{border-spacing:50px;border-color:transparent;border-style:solid;border-width:0 4em 4em 0;border-right-color:inherit}' + 'should produce the minimum css necessary (5)', + processCSS, + 'h1{border-spacing:50px 50px;border-top:0 solid transparent;border-right:4em solid transparent;border-bottom:4em solid transparent;border-left:0 solid transparent;border-right-color:inherit}', + 'h1{border-spacing:50px;border-color:transparent;border-style:solid;border-width:0 4em 4em 0;border-right-color:inherit}' ); test( - 'should produce the minimum css necessary (5) (uppercase)', - processCSS, - 'h1{BORDER-SPACING:50PX 50PX;BORDER-TOP:0 SOLID TRANSPARENT;BORDER-RIGHT:4EM SOLID TRANSPARENT;BORDER-BOTTOM:4EM SOLID TRANSPARENT;BORDER-LEFT:0 SOLID TRANSPARENT;BORDER-RIGHT-COLOR:INHERIT}', - 'h1{BORDER-SPACING:50PX;border-color:transparent;border-style:solid;border-width:0 4em 4em 0;BORDER-RIGHT-COLOR:INHERIT}' + 'should produce the minimum css necessary (5) (uppercase)', + processCSS, + 'h1{BORDER-SPACING:50PX 50PX;BORDER-TOP:0 SOLID TRANSPARENT;BORDER-RIGHT:4EM SOLID TRANSPARENT;BORDER-BOTTOM:4EM SOLID TRANSPARENT;BORDER-LEFT:0 SOLID TRANSPARENT;BORDER-RIGHT-COLOR:INHERIT}', + 'h1{BORDER-SPACING:50PX;border-color:transparent;border-style:solid;border-width:0 4em 4em 0;BORDER-RIGHT-COLOR:INHERIT}' ); test( - 'should produce the minimum css necessary (6)', - processCSS, - 'h1{border:1px solid #00d1b2;border-right:none;border-top:none}', - 'h1{border:1px solid #00d1b2;border-top:none;border-right:none}', + 'should produce the minimum css necessary (6)', + processCSS, + 'h1{border:1px solid #00d1b2;border-right:none;border-top:none}', + 'h1{border:1px solid #00d1b2;border-top:none;border-right:none}' ); test( - 'should produce the minimum css necessary (6) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #00D1B2;BORDER-RIGHT:NONE;BORDER-TOP:NONE}', - 'h1{border:1px solid #00d1b2;border-top:none;border-right:none}', + 'should produce the minimum css necessary (6) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #00D1B2;BORDER-RIGHT:NONE;BORDER-TOP:NONE}', + 'h1{border:1px solid #00d1b2;border-top:none;border-right:none}' ); test( - 'should produce the minimum css necessary (7)', - processCSS, - 'h1{border-top:none;border-right:none;border-bottom:1px solid #cacaca;border-left:none}', - 'h1{border:none;border-bottom:1px solid #cacaca}', + 'should produce the minimum css necessary (7)', + processCSS, + 'h1{border-top:none;border-right:none;border-bottom:1px solid #cacaca;border-left:none}', + 'h1{border:none;border-bottom:1px solid #cacaca}' ); test( - 'should produce the minimum css necessary (7) (uppercase)', - processCSS, - 'h1{BORDER-TOP:NONE;BORDER-RIGHT:NONE;BORDER-BOTTOM:1PX SOLID #CACACA;BORDER-LEFT:NONE}', - 'h1{border:none;border-bottom:1px solid #cacaca}', + 'should produce the minimum css necessary (7) (uppercase)', + processCSS, + 'h1{BORDER-TOP:NONE;BORDER-RIGHT:NONE;BORDER-BOTTOM:1PX SOLID #CACACA;BORDER-LEFT:NONE}', + 'h1{border:none;border-bottom:1px solid #cacaca}' ); test( - 'should produce the minimum css necessary (8)', - processCSS, - 'h1{border-top:none;border-right:none;border-bottom:none;border-left:5px}', - 'h1{border:none;border-left:5px}', + 'should produce the minimum css necessary (8)', + processCSS, + 'h1{border-top:none;border-right:none;border-bottom:none;border-left:5px}', + 'h1{border:none;border-left:5px}' ); test( - 'should produce the minimum css necessary (8) (uppercase)', - processCSS, - 'h1{BORDER-TOP:NONE;BORDER-RIGHT:NONE;BORDER-BOTTOM:NONE;BORDER-LEFT:5PX}', - 'h1{border:none;border-left:5PX}', + 'should produce the minimum css necessary (8) (uppercase)', + processCSS, + 'h1{BORDER-TOP:NONE;BORDER-RIGHT:NONE;BORDER-BOTTOM:NONE;BORDER-LEFT:5PX}', + 'h1{border:none;border-left:5PX}' ); test( - 'should produce the minimum css necessary (9)', - processCSS, - 'h1{border:medium none;border-style:solid;border-color:rgba(34, 36, 38, 0.15);border-width:0px 1px 1px 0px}', - 'h1{border:solid rgba(34, 36, 38, 0.15);border-width:0px 1px 1px 0px}' + 'should produce the minimum css necessary (9)', + processCSS, + 'h1{border:medium none;border-style:solid;border-color:rgba(34, 36, 38, 0.15);border-width:0px 1px 1px 0px}', + 'h1{border:solid rgba(34, 36, 38, 0.15);border-width:0px 1px 1px 0px}' ); test( - 'should produce the minimum css necessary (9) (uppercase)', - processCSS, - 'h1{BORDER:MEDIUM NONE;BORDER-STYLE:SOLID;BORDER-COLOR:RGBA(34, 36, 38, 0.15);BORDER-WIDTH:0PX 1PX 1PX 0PX}', - 'h1{border:solid rgba(34, 36, 38, 0.15);border-width:0px 1px 1px 0px}' + 'should produce the minimum css necessary (9) (uppercase)', + processCSS, + 'h1{BORDER:MEDIUM NONE;BORDER-STYLE:SOLID;BORDER-COLOR:RGBA(34, 36, 38, 0.15);BORDER-WIDTH:0PX 1PX 1PX 0PX}', + 'h1{border:solid rgba(34, 36, 38, 0.15);border-width:0px 1px 1px 0px}' ); test( - 'should produce the minimum css necessary (10)', - processCSS, - 'h1{border-bottom:none;border-left:1px solid transparent;border-right:1px solid transparent;border-top:2px solid transparent}', - 'h1{border:1px solid transparent;border-top:2px solid transparent;border-bottom:none}', + 'should produce the minimum css necessary (10)', + processCSS, + 'h1{border-bottom:none;border-left:1px solid transparent;border-right:1px solid transparent;border-top:2px solid transparent}', + 'h1{border:1px solid transparent;border-top:2px solid transparent;border-bottom:none}' ); test( - 'should produce the minimum css necessary (10) (uppercase)', - processCSS, - 'h1{BORDER-BOTTOM:NONE;BORDER-LEFT:1PX SOLID TRANSPARENT;BORDER-RIGHT:1PX SOLID TRANSPARENT;BORDER-TOP:2PX SOLID TRANSPARENT}', - 'h1{border:1px solid transparent;border-top:2px solid transparent;border-bottom:none}', + 'should produce the minimum css necessary (10) (uppercase)', + processCSS, + 'h1{BORDER-BOTTOM:NONE;BORDER-LEFT:1PX SOLID TRANSPARENT;BORDER-RIGHT:1PX SOLID TRANSPARENT;BORDER-TOP:2PX SOLID TRANSPARENT}', + 'h1{border:1px solid transparent;border-top:2px solid transparent;border-bottom:none}' ); test( - 'should not merge declarations with hacks', - processCSS, - 'h1{border-color:red red red red;_border-width:1px 1px 1px 1px;border-style:solid solid solid solid}', - 'h1{border-color:red;_border-width:1px 1px 1px 1px;border-style:solid}' + 'should not merge declarations with hacks', + processCSS, + 'h1{border-color:red red red red;_border-width:1px 1px 1px 1px;border-style:solid solid solid solid}', + 'h1{border-color:red;_border-width:1px 1px 1px 1px;border-style:solid}' ); test( - 'should not merge declarations with hacks (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED RED RED RED;_BORDER-WIDTH:1PX 1PX 1PX 1PX;BORDER-STYLE:SOLID SOLID SOLID SOLID}', - 'h1{border-color:RED;_BORDER-WIDTH:1PX 1PX 1PX 1PX;border-style:SOLID}' + 'should not merge declarations with hacks (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED RED RED RED;_BORDER-WIDTH:1PX 1PX 1PX 1PX;BORDER-STYLE:SOLID SOLID SOLID SOLID}', + 'h1{border-color:RED;_BORDER-WIDTH:1PX 1PX 1PX 1PX;border-style:SOLID}' ); test( - 'should not merge fallback colours', - passthroughCSS, - 'h1{border-color:#ddd;border-color:rgba(0,0,0,.15)}' + 'should not merge fallback colours', + passthroughCSS, + 'h1{border-color:#ddd;border-color:rgba(0,0,0,.15)}' ); test( - 'should not merge fallback colours (uppercase)', - processCSS, - 'h1{BORDER-COLOR:#DDD;BORDER-COLOR:RGBA(0,0,0,.15)}', - 'h1{border-color:#DDD;border-color:RGBA(0,0,0,.15)}' + 'should not merge fallback colours (uppercase)', + processCSS, + 'h1{BORDER-COLOR:#DDD;BORDER-COLOR:RGBA(0,0,0,.15)}', + 'h1{border-color:#DDD;border-color:RGBA(0,0,0,.15)}' ); test( - 'should not merge fallback colours with shorthand property', - processCSS, - 'h1{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2)}', - 'h1{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2)}' + 'should not merge fallback colours with shorthand property', + processCSS, + 'h1{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2)}', + 'h1{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2)}' ); test( - 'should not merge fallback colours with shorthand property (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #CCC;BORDER:1PX SOLID RGBA(0,0,0,.2)}', - 'h1{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2)}' + 'should not merge fallback colours with shorthand property (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #CCC;BORDER:1PX SOLID RGBA(0,0,0,.2)}', + 'h1{border:1px solid #ccc;border:1px solid rgba(0,0,0,.2)}' ); test( - 'should merge together all initial values', - processCSS, - 'h1{border-color:initial;border-width:initial;border-style:initial}', - 'h1{border:initial}' + 'should merge together all initial values', + processCSS, + 'h1{border-color:initial;border-width:initial;border-style:initial}', + 'h1{border:initial}' ); test( - 'should merge together all initial values (uppercase)', - processCSS, - 'h1{BORDER-COLOR:initial;BORDER-WIDTH:initial;BORDER-STYLE:initial}', - 'h1{border:initial}' + 'should merge together all initial values (uppercase)', + processCSS, + 'h1{BORDER-COLOR:initial;BORDER-WIDTH:initial;BORDER-STYLE:initial}', + 'h1{border:initial}' ); test( - 'should merge together all initial values 1 (uppercase)', - processCSS, - 'h1{border-color:INITIAL;border-width:INITIAL;border-style:INITIAL}', - 'h1{border:INITIAL}' + 'should merge together all initial values 1 (uppercase)', + processCSS, + 'h1{border-color:INITIAL;border-width:INITIAL;border-style:INITIAL}', + 'h1{border:INITIAL}' ); test( - 'should merge together all inherit values', - processCSS, - 'h1{border-color:inherit;border-width:inherit;border-style:inherit}', - 'h1{border:inherit}' + 'should merge together all inherit values', + processCSS, + 'h1{border-color:inherit;border-width:inherit;border-style:inherit}', + 'h1{border:inherit}' ); test( - 'should merge together all inherit values (uppercase)', - processCSS, - 'h1{BORDER-COLOR:INHERIT;BORDER-WIDTH:INHERIT;BORDER-STYLE:INHERIT}', - 'h1{border:INHERIT}' + 'should merge together all inherit values (uppercase)', + processCSS, + 'h1{BORDER-COLOR:INHERIT;BORDER-WIDTH:INHERIT;BORDER-STYLE:INHERIT}', + 'h1{border:INHERIT}' ); test( - 'should preserve nesting level', - processCSS, - 'section{h1{border-color:red;border-width:1px;border-style:solid}}', - 'section{h1{border:1px solid red}}' + 'should preserve nesting level', + processCSS, + 'section{h1{border-color:red;border-width:1px;border-style:solid}}', + 'section{h1{border:1px solid red}}' ); test( - 'should preserve nesting level (uppercase)', - processCSS, - 'section{h1{BORDER-COLOR:RED;BORDER-WIDTH:1PX;BORDER-STYLE:SOLID}}', - 'section{h1{border:1px solid red}}' + 'should preserve nesting level (uppercase)', + processCSS, + 'section{h1{BORDER-COLOR:RED;BORDER-WIDTH:1PX;BORDER-STYLE:SOLID}}', + 'section{h1{border:1px solid red}}' ); test( - 'should not merge custom properties', - passthroughCSS, - ':root{--my-border-width:2px;--my-border-style:solid;--my-border-color:#fff;}' + 'should not merge custom properties', + passthroughCSS, + ':root{--my-border-width:2px;--my-border-style:solid;--my-border-color:#fff;}' ); test( - 'should not merge custom properties (uppercase)', - passthroughCSS, - ':root{--MY-BORDER-WIDTH:2PX;--MY-BORDER-STYLE:SOLID;--MY-BORDER-COLOR:#FFF;}' + 'should not merge custom properties (uppercase)', + passthroughCSS, + ':root{--MY-BORDER-WIDTH:2PX;--MY-BORDER-STYLE:SOLID;--MY-BORDER-COLOR:#FFF;}' ); test( - 'should not merge custom properties with variables', - passthroughCSS, - ':root{--my-border-width:var(--my-border-width);--my-border-style:var(--my-border-style);--my-border-color:var(--my-border-color);}' + 'should not merge custom properties with variables', + passthroughCSS, + ':root{--my-border-width:var(--my-border-width);--my-border-style:var(--my-border-style);--my-border-color:var(--my-border-color);}' ); test( - 'should not merge custom properties with variables (uppercase)', - passthroughCSS, - ':root{--MY-BORDER-WIDTH:VAR(--MY-BORDER-WIDTH);--MY-BORDER-STYLE:VAR(--MY-BORDER-STYLE);--MY-BORDER-COLOR:VAR(--MY-BORDER-COLOR);}' + 'should not merge custom properties with variables (uppercase)', + passthroughCSS, + ':root{--MY-BORDER-WIDTH:VAR(--MY-BORDER-WIDTH);--MY-BORDER-STYLE:VAR(--MY-BORDER-STYLE);--MY-BORDER-COLOR:VAR(--MY-BORDER-COLOR);}' ); test( - 'should overwrite some border-width props and save fallbacks', - processCSS, - 'h1{border-top-width:10px;border-right-width:var(--variable);border-right-width:15px;border-bottom-width:var(--variable);border-bottom-width:20px;border-left-width:25px;border-top-width:var(--variable);border-left-width:var(--variable)}', - 'h1{border-width:10px 15px 20px 25px;border-top-width:var(--variable);border-left-width:var(--variable)}' + 'should overwrite some border-width props and save fallbacks', + processCSS, + 'h1{border-top-width:10px;border-right-width:var(--variable);border-right-width:15px;border-bottom-width:var(--variable);border-bottom-width:20px;border-left-width:25px;border-top-width:var(--variable);border-left-width:var(--variable)}', + 'h1{border-width:10px 15px 20px 25px;border-top-width:var(--variable);border-left-width:var(--variable)}' ); test( - 'should overwrite some border-width props and save fallbacks (uppercase)', - processCSS, - 'h1{BORDER-TOP-WIDTH:10PX;BORDER-RIGHT-WIDTH:VAR(--VARIABLE);BORDER-RIGHT-WIDTH:15PX;BORDER-BOTTOM-WIDTH:VAR(--VARIABLE);BORDER-BOTTOM-WIDTH:20PX;BORDER-LEFT-WIDTH:25PX;BORDER-TOP-WIDTH:VAR(--VARIABLE);BORDER-LEFT-WIDTH:VAR(--VARIABLE)}', - 'h1{border-width:10PX 15PX 20PX 25PX;BORDER-TOP-WIDTH:VAR(--VARIABLE);BORDER-LEFT-WIDTH:VAR(--VARIABLE)}' + 'should overwrite some border-width props and save fallbacks (uppercase)', + processCSS, + 'h1{BORDER-TOP-WIDTH:10PX;BORDER-RIGHT-WIDTH:VAR(--VARIABLE);BORDER-RIGHT-WIDTH:15PX;BORDER-BOTTOM-WIDTH:VAR(--VARIABLE);BORDER-BOTTOM-WIDTH:20PX;BORDER-LEFT-WIDTH:25PX;BORDER-TOP-WIDTH:VAR(--VARIABLE);BORDER-LEFT-WIDTH:VAR(--VARIABLE)}', + 'h1{border-width:10PX 15PX 20PX 25PX;BORDER-TOP-WIDTH:VAR(--VARIABLE);BORDER-LEFT-WIDTH:VAR(--VARIABLE)}' ); test( - 'save fallbacks should border-style', - processCSS, - 'h1{border-style:dotted;border-style:var(--variable)}', - 'h1{border-style:dotted;border-style:var(--variable)}' + 'save fallbacks should border-style', + processCSS, + 'h1{border-style:dotted;border-style:var(--variable)}', + 'h1{border-style:dotted;border-style:var(--variable)}' ); test( - 'save fallbacks should border-color (uppercase)', - processCSS, - 'h1{BORDER-COLOR:DOTTED;BORDER-COLOR:VAR(--VARIABLE)}', - 'h1{border-color:DOTTED;border-color:VAR(--VARIABLE)}' + 'save fallbacks should border-color (uppercase)', + processCSS, + 'h1{BORDER-COLOR:DOTTED;BORDER-COLOR:VAR(--VARIABLE)}', + 'h1{border-color:DOTTED;border-color:VAR(--VARIABLE)}' ); test( - 'should not explode border with custom properties', - passthroughCSS, - 'h1{border:var(--variable)}', + 'should not explode border with custom properties', + passthroughCSS, + 'h1{border:var(--variable)}' ); test( - 'should not explode border with custom properties (uppercase)', - passthroughCSS, - 'h1{border:VAR(--VARIABLE)}', + 'should not explode border with custom properties (uppercase)', + passthroughCSS, + 'h1{border:VAR(--VARIABLE)}' ); test( - 'should not explode border with initial properties', - passthroughCSS, - 'h1{border:initial}', + 'should not explode border with initial properties', + passthroughCSS, + 'h1{border:initial}' ); test( - 'should not explode border with initial properties (uppercase)', - passthroughCSS, - 'h1{BORDER:initial}', + 'should not explode border with initial properties (uppercase)', + passthroughCSS, + 'h1{BORDER:initial}' ); test( - 'should not explode border with initial properties 1 (uppercase)', - passthroughCSS, - 'h1{border:INITIAL}', + 'should not explode border with initial properties 1 (uppercase)', + passthroughCSS, + 'h1{border:INITIAL}' ); test( - 'should not explode border with inherit properties', - passthroughCSS, - 'h1{border:inherit}', + 'should not explode border with inherit properties', + passthroughCSS, + 'h1{border:inherit}' ); test( - 'should not explode border with inherit properties (uppercase)', - passthroughCSS, - 'h1{BORDER:inherit}', + 'should not explode border with inherit properties (uppercase)', + passthroughCSS, + 'h1{BORDER:inherit}' ); test( - 'should not explode border with inherit properties 1 (uppercase)', - passthroughCSS, - 'h1{border:INHERIT}', + 'should not explode border with inherit properties 1 (uppercase)', + passthroughCSS, + 'h1{border:INHERIT}' ); test( - 'should not explode border with unset properties', - passthroughCSS, - 'h1{border:unset}', + 'should not explode border with unset properties', + passthroughCSS, + 'h1{border:unset}' ); test( - 'should not explode border with unset properties (uppercase)', - passthroughCSS, - 'h1{BORDER:unset}', + 'should not explode border with unset properties (uppercase)', + passthroughCSS, + 'h1{BORDER:unset}' ); test( - 'should not explode border with unset properties 1 (uppercase)', - passthroughCSS, - 'h1{border:UNSET}', + 'should not explode border with unset properties 1 (uppercase)', + passthroughCSS, + 'h1{border:UNSET}' ); -trbl.forEach(direction => { - test( - `should not explode border-${direction} with custom properties`, - passthroughCSS, - `h1{border-${direction}:var(--variable)}`, - ); +trbl.forEach((direction) => { + test( + `should not explode border-${direction} with custom properties`, + passthroughCSS, + `h1{border-${direction}:var(--variable)}` + ); - test( - `should not explode border-${direction.toUpperCase()} with custom properties`, - passthroughCSS, - `h1{BORDER-${direction.toUpperCase()}:VAR(--variable)}`, - ); + test( + `should not explode border-${direction.toUpperCase()} with custom properties`, + passthroughCSS, + `h1{BORDER-${direction.toUpperCase()}:VAR(--variable)}` + ); }); test( - 'should not explode custom properties with less than two concrete sides (1)', - passthroughCSS, - 'h1{border:var(--border-width) var(--border-style) transparent}', + 'should not explode custom properties with less than two concrete sides (1)', + passthroughCSS, + 'h1{border:var(--border-width) var(--border-style) transparent}' ); test( - 'should not explode custom properties with less than two concrete sides (1) (uppercase)', - passthroughCSS, - 'h1{BORDER:VAR(--BORDER-WIDTH) VAR(--BORDER-STYLE) TRANSPARENT}', + 'should not explode custom properties with less than two concrete sides (1) (uppercase)', + passthroughCSS, + 'h1{BORDER:VAR(--BORDER-WIDTH) VAR(--BORDER-STYLE) TRANSPARENT}' ); test( - 'should not explode custom properties with less than two concrete sides (2)', - passthroughCSS, - 'h1{border:var(--border-width) solid var(--border-color)}', + 'should not explode custom properties with less than two concrete sides (2)', + passthroughCSS, + 'h1{border:var(--border-width) solid var(--border-color)}' ); test( - 'should not explode custom properties with less than two concrete sides (2) (uppercase)', - passthroughCSS, - 'h1{BORDER:VAR(--BORDER-WIDTH) SOLID VAR(--BORDER-COLOR)}', + 'should not explode custom properties with less than two concrete sides (2) (uppercase)', + passthroughCSS, + 'h1{BORDER:VAR(--BORDER-WIDTH) SOLID VAR(--BORDER-COLOR)}' ); test( - 'should not explode custom properties with less than two concrete sides (3)', - passthroughCSS, - 'h1{border:1px var(--border-style) var(--border-color)}', + 'should not explode custom properties with less than two concrete sides (3)', + passthroughCSS, + 'h1{border:1px var(--border-style) var(--border-color)}' ); test( - 'should not explode custom properties with less than two concrete sides (3) (uppercase)', - passthroughCSS, - 'h1{BORDER:1PX VAR(--BORDER-STYLE) VAR(--BORDER-COLOR)}', + 'should not explode custom properties with less than two concrete sides (3) (uppercase)', + passthroughCSS, + 'h1{BORDER:1PX VAR(--BORDER-STYLE) VAR(--BORDER-COLOR)}' ); test( - 'Should correctly merge border declarations (#551) (1)', - processCSS, - 'h1{border:1px solid black;border-top-width:2px;border-right-width:2px;border-bottom-width:2px}', - 'h1{border:2px solid black;border-left-width:1px}', + 'Should correctly merge border declarations (#551) (1)', + processCSS, + 'h1{border:1px solid black;border-top-width:2px;border-right-width:2px;border-bottom-width:2px}', + 'h1{border:2px solid black;border-left-width:1px}' ); test( - 'Should correctly merge border declarations (#551) (1) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID BLACK;BORDER-TOP-WIDTH:2PX;BORDER-RIGHT-WIDTH:2PX;BORDER-BOTTOM-WIDTH:2PX}', - 'h1{border:2px solid black;border-left-width:1px}', + 'Should correctly merge border declarations (#551) (1) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID BLACK;BORDER-TOP-WIDTH:2PX;BORDER-RIGHT-WIDTH:2PX;BORDER-BOTTOM-WIDTH:2PX}', + 'h1{border:2px solid black;border-left-width:1px}' ); test( - 'Should correctly merge border declarations (#551) (2)', - processCSS, - 'h1{border:none;border-top:6px solid #000;border-bottom:1px solid #fff}', - 'h1{border:none;border-top:6px solid #000;border-bottom:1px solid #fff}', + 'Should correctly merge border declarations (#551) (2)', + processCSS, + 'h1{border:none;border-top:6px solid #000;border-bottom:1px solid #fff}', + 'h1{border:none;border-top:6px solid #000;border-bottom:1px solid #fff}' ); test( - 'Should correctly merge border declarations (#551) (2) (uppercase)', - processCSS, - 'h1{BORDER:NONE;BORDER-TOP:6PX SOLID #000;BORDER-BOTTOM:1PX SOLID #FFF}', - 'h1{border:none;border-top:6px solid #000;border-bottom:1px solid #fff}', + 'Should correctly merge border declarations (#551) (2) (uppercase)', + processCSS, + 'h1{BORDER:NONE;BORDER-TOP:6PX SOLID #000;BORDER-BOTTOM:1PX SOLID #FFF}', + 'h1{border:none;border-top:6px solid #000;border-bottom:1px solid #fff}' ); +test( + 'should not break border-color (#553)', + processCSS, + 'h1{border:solid transparent;border-width:0 8px 16px;border-bottom-color:#eee}', + 'h1{border:solid transparent;border-bottom:solid #eee;border-width:0 8px 16px}' +); test( - 'should not break border-color (#553)', - processCSS, - 'h1{border:solid transparent;border-width:0 8px 16px;border-bottom-color:#eee}', - 'h1{border:solid transparent;border-bottom:solid #eee;border-width:0 8px 16px}' + 'should not break border-color (#553) (uppercase)', + processCSS, + 'h1{BORDER:SOLID TRANSPARENT;BORDER-WIDTH:0 8PX 16PX;BORDER-BOTTOM-COLOR:#EEE}', + 'h1{border:solid transparent;border-bottom:solid #eee;border-width:0 8px 16px}' ); test( - 'should not break border-color (#553) (uppercase)', - processCSS, - 'h1{BORDER:SOLID TRANSPARENT;BORDER-WIDTH:0 8PX 16PX;BORDER-BOTTOM-COLOR:#EEE}', - 'h1{border:solid transparent;border-bottom:solid #eee;border-width:0 8px 16px}' + 'should not remove border-top-color (#554)', + passthroughCSS, + 'h1{border-top-color: rgba(85, 85, 85, 0.95);border-bottom: 0}' ); test( - 'should not remove border-top-color (#554)', - passthroughCSS, - 'h1{border-top-color: rgba(85, 85, 85, 0.95);border-bottom: 0}', + 'should not remove border-top-color (#554) (uppercase)', + passthroughCSS, + 'h1{BORDER-TOP-COLOR: RGBA(85, 85, 85, 0.95);BORDER-BOTTOM: 0}' ); test( - 'should not remove border-top-color (#554) (uppercase)', - passthroughCSS, - 'h1{BORDER-TOP-COLOR: RGBA(85, 85, 85, 0.95);BORDER-BOTTOM: 0}', + 'Should not merge if there is a shorthand property between them (#557) (1)', + passthroughCSS, + 'h1{border:1px solid #d3d6db;border:1px solid var(--gray-lighter);border-left-width:0;}' ); test( - 'Should not merge if there is a shorthand property between them (#557) (1)', - passthroughCSS, - 'h1{border:1px solid #d3d6db;border:1px solid var(--gray-lighter);border-left-width:0;}', + 'Should not merge if there is a shorthand property between them (#557) (1) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID #D3D6DB;BORDER:1PX SOLID VAR(--GRAY-LIGHTER);BORDER-LEFT-WIDTH:0;}', + 'h1{border:1px solid #d3d6db;border:1px solid VAR(--GRAY-LIGHTER);border-left-width:0;}' ); test( - 'Should not merge if there is a shorthand property between them (#557) (1) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID #D3D6DB;BORDER:1PX SOLID VAR(--GRAY-LIGHTER);BORDER-LEFT-WIDTH:0;}', - 'h1{border:1px solid #d3d6db;border:1px solid VAR(--GRAY-LIGHTER);border-left-width:0;}', + 'Should not merge if there is a shorthand property between them (#557) (2)', + processCSS, + 'h1{border-left-style:solid;border-left-color:#d3d6db;border:1px solid var(--gray-lighter);border-left-width:0;}', + 'h1{border-left:1px solid #d3d6db;border:1px solid var(--gray-lighter);border-left-width:0;}' ); test( - 'Should not merge if there is a shorthand property between them (#557) (2)', - processCSS, - 'h1{border-left-style:solid;border-left-color:#d3d6db;border:1px solid var(--gray-lighter);border-left-width:0;}', - 'h1{border-left:1px solid #d3d6db;border:1px solid var(--gray-lighter);border-left-width:0;}', + 'Should not merge if there is a shorthand property between them (#557) (2) (uppercase)', + processCSS, + 'h1{BORDER-LEFT-STYLE:SOLID;BORDER-LEFT-COLOR:#D3D6DB;BORDER:1PX SOLID VAR(--GRAY-LIGHTER);BORDER-LEFT-WIDTH:0;}', + 'h1{border-left:1px solid #d3d6db;border:1px solid VAR(--GRAY-LIGHTER);border-left-width:0;}' ); test( - 'Should not merge if there is a shorthand property between them (#557) (2) (uppercase)', - processCSS, - 'h1{BORDER-LEFT-STYLE:SOLID;BORDER-LEFT-COLOR:#D3D6DB;BORDER:1PX SOLID VAR(--GRAY-LIGHTER);BORDER-LEFT-WIDTH:0;}', - 'h1{border-left:1px solid #d3d6db;border:1px solid VAR(--GRAY-LIGHTER);border-left-width:0;}', + 'Should not convert currentcolor (#559)', + passthroughCSS, + 'h1{border:2px solid transparent;border-top-color:currentcolor;}' ); test( - 'Should not convert currentcolor (#559)', - passthroughCSS, - 'h1{border:2px solid transparent;border-top-color:currentcolor;}', + 'Should not convert currentcolor (#559) (uppercase)', + processCSS, + 'h1{BORDER:2PX SOLID TRANSPARENT;BORDER-TOP-COLOR:CURRENTCOLOR;}', + 'h1{border:2px solid transparent;border-top-color:currentcolor;}' ); test( - 'Should not convert currentcolor (#559) (uppercase)', - processCSS, - 'h1{BORDER:2PX SOLID TRANSPARENT;BORDER-TOP-COLOR:CURRENTCOLOR;}', - 'h1{border:2px solid transparent;border-top-color:currentcolor;}', + 'Should not convert currentcolor (#559) (2)', + processCSS, + 'h1{border:2px solid transparent;border-top-color:currentColor;}', + 'h1{border:2px solid transparent;border-top-color:currentcolor;}' ); test( - 'Should not convert currentcolor (#559) (2)', - processCSS, - 'h1{border:2px solid transparent;border-top-color:currentColor;}', - 'h1{border:2px solid transparent;border-top-color:currentcolor;}', + 'Should not convert currentcolor (#559) (2) (uppercase)', + processCSS, + 'h1{BORDER:2PX SOLID TRANSPARENT;BORDER-TOP-COLOR:CURRENTCOLOR;}', + 'h1{border:2px solid transparent;border-top-color:currentcolor;}' ); test( - 'Should not convert currentcolor (#559) (2) (uppercase)', - processCSS, - 'h1{BORDER:2PX SOLID TRANSPARENT;BORDER-TOP-COLOR:CURRENTCOLOR;}', - 'h1{border:2px solid transparent;border-top-color:currentcolor;}', + 'should not drop border-width with custom property from border shorthand (#561)', + passthroughCSS, + 'h1{border:var(--border-width) solid grey}' ); test( - 'should not drop border-width with custom property from border shorthand (#561)', - passthroughCSS, - 'h1{border:var(--border-width) solid grey}', + 'should not drop border-width with custom property from border shorthand (#561) (uppercase)', + processCSS, + 'h1{BORDER:VAR(--border-width) SOLID GREY}', + 'h1{border:VAR(--border-width) solid grey}' ); test( - 'should not drop border-width with custom property from border shorthand (#561) (uppercase)', - processCSS, - 'h1{BORDER:VAR(--border-width) SOLID GREY}', - 'h1{border:VAR(--border-width) solid grey}', + 'Should not throw error (#570)', + processCSS, + 'h1{border:1px none;border-bottom-style:solid}', + 'h1{border:1px;border-bottom:1px solid}' ); test( - 'Should not throw error (#570)', - processCSS, - 'h1{border:1px none;border-bottom-style:solid}', - 'h1{border:1px;border-bottom:1px solid}', + 'Should not throw error (#570) (uppercase)', + processCSS, + 'h1{BORDER:1PX NONE;BORDER-BOTTOM-STYLE:SOLID}', + 'h1{border:1px;border-bottom:1px solid}' ); test( - 'Should not throw error (#570) (uppercase)', - processCSS, - 'h1{BORDER:1PX NONE;BORDER-BOTTOM-STYLE:SOLID}', - 'h1{border:1px;border-bottom:1px solid}', + 'Should correctly merge borders with custom properties (#572)', + passthroughCSS, + 'h1{border:6px solid red;border-top:6px solid var(--mycolor);}' ); test( - 'Should correctly merge borders with custom properties (#572)', - passthroughCSS, - 'h1{border:6px solid red;border-top:6px solid var(--mycolor);}', + 'Should correctly merge borders with custom properties (#572) (uppercase)', + processCSS, + 'h1{BORDER:6PX SOLID RED;BORDER-TOP:6PX SOLID VAR(--mycolor);}', + 'h1{border:6px solid red;border-top:6px solid VAR(--mycolor);}' ); test( - 'Should correctly merge borders with custom properties (#572) (uppercase)', - processCSS, - 'h1{BORDER:6PX SOLID RED;BORDER-TOP:6PX SOLID VAR(--mycolor);}', - 'h1{border:6px solid red;border-top:6px solid VAR(--mycolor);}' + 'Should correctly merge borders with custom properties (#619) (1)', + passthroughCSS, + 'h1{border:1px solid;border-color:var(--color-var)}' ); test( - 'Should correctly merge borders with custom properties (#619) (1)', - passthroughCSS, - 'h1{border:1px solid;border-color:var(--color-var)}', + 'Should correctly merge borders with custom properties (#619) (1) (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID;BORDER-COLOR:VAR(--COLOR-VAR)}', + 'h1{border:1px solid;border-color:VAR(--COLOR-VAR)}' ); test( - 'Should correctly merge borders with custom properties (#619) (1) (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID;BORDER-COLOR:VAR(--COLOR-VAR)}', - 'h1{border:1px solid;border-color:VAR(--COLOR-VAR)}', + 'Should correctly merge borders with custom properties (#619) (2)', + passthroughCSS, + 'h1{border-left:1px solid;border-left-color:var(--color-var)}' ); test( - 'Should correctly merge borders with custom properties (#619) (2)', - passthroughCSS, - 'h1{border-left:1px solid;border-left-color:var(--color-var)}', + 'Should correctly merge borders with custom properties (#619) (2) (uppercase)', + processCSS, + 'h1{BORDER-LEFT:1PX SOLID;BORDER-LEFT-COLOR:VAR(--COLOR-VAR)}', + 'h1{border-left:1px solid;border-left-color:VAR(--COLOR-VAR)}' ); test( - 'Should correctly merge borders with custom properties (#619) (2) (uppercase)', - processCSS, - 'h1{BORDER-LEFT:1PX SOLID;BORDER-LEFT-COLOR:VAR(--COLOR-VAR)}', - 'h1{border-left:1px solid;border-left-color:VAR(--COLOR-VAR)}', + 'Should correctly merge borders with custom properties (#619) (3)', + passthroughCSS, + 'h1{border-color:red green blue magenta;border-top-color:var(--color-var)}' ); test( - 'Should correctly merge borders with custom properties (#619) (3)', - passthroughCSS, - 'h1{border-color:red green blue magenta;border-top-color:var(--color-var)}', + 'Should correctly merge borders with custom properties (#619) (3) (uppercase)', + processCSS, + 'h1{BORDER-COLOR:RED GREEN BLUE MAGENTA;BORDER-TOP-COLOR:VAR(--COLOR-VAR)}', + 'h1{border-color:RED GREEN BLUE MAGENTA;BORDER-TOP-COLOR:VAR(--COLOR-VAR)}' ); test( - 'Should correctly merge borders with custom properties (#619) (3) (uppercase)', - processCSS, - 'h1{BORDER-COLOR:RED GREEN BLUE MAGENTA;BORDER-TOP-COLOR:VAR(--COLOR-VAR)}', - 'h1{border-color:RED GREEN BLUE MAGENTA;BORDER-TOP-COLOR:VAR(--COLOR-VAR)}', + 'Should correctly merge borders with custom properties (#652)', + processCSS, + 'h1{border-width:var(--a);border-style:var(--b);border-color:var(--c)}', + 'h1{border:var(--a) var(--b) var(--c)}' ); test( - 'Should correctly merge borders with custom properties (#652)', - processCSS, - 'h1{border-width:var(--a);border-style:var(--b);border-color:var(--c)}', - 'h1{border:var(--a) var(--b) var(--c)}' + 'Should correctly merge borders with custom properties (#652) (uppercase)', + processCSS, + 'h1{BORDER-WIDTH:VAR(--A);BORDER-STYLE:VAR(--B);BORDER-COLOR:VAR(--C)}', + 'h1{border:VAR(--A) VAR(--B) VAR(--C)}' ); test( - 'Should correctly merge borders with custom properties (#652) (uppercase)', - processCSS, - 'h1{BORDER-WIDTH:VAR(--A);BORDER-STYLE:VAR(--B);BORDER-COLOR:VAR(--C)}', - 'h1{border:VAR(--A) VAR(--B) VAR(--C)}' + 'Should not throw error when a border property value is undefined (#639)', + processCSS, + 'h1{border:2px solid #fff;border-color:inherit}', + 'h1{border:2px solid;border-color:inherit}' ); test( - 'Should not throw error when a border property value is undefined (#639)', - processCSS, - 'h1{border:2px solid #fff;border-color:inherit}', - 'h1{border:2px solid;border-color:inherit}', + 'Should not throw error when a border property value is undefined (#639) (uppercase)', + processCSS, + 'h1{BORDER:2PX SOLID #FFF;BORDER-COLOR:INHERIT}', + 'h1{border:2px solid;BORDER-COLOR:INHERIT}' ); test( - 'Should not throw error when a border property value is undefined (#639) (uppercase)', - processCSS, - 'h1{BORDER:2PX SOLID #FFF;BORDER-COLOR:INHERIT}', - 'h1{border:2px solid;BORDER-COLOR:INHERIT}', + 'Should preserve case of css custom properties #648', + passthroughCSS, + 'h1{border:1px solid rgba(var(--fooBar));}' ); test( - 'Should preserve case of css custom properties #648', - passthroughCSS, - 'h1{border:1px solid rgba(var(--fooBar));}', + 'Should preserve case of css custom properties #648 (uppercase)', + processCSS, + 'h1{BORDER:1PX SOLID RGBA(VAR(--fooBar));}', + 'h1{border:1px solid rgba(var(--fooBar));}' ); test( - 'Should preserve case of css custom properties #648 (uppercase)', - processCSS, - 'h1{BORDER:1PX SOLID RGBA(VAR(--fooBar));}', - 'h1{border:1px solid rgba(var(--fooBar));}' + 'should overwrite some border-width props and save fallbacks and preserve case #648 2', + processCSS, + 'h1{border-top-width:10px;border-right-width:var(--fooBar);border-right-width:15px;border-bottom-width:var(--fooBar);border-bottom-width:20px;border-left-width:25px;border-top-width:var(--fooBar);border-left-width:var(--fooBar)}', + 'h1{border-width:10px 15px 20px 25px;border-top-width:var(--fooBar);border-left-width:var(--fooBar)}' ); test( - 'should overwrite some border-width props and save fallbacks and preserve case #648 2', - processCSS, - 'h1{border-top-width:10px;border-right-width:var(--fooBar);border-right-width:15px;border-bottom-width:var(--fooBar);border-bottom-width:20px;border-left-width:25px;border-top-width:var(--fooBar);border-left-width:var(--fooBar)}', - 'h1{border-width:10px 15px 20px 25px;border-top-width:var(--fooBar);border-left-width:var(--fooBar)}' + 'should overwrite some border-width props and save fallbacks and preserve case #648 2 (uppercase)', + processCSS, + 'h1{BORDER-TOP-WIDTH:10PX;BORDER-RIGHT-WIDTH:VAR(--fooBar);BORDER-RIGHT-WIDTH:15PX;BORDER-BOTTOM-WIDTH:VAR(--fooBar);BORDER-BOTTOM-WIDTH:20PX;BORDER-LEFT-WIDTH:25PX;BORDER-TOP-WIDTH:VAR(--fooBar);BORDER-LEFT-WIDTH:VAR(--fooBar)}', + 'h1{border-width:10PX 15PX 20PX 25PX;BORDER-TOP-WIDTH:VAR(--fooBar);BORDER-LEFT-WIDTH:VAR(--fooBar)}' ); test( - 'should overwrite some border-width props and save fallbacks and preserve case #648 2 (uppercase)', - processCSS, - 'h1{BORDER-TOP-WIDTH:10PX;BORDER-RIGHT-WIDTH:VAR(--fooBar);BORDER-RIGHT-WIDTH:15PX;BORDER-BOTTOM-WIDTH:VAR(--fooBar);BORDER-BOTTOM-WIDTH:20PX;BORDER-LEFT-WIDTH:25PX;BORDER-TOP-WIDTH:VAR(--fooBar);BORDER-LEFT-WIDTH:VAR(--fooBar)}', - 'h1{border-width:10PX 15PX 20PX 25PX;BORDER-TOP-WIDTH:VAR(--fooBar);BORDER-LEFT-WIDTH:VAR(--fooBar)}' + 'should handle !important statements for border-width props', + processCSS, + 'h1{border:1px solid red!important;border-top-width:0!important;border-right-width:0!important;border-bottom-width:0!important;}', + 'h1{border:solid red!important;border-width:0 0 0 1px!important;}' +); + +test( + 'should handle mixed border declarations', + processCSS, + 'h1{border: 2px solid red;border-bottom-width:0;border-right-width:0;border-top-width:0;}', + 'h1{border:solid red;border-width:0 0 0 2px;}' ); diff --git a/packages/postcss-merge-longhand/src/__tests__/boxBase.js b/packages/postcss-merge-longhand/src/__tests__/boxBase.js index 751fb96db..d2877d94f 100644 --- a/packages/postcss-merge-longhand/src/__tests__/boxBase.js +++ b/packages/postcss-merge-longhand/src/__tests__/boxBase.js @@ -1,222 +1,317 @@ import test from 'ava'; import plugin from '..'; -import {processCSSFactory} from '../../../../util/testHelpers'; +import { processCSSFactory } from '../../../../util/testHelpers'; -const {processCSS} = processCSSFactory(plugin); +const { processCSS } = processCSSFactory(plugin); -function addTests (...tests) { - tests.forEach(({message, fixture, expected}) => { - const isExpectedFunc = typeof expected === "function"; +function addTests(...tests) { + tests.forEach(({ message, fixture, expected }) => { + const isExpectedFunc = typeof expected === 'function'; - test( - message.replace(/box/gi, 'margin'), - processCSS, - fixture.replace(/box/gi, 'margin'), - isExpectedFunc ? expected('margin') : expected.replace(/box/gi, 'margin') - ); - test( - message.replace(/box/gi, 'MARGIN'), - processCSS, - fixture.replace(/box/gi, 'MARGIN'), - isExpectedFunc ? expected('MARGIN') : expected.replace(/box/gi, 'margin') - ); - test( - message.replace(/box/gi, 'padding'), - processCSS, - fixture.replace(/box/gi, 'padding'), - isExpectedFunc ? expected('padding') : expected.replace(/box/gi, 'padding') - ); - test( - message.replace(/box/gi, 'PADDING'), - processCSS, - fixture.replace(/box/gi, 'PADDING'), - isExpectedFunc ? expected('PADDING') : expected.replace(/box/gi, 'padding') - ); - }); + test( + message.replace(/box/gi, 'margin'), + processCSS, + fixture.replace(/box/gi, 'margin'), + isExpectedFunc ? expected('margin') : expected.replace(/box/gi, 'margin') + ); + test( + message.replace(/box/gi, 'MARGIN'), + processCSS, + fixture.replace(/box/gi, 'MARGIN'), + isExpectedFunc ? expected('MARGIN') : expected.replace(/box/gi, 'margin') + ); + test( + message.replace(/box/gi, 'padding'), + processCSS, + fixture.replace(/box/gi, 'padding'), + isExpectedFunc + ? expected('padding') + : expected.replace(/box/gi, 'padding') + ); + test( + message.replace(/box/gi, 'PADDING'), + processCSS, + fixture.replace(/box/gi, 'PADDING'), + isExpectedFunc + ? expected('PADDING') + : expected.replace(/box/gi, 'padding') + ); + }); } -addTests({ +addTests( + { message: 'should merge box values', fixture: 'h1{box-top:10px;box-right:20px;box-bottom:30px;box-left:40px}', expected: 'h1{box:10px 20px 30px 40px}', -}, { + }, + { message: 'should merge box values with !important', - fixture: 'h1{box-top:10px!important;box-right:20px!important;box-bottom:30px!important;box-left:40px!important}', + fixture: + 'h1{box-top:10px!important;box-right:20px!important;box-bottom:30px!important;box-left:40px!important}', expected: 'h1{box:10px 20px 30px 40px!important}', -}, { + }, + { message: 'should merge & then condense box values', fixture: 'h1{box-top:10px;box-bottom:10px;box-left:10px;box-right:10px}', expected: 'h1{box:10px}', -}, { + }, + { message: 'should not merge box values with mixed !important', - fixture: 'h1{box-top:10px!important;box-right:20px;box-bottom:30px!important;box-left:40px}', - expected: (prop) => `h1{${prop}-top:10px!important;${prop}-right:20px;${prop}-bottom:30px!important;${prop}-left:40px}`, -}, { + fixture: + 'h1{box-top:10px!important;box-right:20px;box-bottom:30px!important;box-left:40px}', + expected: (prop) => + `h1{${prop}-top:10px!important;${prop}-right:20px;${prop}-bottom:30px!important;${prop}-left:40px}`, + }, + { message: 'should convert 4 values to 1 (box)', fixture: 'h1{box:10px 10px 10px 10px}', expected: 'h1{box:10px}', -}, { + }, + { message: 'should convert 3 values to 1 (box)', fixture: 'h1{box:10px 10px 10px}', expected: 'h1{box:10px}', -}, { + }, + { message: 'should convert 3 values to 2 (box)', fixture: 'h1{box:10px 20px 10px}', expected: 'h1{box:10px 20px}', -}, { + }, + { message: 'should convert 2 values to 1 (box)', fixture: 'h1{box:10px 10px}', expected: 'h1{box:10px}', -}, { + }, + { message: 'should convert 1 value to 1 (box)', fixture: 'h1{box:10px}', expected: 'h1{box:10px}', -}, { + }, + { message: 'should convert 4 values to 2 (box)', fixture: 'h1{box:10px 20px 10px 20px}', expected: 'h1{box:10px 20px}', -}, { + }, + { message: 'should convert 4 values to 3 (box)', fixture: 'h1{box:10px 20px 30px 20px}', expected: 'h1{box:10px 20px 30px}', -}, { + }, + { message: 'should convert 4 values to 4 (box)', fixture: 'h1{box:10px 20px 30px 40px}', expected: 'h1{box:10px 20px 30px 40px}', -}, { + }, + { message: 'should not mangle calc values (box)', fixture: 'h1{box:1px 1px calc(0.5em + 1px)}', expected: 'h1{box:1px 1px calc(0.5em + 1px)}', -}, { + }, + { message: 'should merge box-left with box', fixture: 'h1{box:10px 20px;box-left:10px}', expected: 'h1{box:10px 20px 10px 10px}', -}, { + }, + { message: 'should merge !important and normal box values', - fixture: 'h1{box-left:10px;box-left:20px!important;box-right:10px;box-right:20px!important;box-top:10px;box-top:20px!important;box-bottom:10px;box-bottom:20px!important}', + fixture: + 'h1{box-left:10px;box-left:20px!important;box-right:10px;box-right:20px!important;box-top:10px;box-top:20px!important;box-bottom:10px;box-bottom:20px!important}', expected: 'h1{box:10px;box:20px!important}', -}, { + }, + { message: 'should not merge declarations with hacks (box)', fixture: 'h1{box:4px 0;_box-top:1px}', expected: (prop) => `h1{${prop.toLowerCase()}:4px 0;_${prop}-top:1px}`, -}, { + }, + { message: 'should not merge declarations with hacks (box) (2)', fixture: 'h1{box:4px 0;box-top:1px\\9}', expected: (prop) => `h1{${prop.toLowerCase()}:4px 0;${prop}-top:1px\\9}`, -}, { + }, + { message: 'should convert 2 values to 1 with an unrelated inherit (box)', fixture: '.ui.table td{box:0.71428571em 0.71428571em;text-align:inherit}', expected: '.ui.table td{box:0.71428571em;text-align:inherit}', -}, { + }, + { message: 'should not explode box: inherit', fixture: 'h1{box:inherit}', expected: (prop) => `h1{${prop}:inherit}`, -}, { + }, + { message: 'should not explode box: inherit (uppercase)', fixture: 'h1{box:INHERIT}', expected: (prop) => `h1{${prop}:INHERIT}`, -}, { + }, + { message: 'should not merge declarations with hacks', fixture: 'h1{box:4px 0 0 0;box-top:1px\\9}', expected: (prop) => `h1{${prop.toLowerCase()}:4px 0 0;${prop}-top:1px\\9}`, -}, { + }, + { message: 'should preserve nesting level', fixture: 'section{h1{box:0 48px}}', expected: 'section{h1{box:0 48px}}', -}, { + }, + { message: 'should override shorthand property', fixture: 'h1{box:10px;box-left:5px}', expected: 'h1{box:10px 10px 10px 5px}', -}, { + }, + { message: 'should overwrite some box props and save fallbacks', - fixture: 'h1{box-top:10px;box-right:var(--variable);box-right:15px;box-bottom:var(--variable);box-bottom:20px;box-left:25px;box-top:var(--variable);box-left:var(--variable)}', - expected: (prop) => `h1{${prop.toLowerCase()}:10px 15px 20px 25px;${prop}-top:var(--variable);${prop}-left:var(--variable)}`, -}, { + fixture: + 'h1{box-top:10px;box-right:var(--variable);box-right:15px;box-bottom:var(--variable);box-bottom:20px;box-left:25px;box-top:var(--variable);box-left:var(--variable)}', + expected: (prop) => + `h1{${prop.toLowerCase()}:10px 15px 20px 25px;${prop}-top:var(--variable);${prop}-left:var(--variable)}`, + }, + { message: 'should not explode box props with custom properties', fixture: 'h1{box-bottom:var(--variable)}', expected: (prop) => `h1{${prop}-bottom:var(--variable)}`, -}, { + }, + { message: 'should preserve case of custom properties', - fixture: 'h1{box-top:10px;box-right:var(--fooBar);box-right:15px;box-bottom:var(--fooBar);box-bottom:20px;box-left:25px;box-top:var(--fooBar);box-left:var(--fooBar)}', - expected: (prop) => `h1{${prop.toLowerCase()}:10px 15px 20px 25px;${prop}-top:var(--fooBar);${prop}-left:var(--fooBar)}`, -}, { - message: 'should not merge incomplete box props where one has an unset property', + fixture: + 'h1{box-top:10px;box-right:var(--fooBar);box-right:15px;box-bottom:var(--fooBar);box-bottom:20px;box-left:25px;box-top:var(--fooBar);box-left:var(--fooBar)}', + expected: (prop) => + `h1{${prop.toLowerCase()}:10px 15px 20px 25px;${prop}-top:var(--fooBar);${prop}-left:var(--fooBar)}`, + }, + { + message: + 'should not merge incomplete box props where one has an unset property', fixture: 'h1{box-bottom:10px;box-top:unset;box-left:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:unset;${prop}-left:20px}`, -}, { - message: 'should not merge incomplete box props where one has an unset property (uppercase)', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:unset;${prop}-left:20px}`, + }, + { + message: + 'should not merge incomplete box props where one has an unset property (uppercase)', fixture: 'h1{box-bottom:10px;box-top:UNSET;box-left:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:UNSET;${prop}-left:20px}`, -}, { - message: 'should not merge incomplete box props where one has an initial property', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:UNSET;${prop}-left:20px}`, + }, + { + message: + 'should not merge incomplete box props where one has an initial property', fixture: 'h1{box-bottom:10px;box-top:initial;box-left:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:initial;${prop}-left:20px}`, -}, { - message: 'should not merge incomplete box props where one has an initial property (uppercase)', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:initial;${prop}-left:20px}`, + }, + { + message: + 'should not merge incomplete box props where one has an initial property (uppercase)', fixture: 'h1{box-bottom:10px;box-top:INITIAL;box-left:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:INITIAL;${prop}-left:20px}`, -}, { - message: 'should not merge incomplete box props where one has an inherit property', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:INITIAL;${prop}-left:20px}`, + }, + { + message: + 'should not merge incomplete box props where one has an inherit property', fixture: 'h1{box-bottom:10px;box-top:inherit;box-left:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:inherit;${prop}-left:20px}`, -}, { - message: 'should not merge incomplete box props where one has an inherit property (uppercase)', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:inherit;${prop}-left:20px}`, + }, + { + message: + 'should not merge incomplete box props where one has an inherit property (uppercase)', fixture: 'h1{box-bottom:10px;box-top:INHERIT;box-left:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:INHERIT;${prop}-left:20px}`, -}, { - message: 'should not merge complete box props where one has an unset property', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:INHERIT;${prop}-left:20px}`, + }, + { + message: + 'should not merge complete box props where one has an unset property', fixture: 'h1{box-bottom:10px;box-top:unset;box-left:20px;box-right:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:unset;${prop}-left:20px;${prop}-right:20px}`, -}, { - message: 'should not merge complete box props where one has an unset property (uppercase)', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:unset;${prop}-left:20px;${prop}-right:20px}`, + }, + { + message: + 'should not merge complete box props where one has an unset property (uppercase)', fixture: 'h1{box-bottom:10px;box-top:UNSET;box-left:20px;box-right:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:UNSET;${prop}-left:20px;${prop}-right:20px}`, -}, { - message: 'should not merge complete box props where one has an initial property', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:UNSET;${prop}-left:20px;${prop}-right:20px}`, + }, + { + message: + 'should not merge complete box props where one has an initial property', fixture: 'h1{box-bottom:10px;box-top:initial;box-left:20px;box-right:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:initial;${prop}-left:20px;${prop}-right:20px}`, -}, { - message: 'should not merge complete box props where one has an initial property (uppercase)', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:initial;${prop}-left:20px;${prop}-right:20px}`, + }, + { + message: + 'should not merge complete box props where one has an initial property (uppercase)', fixture: 'h1{box-bottom:10px;box-top:INITIAL;box-left:20px;box-right:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:INITIAL;${prop}-left:20px;${prop}-right:20px}`, -}, { - message: 'should not merge complete box props where one has an inherit property', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:INITIAL;${prop}-left:20px;${prop}-right:20px}`, + }, + { + message: + 'should not merge complete box props where one has an inherit property', fixture: 'h1{box-bottom:10px;box-top:inherit;box-left:20px;box-right:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:inherit;${prop}-left:20px;${prop}-right:20px}`, -}, { - message: 'should not merge complete box props where one has an inherit property (uppercase)', + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:inherit;${prop}-left:20px;${prop}-right:20px}`, + }, + { + message: + 'should not merge complete box props where one has an inherit property (uppercase)', fixture: 'h1{box-bottom:10px;box-top:INHERIT;box-left:20px;box-right:20px}', - expected: (prop) => `h1{${prop}-bottom:10px;${prop}-top:INHERIT;${prop}-left:20px;${prop}-right:20px}`, -}, { - message: 'should not merge box props where there is a mix of reserved properties', - fixture: 'h1{box-bottom:unset;box-top:initial;box-left:inherit;box-right:initial}', - expected: (prop) => `h1{${prop}-bottom:unset;${prop}-top:initial;${prop}-left:inherit;${prop}-right:initial}`, -}, { - message: 'should not merge box props where there is a mix of reserved properties (uppercase)', - fixture: 'h1{box-bottom:UNSET;box-top:INITIAL;box-left:INHERIT;box-right:INITIAL}', - expected: (prop) => `h1{${prop}-bottom:UNSET;${prop}-top:INITIAL;${prop}-left:INHERIT;${prop}-right:INITIAL}`, -}, { + expected: (prop) => + `h1{${prop}-bottom:10px;${prop}-top:INHERIT;${prop}-left:20px;${prop}-right:20px}`, + }, + { + message: + 'should not merge box props where there is a mix of reserved properties', + fixture: + 'h1{box-bottom:unset;box-top:initial;box-left:inherit;box-right:initial}', + expected: (prop) => + `h1{${prop}-bottom:unset;${prop}-top:initial;${prop}-left:inherit;${prop}-right:initial}`, + }, + { + message: + 'should not merge box props where there is a mix of reserved properties (uppercase)', + fixture: + 'h1{box-bottom:UNSET;box-top:INITIAL;box-left:INHERIT;box-right:INITIAL}', + expected: (prop) => + `h1{${prop}-bottom:UNSET;${prop}-top:INITIAL;${prop}-left:INHERIT;${prop}-right:INITIAL}`, + }, + { message: 'should merge box props when they are all unset', - fixture: 'h1{box-bottom:unset;box-top:unset;box-left:unset;box-right:unset}', + fixture: + 'h1{box-bottom:unset;box-top:unset;box-left:unset;box-right:unset}', expected: 'h1{box:unset}', -}, { + }, + { message: 'should merge box props when they are all unset (uppercase)', - fixture: 'h1{box-bottom:UNSET;box-top:UNSET;box-left:UNSET;box-right:UNSET}', + fixture: + 'h1{box-bottom:UNSET;box-top:UNSET;box-left:UNSET;box-right:UNSET}', expected: 'h1{box:UNSET}', -}, { + }, + { message: 'should merge box props when they are all initial', - fixture: 'h1{box-bottom:initial;box-top:initial;box-left:initial;box-right:initial}', + fixture: + 'h1{box-bottom:initial;box-top:initial;box-left:initial;box-right:initial}', expected: 'h1{box:initial}', -}, { + }, + { message: 'should merge box props when they are all initial (uppercase)', - fixture: 'h1{box-bottom:INITIAL;box-top:INITIAL;box-left:INITIAL;box-right:INITIAL}', + fixture: + 'h1{box-bottom:INITIAL;box-top:INITIAL;box-left:INITIAL;box-right:INITIAL}', expected: 'h1{box:INITIAL}', -}, { + }, + { message: 'should merge box props when they are all inherit', - fixture: 'h1{box-bottom:inherit;box-top:inherit;box-left:inherit;box-right:inherit}', + fixture: + 'h1{box-bottom:inherit;box-top:inherit;box-left:inherit;box-right:inherit}', expected: 'h1{box:inherit}', -}, { + }, + { message: 'should merge box props when they are all inherit (uppercase)', - fixture: 'h1{box-bottom:INHERIT;box-top:INHERIT;box-left:INHERIT;box-right:INHERIT}', + fixture: + 'h1{box-bottom:INHERIT;box-top:INHERIT;box-left:INHERIT;box-right:INHERIT}', expected: 'h1{box:INHERIT}', -}); + } +); diff --git a/packages/postcss-merge-longhand/src/__tests__/columns.js b/packages/postcss-merge-longhand/src/__tests__/columns.js index a40fe987c..891a9fe42 100644 --- a/packages/postcss-merge-longhand/src/__tests__/columns.js +++ b/packages/postcss-merge-longhand/src/__tests__/columns.js @@ -1,225 +1,217 @@ import test from 'ava'; import plugin from '..'; -import {processCSSFactory} from '../../../../util/testHelpers'; +import { processCSSFactory } from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should merge column values', - processCSS, - 'h1{column-width:12em;column-count:auto}', - 'h1{columns:12em}' + 'should merge column values', + processCSS, + 'h1{column-width:12em;column-count:auto}', + 'h1{columns:12em}' ); test( - 'should merge column values (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:12em;COLUMN-COUNT:auto}', - 'h1{columns:12em}' + 'should merge column values (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:12em;COLUMN-COUNT:auto}', + 'h1{columns:12em}' ); test( - 'should minify column values', - processCSS, - 'h1{column-width:auto;column-count:auto}', - 'h1{columns:auto}' + 'should minify column values', + processCSS, + 'h1{column-width:auto;column-count:auto}', + 'h1{columns:auto}' ); test( - 'should minify column values (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:auto;COLUMN-COUNT:auto}', - 'h1{columns:auto}' + 'should minify column values (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:auto;COLUMN-COUNT:auto}', + 'h1{columns:auto}' ); test( - 'should minify column values 1 (uppercase)', - processCSS, - 'h1{column-width:AUTO;column-count:AUTO}', - 'h1{columns:AUTO}' + 'should minify column values 1 (uppercase)', + processCSS, + 'h1{column-width:AUTO;column-count:AUTO}', + 'h1{columns:AUTO}' ); test( - 'should merge column-width with columns', - processCSS, - 'h1{columns:12em auto;column-width:11em}', - 'h1{columns:11em}' + 'should merge column-width with columns', + processCSS, + 'h1{columns:12em auto;column-width:11em}', + 'h1{columns:11em}' ); test( - 'should merge column-width with columns (uppercase)', - processCSS, - 'h1{COLUMNS:12em auto;COLUMN-WIDTH:11em}', - 'h1{columns:11em}' + 'should merge column-width with columns (uppercase)', + processCSS, + 'h1{COLUMNS:12em auto;COLUMN-WIDTH:11em}', + 'h1{columns:11em}' ); test( - 'should merge column-width with columns', - processCSS, - 'h1{columns:12em AUTO;column-width:11em}', - 'h1{columns:11em}' + 'should merge column-width with columns', + processCSS, + 'h1{columns:12em AUTO;column-width:11em}', + 'h1{columns:11em}' ); test( - 'should merge column width and column count', - processCSS, - 'h1{column-width:6em;column-count:3}', - 'h1{columns:6em 3}' + 'should merge column width and column count', + processCSS, + 'h1{column-width:6em;column-count:3}', + 'h1{columns:6em 3}' ); test( - 'should merge column width and column count (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:6em;COLUMN-COUNT:3}', - 'h1{columns:6em 3}' + 'should merge column width and column count (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:6em;COLUMN-COUNT:3}', + 'h1{columns:6em 3}' ); test( - 'should pass through column width', - passthroughCSS, - 'h1{column-width:6em}', + 'should pass through column width', + passthroughCSS, + 'h1{column-width:6em}' ); test( - 'should pass through column width (uppercase)', - passthroughCSS, - 'h1{COLUMN-WIDTH:6em}', + 'should pass through column width (uppercase)', + passthroughCSS, + 'h1{COLUMN-WIDTH:6em}' ); -test( - 'should pass through column count', - passthroughCSS, - 'h1{column-count:3}' -); +test('should pass through column count', passthroughCSS, 'h1{column-count:3}'); test( - 'should pass through column count (uppercase)', - passthroughCSS, - 'h1{COLUMN-COUNT:3}' + 'should pass through column count (uppercase)', + passthroughCSS, + 'h1{COLUMN-COUNT:3}' ); test( - 'should reduce inherit', - processCSS, - 'h1{column-width:inherit;column-count:inherit}', - 'h1{columns:inherit}' + 'should reduce inherit', + processCSS, + 'h1{column-width:inherit;column-count:inherit}', + 'h1{columns:inherit}' ); test( - 'should reduce inherit (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:inherit;COLUMN-COUNT:inherit}', - 'h1{columns:inherit}' + 'should reduce inherit (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:inherit;COLUMN-COUNT:inherit}', + 'h1{columns:inherit}' ); test( - 'should reduce inherit 1 (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:INHERIT;COLUMN-COUNT:INHERIT}', - 'h1{columns:inherit}' + 'should reduce inherit 1 (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:INHERIT;COLUMN-COUNT:INHERIT}', + 'h1{columns:inherit}' ); -test( - 'should pass through auto', - passthroughCSS, - 'h1{columns:auto}' -); +test('should pass through auto', passthroughCSS, 'h1{columns:auto}'); test( - 'should pass through auto (uppercase)', - processCSS, - 'h1{COLUMNS:auto}', - 'h1{columns:auto}' + 'should pass through auto (uppercase)', + processCSS, + 'h1{COLUMNS:auto}', + 'h1{columns:auto}' ); test( - 'should pass through auto 1 (uppercase)', - processCSS, - 'h1{columns:AUTO}', - 'h1{columns:auto}' + 'should pass through auto 1 (uppercase)', + processCSS, + 'h1{columns:AUTO}', + 'h1{columns:auto}' ); test( - 'should not merge declarations with hacks', - passthroughCSS, - 'h1{column-width:12em;_column-count:auto}' + 'should not merge declarations with hacks', + passthroughCSS, + 'h1{column-width:12em;_column-count:auto}' ); test( - 'should not merge declarations with hacks (uppercase)', - passthroughCSS, - 'h1{COLUMN-WIDTH:12em;_COLUMN-COUNT:auto}' + 'should not merge declarations with hacks (uppercase)', + passthroughCSS, + 'h1{COLUMN-WIDTH:12em;_COLUMN-COUNT:auto}' ); test( - 'should preserve nesting level', - processCSS, - 'section{h1{column-width:12em;column-count:auto}}', - 'section{h1{columns:12em}}' + 'should preserve nesting level', + processCSS, + 'section{h1{column-width:12em;column-count:auto}}', + 'section{h1{columns:12em}}' ); test( - 'should preserve nesting level (uppercase)', - processCSS, - 'section{h1{COLUMN-WIDTH:12em;COLUMN-COUNT:auto}}', - 'section{h1{columns:12em}}' + 'should preserve nesting level (uppercase)', + processCSS, + 'section{h1{COLUMN-WIDTH:12em;COLUMN-COUNT:auto}}', + 'section{h1{columns:12em}}' ); test( - 'should save fallbacks for column-width if after goes custom css props', - processCSS, - 'h1{column-width:12em;column-width:var(--variable)}', - 'h1{column-width:12em;column-width:var(--variable)}' + 'should save fallbacks for column-width if after goes custom css props', + processCSS, + 'h1{column-width:12em;column-width:var(--variable)}', + 'h1{column-width:12em;column-width:var(--variable)}' ); test( - 'should save fallbacks for column-width if after goes custom css props (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:12em;COLUMN-WIDTH:var(--variable)}', - 'h1{COLUMN-WIDTH:12em;COLUMN-WIDTH:var(--variable)}' + 'should save fallbacks for column-width if after goes custom css props (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:12em;COLUMN-WIDTH:var(--variable)}', + 'h1{COLUMN-WIDTH:12em;COLUMN-WIDTH:var(--variable)}' ); test( - 'should save fallbacks for column-width if after goes custom css props 1 (uppercase)', - processCSS, - 'h1{column-width:12em;column-width:VAR(--variable)}', - 'h1{column-width:12em;column-width:VAR(--variable)}' + 'should save fallbacks for column-width if after goes custom css props 1 (uppercase)', + processCSS, + 'h1{column-width:12em;column-width:VAR(--variable)}', + 'h1{column-width:12em;column-width:VAR(--variable)}' ); test( - 'should not explode columns with custom properties', - passthroughCSS, - 'h1{columns:var(--variable)}', + 'should not explode columns with custom properties', + passthroughCSS, + 'h1{columns:var(--variable)}' ); test( - 'should preserve case of custom properties', - passthroughCSS, - 'h1{columns:var(--fooBar)}', + 'should preserve case of custom properties', + passthroughCSS, + 'h1{columns:var(--fooBar)}' ); test( - 'should preserve case of custom properties (uppercase)', - passthroughCSS, - 'h1{COLUMN:var(--fooBar)}', + 'should preserve case of custom properties (uppercase)', + passthroughCSS, + 'h1{COLUMN:var(--fooBar)}' ); test( - 'should preserve case of custom properties 1 (uppercase)', - passthroughCSS, - 'h1{column:VAR(--fooBar)}', + 'should preserve case of custom properties 1 (uppercase)', + passthroughCSS, + 'h1{column:VAR(--fooBar)}' ); test( - 'should merge column values duplicate columns', - processCSS, - 'h1{column-width:12em;column-count:auto;columns:12em}', - 'h1{columns:12em}' + 'should merge column values duplicate columns', + processCSS, + 'h1{column-width:12em;column-count:auto;columns:12em}', + 'h1{columns:12em}' ); test( - 'should merge column values duplicate columns (uppercase)', - processCSS, - 'h1{COLUMN-WIDTH:12em;COLUMN-COUNT:auto;COLUMNS:12em}', - 'h1{columns:12em}' + 'should merge column values duplicate columns (uppercase)', + processCSS, + 'h1{COLUMN-WIDTH:12em;COLUMN-COUNT:auto;COLUMNS:12em}', + 'h1{columns:12em}' ); diff --git a/packages/postcss-merge-longhand/src/index.js b/packages/postcss-merge-longhand/src/index.js index 9a7ace1c7..e990cc2b0 100644 --- a/packages/postcss-merge-longhand/src/index.js +++ b/packages/postcss-merge-longhand/src/index.js @@ -2,12 +2,12 @@ import postcss from 'postcss'; import processors from './lib/decl'; export default postcss.plugin('postcss-merge-longhand', () => { - return css => { - css.walkRules(rule => { - processors.forEach(p => { - p.explode(rule); - p.merge(rule); - }); - }); - }; + return (css) => { + css.walkRules((rule) => { + processors.forEach((p) => { + p.explode(rule); + p.merge(rule); + }); + }); + }; }); diff --git a/packages/postcss-merge-longhand/src/lib/canExplode.js b/packages/postcss-merge-longhand/src/lib/canExplode.js index ef77faaf5..ebf724b69 100644 --- a/packages/postcss-merge-longhand/src/lib/canExplode.js +++ b/packages/postcss-merge-longhand/src/lib/canExplode.js @@ -1,13 +1,13 @@ -import isCustomProp from "./isCustomProp"; +import isCustomProp from './isCustomProp'; -const hasInherit = node => node.value.toLowerCase().includes("inherit"); -const hasInitial = node => node.value.toLowerCase().includes("initial"); -const hasUnset = node => node.value.toLowerCase().includes("unset"); +const hasInherit = (node) => node.value.toLowerCase().includes('inherit'); +const hasInitial = (node) => node.value.toLowerCase().includes('initial'); +const hasUnset = (node) => node.value.toLowerCase().includes('unset'); export default (prop, includeCustomProps = true) => { - if (includeCustomProps && isCustomProp(prop)) { - return false; - } + if (includeCustomProps && isCustomProp(prop)) { + return false; + } - return !hasInherit(prop) && !hasInitial(prop) && !hasUnset(prop); + return !hasInherit(prop) && !hasInitial(prop) && !hasUnset(prop); }; diff --git a/packages/postcss-merge-longhand/src/lib/canMerge.js b/packages/postcss-merge-longhand/src/lib/canMerge.js index bfd1e07ac..c691a9559 100644 --- a/packages/postcss-merge-longhand/src/lib/canMerge.js +++ b/packages/postcss-merge-longhand/src/lib/canMerge.js @@ -1,28 +1,32 @@ import isCustomProp from './isCustomProp'; -const important = node => node.important; -const unimportant = node => !node.important; +const important = (node) => node.important; +const unimportant = (node) => !node.important; -const hasInherit = node => node.value.toLowerCase() === 'inherit'; -const hasInitial = node => node.value.toLowerCase() === 'initial'; -const hasUnset = node => node.value.toLowerCase() === 'unset'; +const hasInherit = (node) => node.value.toLowerCase() === 'inherit'; +const hasInitial = (node) => node.value.toLowerCase() === 'initial'; +const hasUnset = (node) => node.value.toLowerCase() === 'unset'; export default (props, includeCustomProps = true) => { - if (props.some(hasInherit) && !props.every(hasInherit)) { - return false; - } + if (props.some(hasInherit) && !props.every(hasInherit)) { + return false; + } - if (props.some(hasInitial) && !props.every(hasInitial)) { - return false; - } + if (props.some(hasInitial) && !props.every(hasInitial)) { + return false; + } - if (props.some(hasUnset) && !props.every(hasUnset)) { - return false; - } + if (props.some(hasUnset) && !props.every(hasUnset)) { + return false; + } - if (includeCustomProps && props.some(isCustomProp) && !props.every(isCustomProp)) { - return false; - } + if ( + includeCustomProps && + props.some(isCustomProp) && + !props.every(isCustomProp) + ) { + return false; + } - return props.every(unimportant) || props.every(important); + return props.every(unimportant) || props.every(important); }; diff --git a/packages/postcss-merge-longhand/src/lib/decl/borders.js b/packages/postcss-merge-longhand/src/lib/decl/borders.js index 142819db9..e5a3851c7 100644 --- a/packages/postcss-merge-longhand/src/lib/decl/borders.js +++ b/packages/postcss-merge-longhand/src/lib/decl/borders.js @@ -1,5 +1,5 @@ -import {list} from 'postcss'; -import {detect} from 'lerna:stylehacks'; +import { list } from 'postcss'; +import { detect } from 'lerna:stylehacks'; import insertCloned from '../insertCloned'; import parseTrbl from '../parseTrbl'; import hasAllProps from '../hasAllProps'; @@ -16,676 +16,720 @@ import isCustomProp from '../isCustomProp'; import canExplode from '../canExplode'; import getLastNode from '../getLastNode'; import parseWsc from '../parseWsc'; -import {isValidWsc} from '../validateWsc'; +import { isValidWsc } from '../validateWsc'; const wsc = ['width', 'style', 'color']; const defaults = ['medium', 'none', 'currentcolor']; -function borderProperty (...parts) { - return `border-${parts.join('-')}`; +function borderProperty(...parts) { + return `border-${parts.join('-')}`; } -function mapBorderProperty (value) { - return borderProperty(value); +function mapBorderProperty(value) { + return borderProperty(value); } const directions = trbl.map(mapBorderProperty); const properties = wsc.map(mapBorderProperty); const directionalProperties = directions.reduce( - (prev, curr) => prev.concat(wsc.map(prop => `${curr}-${prop}`)), []); + (prev, curr) => prev.concat(wsc.map((prop) => `${curr}-${prop}`)), + [] +); const precedence = [ - ['border'], - directions.concat(properties), - directionalProperties, + ['border'], + directions.concat(properties), + directionalProperties, ]; const allProperties = precedence.reduce((a, b) => a.concat(b)); -function getLevel (prop) { - for (let i = 0; i < precedence.length; i++) { - if (!!~precedence[i].indexOf(prop.toLowerCase())) { - return i; - } +function getLevel(prop) { + for (let i = 0; i < precedence.length; i++) { + if (~precedence[i].indexOf(prop.toLowerCase())) { + return i; } + } } -const isValueCustomProp = value => value && !!~value.search(/var\s*\(\s*--/i); +const isValueCustomProp = (value) => value && !!~value.search(/var\s*\(\s*--/i); -function canMergeValues (values) { - return !values.some(isValueCustomProp) || values.every(isValueCustomProp); +function canMergeValues(values) { + return !values.some(isValueCustomProp) || values.every(isValueCustomProp); } -function getColorValue (decl) { - if (decl.prop.substr(-5) === 'color') { - return decl.value; - } +function getColorValue(decl) { + if (decl.prop.substr(-5) === 'color') { + return decl.value; + } - return parseWsc(decl.value)[2] || defaults[2]; + return parseWsc(decl.value)[2] || defaults[2]; } -function diffingProps (values, nextValues) { - return wsc.reduce((prev, curr, i) => { - if (values[i] === nextValues[i]) { - return prev; - } +function diffingProps(values, nextValues) { + return wsc.reduce((prev, curr, i) => { + if (values[i] === nextValues[i]) { + return prev; + } - return [...prev, curr]; - }, []); + return [...prev, curr]; + }, []); } -function mergeRedundant ({values, nextValues, decl, nextDecl, index}) { - if (!canMerge([decl, nextDecl])) { - return; - } +function mergeRedundant({ values, nextValues, decl, nextDecl, index }) { + if (!canMerge([decl, nextDecl])) { + return; + } - if (detect(decl) || detect(nextDecl)) { - return; - } + if (detect(decl) || detect(nextDecl)) { + return; + } - const diff = diffingProps(values, nextValues); + const diff = diffingProps(values, nextValues); - if (diff.length > 1) { - return; - } + if (diff.length > 1) { + return; + } - const prop = diff.pop(); - const position = wsc.indexOf(prop); + const prop = diff.pop(); + const position = wsc.indexOf(prop); - const prop1 = `${nextDecl.prop}-${prop}`; - const prop2 = `border-${prop}`; + const prop1 = `${nextDecl.prop}-${prop}`; + const prop2 = `border-${prop}`; - let props = parseTrbl(values[position]); + let props = parseTrbl(values[position]); - props[index] = nextValues[position]; + props[index] = nextValues[position]; - const borderValue2 = values.filter((e, i) => i !== position).join(' '); - const propValue2 = minifyTrbl(props); + const borderValue2 = values.filter((e, i) => i !== position).join(' '); + const propValue2 = minifyTrbl(props); - const origLength = (minifyWsc(decl.value) + nextDecl.prop + nextDecl.value).length; - const newLength1 = decl.value.length + prop1.length + minifyWsc(nextValues[position]).length; - const newLength2 = borderValue2.length + prop2.length + propValue2.length; + const origLength = (minifyWsc(decl.value) + nextDecl.prop + nextDecl.value) + .length; + const newLength1 = + decl.value.length + prop1.length + minifyWsc(nextValues[position]).length; + const newLength2 = borderValue2.length + prop2.length + propValue2.length; - if (newLength1 < newLength2 && newLength1 < origLength) { - nextDecl.prop = prop1; - nextDecl.value = nextValues[position]; - } + if (newLength1 < newLength2 && newLength1 < origLength) { + nextDecl.prop = prop1; + nextDecl.value = nextValues[position]; + } - if (newLength2 < newLength1 && newLength2 < origLength) { - decl.value = borderValue2; - nextDecl.prop = prop2; - nextDecl.value = propValue2; - } + if (newLength2 < newLength1 && newLength2 < origLength) { + decl.value = borderValue2; + nextDecl.prop = prop2; + nextDecl.value = propValue2; + } } -function isCloseEnough (mapped) { - return (mapped[0] === mapped[1] && mapped[1] === mapped[2]) || - (mapped[1] === mapped[2] && mapped[2] === mapped[3]) || - (mapped[2] === mapped[3] && mapped[3] === mapped[0]) || - (mapped[3] === mapped[0] && mapped[0] === mapped[1]); +function isCloseEnough(mapped) { + return ( + (mapped[0] === mapped[1] && mapped[1] === mapped[2]) || + (mapped[1] === mapped[2] && mapped[2] === mapped[3]) || + (mapped[2] === mapped[3] && mapped[3] === mapped[0]) || + (mapped[3] === mapped[0] && mapped[0] === mapped[1]) + ); } -function getDistinctShorthands (mapped) { - return mapped.reduce((a, b) => { - a = Array.isArray(a) ? a : [a]; +function getDistinctShorthands(mapped) { + return mapped.reduce((a, b) => { + a = Array.isArray(a) ? a : [a]; - if (!~a.indexOf(b)) { - a.push(b); - } + if (!~a.indexOf(b)) { + a.push(b); + } - return a; - }); + return a; + }); } -function explode (rule) { - rule.walkDecls(/^border/i, decl => { - if (!canExplode(decl, false)) { - return; - } - - if (detect(decl)) { - return; - } +function explode(rule) { + rule.walkDecls(/^border/i, (decl) => { + if (!canExplode(decl, false)) { + return; + } - const prop = decl.prop.toLowerCase(); + if (detect(decl)) { + return; + } - // border -> border-trbl - if (prop === 'border') { - if (isValidWsc(parseWsc(decl.value))) { - directions.forEach((direction) => { - insertCloned(decl.parent, decl, {prop: direction}); - }); + const prop = decl.prop.toLowerCase(); - return decl.remove(); - } - } + // border -> border-trbl + if (prop === 'border') { + if (isValidWsc(parseWsc(decl.value))) { + directions.forEach((direction) => { + insertCloned(decl.parent, decl, { prop: direction }); + }); - // border-trbl -> border-trbl-wsc - if (directions.some(direction => prop === direction)) { - let values = parseWsc(decl.value); + return decl.remove(); + } + } - if (isValidWsc(values)) { - wsc.forEach((d, i) => { - insertCloned(decl.parent, decl, { - prop: `${prop}-${d}`, - value: values[i] || defaults[i], - }); - }); + // border-trbl -> border-trbl-wsc + if (directions.some((direction) => prop === direction)) { + let values = parseWsc(decl.value); - return decl.remove(); - } - } + if (isValidWsc(values)) { + wsc.forEach((d, i) => { + insertCloned(decl.parent, decl, { + prop: `${prop}-${d}`, + value: values[i] || defaults[i], + }); + }); - // border-wsc -> border-trbl-wsc - wsc.some(style => { - if (prop !== borderProperty(style)) { - return false; - } + return decl.remove(); + } + } - parseTrbl(decl.value).forEach((value, i) => { - insertCloned(decl.parent, decl, { - prop: borderProperty(trbl[i], style), - value, - }); - }); + // border-wsc -> border-trbl-wsc + wsc.some((style) => { + if (prop !== borderProperty(style)) { + return false; + } - return decl.remove(); + parseTrbl(decl.value).forEach((value, i) => { + insertCloned(decl.parent, decl, { + prop: borderProperty(trbl[i], style), + value, }); + }); + + return decl.remove(); }); + }); } -function merge (rule) { - // border-trbl-wsc -> border-trbl - trbl.forEach(direction => { - const prop = borderProperty(direction); - - mergeRules( - rule, - wsc.map(style => borderProperty(direction, style)), - (rules, lastNode) => { - if (canMerge(rules, false) && !rules.some(detect)) { - insertCloned(lastNode.parent, lastNode, { - prop, - value: rules.map(getValue).join(' '), - }); - - rules.forEach(remove); - - return true; - } - } - ); - }); +function merge(rule) { + // border-trbl-wsc -> border-trbl + trbl.forEach((direction) => { + const prop = borderProperty(direction); - // border-trbl-wsc -> border-wsc - wsc.forEach(style => { - const prop = borderProperty(style); - - mergeRules( - rule, - trbl.map(direction => borderProperty(direction, style)), - (rules, lastNode) => { - if (canMerge(rules) && !rules.some(detect)) { - insertCloned(lastNode.parent, lastNode, { - prop, - value: minifyTrbl(rules.map(getValue).join(' ')), - }); - - rules.forEach(remove); - - return true; - } - } - ); - }); + mergeRules( + rule, + wsc.map((style) => borderProperty(direction, style)), + (rules, lastNode) => { + if (canMerge(rules, false) && !rules.some(detect)) { + insertCloned(lastNode.parent, lastNode, { + prop, + value: rules.map(getValue).join(' '), + }); - // border-trbl -> border-wsc - mergeRules(rule, directions, (rules, lastNode) => { - if (rules.some(detect)) { - return; + rules.forEach(remove); + + return true; + } + } + ); + }); + + // border-trbl-wsc -> border-wsc + wsc.forEach((style) => { + const prop = borderProperty(style); + + mergeRules( + rule, + trbl.map((direction) => borderProperty(direction, style)), + (rules, lastNode) => { + if (canMerge(rules) && !rules.some(detect)) { + insertCloned(lastNode.parent, lastNode, { + prop, + value: minifyTrbl(rules.map(getValue).join(' ')), + }); + + rules.forEach(remove); + + return true; } + } + ); + }); + + // border-trbl -> border-wsc + mergeRules(rule, directions, (rules, lastNode) => { + if (rules.some(detect)) { + return; + } - const values = rules.map(({value}) => value); + const values = rules.map(({ value }) => value); - if (!canMergeValues(values)) { - return; - } + if (!canMergeValues(values)) { + return; + } - const parsed = values.map(value => parseWsc(value)); + const parsed = values.map((value) => parseWsc(value)); - if (!parsed.every(isValidWsc)) { - return; - } + if (!parsed.every(isValidWsc)) { + return; + } - wsc.forEach((d, i) => { - const value = parsed.map(v => v[i] || defaults[i]); - - if (canMergeValues(value)) { - insertCloned(lastNode.parent, lastNode, { - prop: borderProperty(d), - value: minifyTrbl(value), - }); - } else { - insertCloned(lastNode.parent, lastNode); - } + wsc.forEach((d, i) => { + const value = parsed.map((v) => v[i] || defaults[i]); + + if (canMergeValues(value)) { + insertCloned(lastNode.parent, lastNode, { + prop: borderProperty(d), + value: minifyTrbl(value), }); + } else { + insertCloned(lastNode.parent, lastNode); + } + }); - rules.forEach(remove); + rules.forEach(remove); - return true; - }); + return true; + }); - // border-wsc -> border - // border-wsc -> border + border-color - // border-wsc -> border + border-dir - mergeRules(rule, properties, (rules, lastNode) => { - if (rules.some(detect)) { - return; - } + // border-wsc -> border + // border-wsc -> border + border-color + // border-wsc -> border + border-dir + mergeRules(rule, properties, (rules, lastNode) => { + if (rules.some(detect)) { + return; + } - const values = rules.map(node => parseTrbl(node.value)); - const mapped = [0, 1, 2, 3].map(i => [values[0][i], values[1][i], values[2][i]].join(' ')); + const values = rules.map((node) => parseTrbl(node.value)); + const mapped = [0, 1, 2, 3].map((i) => + [values[0][i], values[1][i], values[2][i]].join(' ') + ); - if (!canMergeValues(mapped)) { - return; - } + if (!canMergeValues(mapped)) { + return; + } - const [width, style, color] = rules; - const reduced = getDistinctShorthands(mapped); - - if (isCloseEnough(mapped) && canMerge(rules, false)) { - const first = mapped.indexOf(reduced[0]) !== mapped.lastIndexOf(reduced[0]); - - const border = insertCloned(lastNode.parent, lastNode, { - prop: 'border', - value: first ? reduced[0] : reduced[1], - }); - - if (reduced[1]) { - const value = first ? reduced[1] : reduced[0]; - const prop = borderProperty(trbl[mapped.indexOf(value)]); - - rule.insertAfter(border, Object.assign(lastNode.clone(), { - prop, - value, - })); - } - rules.forEach(remove); - - return true; - } else if (reduced.length === 1) { - rule.insertBefore(color, Object.assign(lastNode.clone(), { - prop: 'border', - value: [width, style].map(getValue).join(' '), - })); - rules.filter(node => node.prop.toLowerCase() !== properties[2]).forEach(remove); - - return true; - } - }); + const [width, style, color] = rules; + const reduced = getDistinctShorthands(mapped); - // border-wsc -> border + border-trbl - mergeRules(rule, properties, (rules, lastNode) => { - if (rules.some(detect)) { - return; - } + if (isCloseEnough(mapped) && canMerge(rules, false)) { + const first = + mapped.indexOf(reduced[0]) !== mapped.lastIndexOf(reduced[0]); + + const border = insertCloned(lastNode.parent, lastNode, { + prop: 'border', + value: first ? reduced[0] : reduced[1], + }); + + if (reduced[1]) { + const value = first ? reduced[1] : reduced[0]; + const prop = borderProperty(trbl[mapped.indexOf(value)]); + + rule.insertAfter( + border, + Object.assign(lastNode.clone(), { + prop, + value, + }) + ); + } + rules.forEach(remove); + + return true; + } else if (reduced.length === 1) { + rule.insertBefore( + color, + Object.assign(lastNode.clone(), { + prop: 'border', + value: [width, style].map(getValue).join(' '), + }) + ); + rules + .filter((node) => node.prop.toLowerCase() !== properties[2]) + .forEach(remove); + + return true; + } + }); + + // border-wsc -> border + border-trbl + mergeRules(rule, properties, (rules, lastNode) => { + if (rules.some(detect)) { + return; + } - const values = rules.map(node => parseTrbl(node.value)); - const mapped = [0, 1, 2, 3].map(i => [values[0][i], values[1][i], values[2][i]].join(' ')); - const reduced = getDistinctShorthands(mapped); - const none = 'medium none currentcolor'; - - if (reduced.length > 1 && reduced.length < 4 && reduced.includes(none)) { - const filtered = mapped.filter(p => p !== none); - const mostCommon = reduced.sort((a, b) => - mapped.filter(v => v === b).length - mapped.filter(v => v === a).length)[0]; - const borderValue = reduced.length === 2 ? filtered[0] : mostCommon; - - rule.insertBefore(lastNode, Object.assign(lastNode.clone(), { - prop: 'border', - value: borderValue, - })); - - directions.forEach((dir, i) => { - if (mapped[i] !== borderValue) { - rule.insertBefore(lastNode, Object.assign(lastNode.clone(), { - prop: dir, - value: mapped[i], - })); - } - }); - - rules.forEach(remove); - - return true; + const values = rules.map((node) => parseTrbl(node.value)); + const mapped = [0, 1, 2, 3].map((i) => + [values[0][i], values[1][i], values[2][i]].join(' ') + ); + const reduced = getDistinctShorthands(mapped); + const none = 'medium none currentcolor'; + + if (reduced.length > 1 && reduced.length < 4 && reduced.includes(none)) { + const filtered = mapped.filter((p) => p !== none); + const mostCommon = reduced.sort( + (a, b) => + mapped.filter((v) => v === b).length - + mapped.filter((v) => v === a).length + )[0]; + const borderValue = reduced.length === 2 ? filtered[0] : mostCommon; + + rule.insertBefore( + lastNode, + Object.assign(lastNode.clone(), { + prop: 'border', + value: borderValue, + }) + ); + + directions.forEach((dir, i) => { + if (mapped[i] !== borderValue) { + rule.insertBefore( + lastNode, + Object.assign(lastNode.clone(), { + prop: dir, + value: mapped[i], + }) + ); } + }); + + rules.forEach(remove); + + return true; + } + }); + + // border-trbl -> border + // border-trbl -> border + border-trbl + mergeRules(rule, directions, (rules, lastNode) => { + if (rules.some(detect)) { + return; + } + + const values = rules.map((node) => { + const wscValue = parseWsc(node.value); + + if (!isValidWsc(wscValue)) { + return node.value; + } + + return wscValue.map((value, i) => value || defaults[i]).join(' '); }); - // border-trbl -> border - // border-trbl -> border + border-trbl - mergeRules(rule, directions, (rules, lastNode) => { - if (rules.some(detect)) { - return; + const reduced = getDistinctShorthands(values); + + if (isCloseEnough(values)) { + const first = + values.indexOf(reduced[0]) !== values.lastIndexOf(reduced[0]); + + rule.insertBefore( + lastNode, + Object.assign(lastNode.clone(), { + prop: 'border', + value: minifyWsc(first ? values[0] : values[1]), + }) + ); + + if (reduced[1]) { + const value = first ? reduced[1] : reduced[0]; + const prop = directions[values.indexOf(value)]; + rule.insertBefore( + lastNode, + Object.assign(lastNode.clone(), { + prop: prop, + value: minifyWsc(value), + }) + ); + } + + rules.forEach(remove); + + return true; + } + }); + + // border-trbl-wsc + border-trbl (custom prop) -> border-trbl + border-trbl-wsc (custom prop) + directions.forEach((direction) => { + wsc.forEach((style, i) => { + const prop = `${direction}-${style}`; + + mergeRules(rule, [direction, prop], (rules, lastNode) => { + if (lastNode.prop !== direction) { + return; } - const values = rules.map(node => { - const wscValue = parseWsc(node.value); + const values = parseWsc(lastNode.value); - if (!isValidWsc(wscValue)) { - return node.value; - } + if (!isValidWsc(values)) { + return; + } - return wscValue.map((value, i) => value || defaults[i]).join(' '); - }); + const wscProp = rules.filter((r) => r !== lastNode)[0]; - const reduced = getDistinctShorthands(values); + if (!isValueCustomProp(values[i]) || isCustomProp(wscProp)) { + return; + } - if (isCloseEnough(values)) { - const first = values.indexOf(reduced[0]) !== values.lastIndexOf(reduced[0]); + const wscValue = values[i]; - rule.insertBefore(lastNode, Object.assign(lastNode.clone(), { - prop: 'border', - value: minifyWsc(first ? values[0] : values[1]), - })); + values[i] = wscProp.value; - if (reduced[1]) { - const value = first ? reduced[1] : reduced[0]; - const prop = directions[values.indexOf(value)]; - rule.insertBefore(lastNode, Object.assign(lastNode.clone(), { - prop: prop, - value: minifyWsc(value), - })); - } + if (canMerge(rules, false) && !rules.some(detect)) { + insertCloned(lastNode.parent, lastNode, { + prop, + value: wscValue, + }); + lastNode.value = minifyWsc(values); - rules.forEach(remove); + wscProp.remove(); - return true; + return true; } + }); }); - - // border-trbl-wsc + border-trbl (custom prop) -> border-trbl + border-trbl-wsc (custom prop) - directions.forEach(direction => { - wsc.forEach((style, i) => { - const prop = `${direction}-${style}`; - - mergeRules( - rule, - [direction, prop], - (rules, lastNode) => { - if (lastNode.prop !== direction) { - return; - } - - const values = parseWsc(lastNode.value); - - if (!isValidWsc(values)) { - return; - } - - const wscProp = rules.filter(r => r !== lastNode)[0]; - - if (!isValueCustomProp(values[i]) || isCustomProp(wscProp)) { - return; - } - - const wscValue = values[i]; - - values[i] = wscProp.value; - - if (canMerge(rules, false) && !rules.some(detect)) { - insertCloned(lastNode.parent, lastNode, { - prop, - value: wscValue, - }); - lastNode.value = minifyWsc(values); - - wscProp.remove(); - - return true; - } - } - ); - }); - }); + }); - // border-wsc + border (custom prop) -> border + border-wsc (custom prop) - wsc.forEach((style, i) => { - const prop = borderProperty(style); - mergeRules( - rule, - ['border', prop], - (rules, lastNode) => { - if (lastNode.prop !== 'border') { - return; - } - - const values = parseWsc(lastNode.value); - - if (!isValidWsc(values)) { - return; - } - - const wscProp = rules.filter(r => r !== lastNode)[0]; - - if (!isValueCustomProp(values[i]) || isCustomProp(wscProp)) { - return; - } - - const wscValue = values[i]; - - values[i] = wscProp.value; - - if (canMerge(rules, false) && !rules.some(detect)) { - insertCloned(lastNode.parent, lastNode, { - prop, - value: wscValue, - }); - lastNode.value = minifyWsc(values); - wscProp.remove(); - - return true; - } - } - ); - }); - - // optimize border-trbl - let decls = getDecls(rule, directions); + // border-wsc + border (custom prop) -> border + border-wsc (custom prop) + wsc.forEach((style, i) => { + const prop = borderProperty(style); + mergeRules(rule, ['border', prop], (rules, lastNode) => { + if (lastNode.prop !== 'border') { + return; + } - while (decls.length) { - const lastNode = decls[decls.length - 1]; + const values = parseWsc(lastNode.value); - wsc.forEach((d, i) => { - const names = directions.filter(name => name !== lastNode.prop).map(name => `${name}-${d}`); + if (!isValidWsc(values)) { + return; + } - let nodes = rule.nodes.slice(0, rule.nodes.indexOf(lastNode)); + const wscProp = rules.filter((r) => r !== lastNode)[0]; - const border = getLastNode(nodes, 'border'); + if (!isValueCustomProp(values[i]) || isCustomProp(wscProp)) { + return; + } - if (border) { - nodes = nodes.slice(nodes.indexOf(border)); - } + const wscValue = values[i]; - const props = nodes.filter(node => node.prop && ~names.indexOf(node.prop) && node.important === lastNode.important); - const rules = getRules(props, names); + values[i] = wscProp.value; - if (hasAllProps(rules, ...names) && !rules.some(detect)) { - const values = rules.map(node => node ? node.value : null); - const filteredValues = values.filter(Boolean); - const lastNodeValue = list.space(lastNode.value)[i]; + if (canMerge(rules, false) && !rules.some(detect)) { + insertCloned(lastNode.parent, lastNode, { + prop, + value: wscValue, + }); + lastNode.value = minifyWsc(values); + wscProp.remove(); - values[directions.indexOf(lastNode.prop)] = lastNodeValue; + return true; + } + }); + }); - let value = minifyTrbl(values.join(' ')); + // optimize border-trbl + let decls = getDecls(rule, directions); - if ( - filteredValues[0] === filteredValues[1] && - filteredValues[1] === filteredValues[2] - ) { - value = filteredValues[0]; - } + while (decls.length) { + const lastNode = decls[decls.length - 1]; - let refNode = props[props.length - 1]; + wsc.forEach((d, i) => { + const names = directions + .filter((name) => name !== lastNode.prop) + .map((name) => `${name}-${d}`); - if (value === lastNodeValue) { - refNode = lastNode; - let valueArray = list.space(lastNode.value); - valueArray.splice(i, 1); - lastNode.value = valueArray.join(' '); - } + let nodes = rule.nodes.slice(0, rule.nodes.indexOf(lastNode)); - insertCloned(refNode.parent, refNode, { - prop: borderProperty(d), - value, - }); + const border = getLastNode(nodes, 'border'); - decls = decls.filter(node => !~rules.indexOf(node)); - rules.forEach(remove); - } - }); + if (border) { + nodes = nodes.slice(nodes.indexOf(border)); + } - decls = decls.filter(node => node !== lastNode); - } + const props = nodes.filter( + (node) => + node.prop && + ~names.indexOf(node.prop) && + node.important === lastNode.important + ); + const rules = getRules(props, names); - rule.walkDecls('border', decl => { - const nextDecl = decl.next(); + if (hasAllProps(rules, ...names) && !rules.some(detect)) { + const values = rules.map((node) => (node ? node.value : null)); + const filteredValues = values.filter(Boolean); + const lastNodeValue = list.space(lastNode.value)[i]; - if (!nextDecl || nextDecl.type !== 'decl') { - return; - } + values[directions.indexOf(lastNode.prop)] = lastNodeValue; - const index = directions.indexOf(nextDecl.prop); + let value = minifyTrbl(values.join(' ')); - if (!~index) { - return; + if ( + filteredValues[0] === filteredValues[1] && + filteredValues[1] === filteredValues[2] + ) { + value = filteredValues[0]; } - const values = parseWsc(decl.value); - const nextValues = parseWsc(nextDecl.value); - - if (!isValidWsc(values) || !isValidWsc(nextValues)) { - return; + let refNode = props[props.length - 1]; + + if (value === lastNodeValue) { + refNode = lastNode; + let valueArray = list.space(lastNode.value); + valueArray.splice(i, 1); + lastNode.value = valueArray.join(' '); } - - const config = { - values, - nextValues, - decl, - nextDecl, - index, - }; - - return mergeRedundant(config); + + insertCloned(refNode.parent, refNode, { + prop: borderProperty(d), + value, + }); + + decls = decls.filter((node) => !~rules.indexOf(node)); + rules.forEach(remove); + } }); - rule.walkDecls(/^border($|-(top|right|bottom|left)$)/i, decl => { - let values = parseWsc(decl.value); + decls = decls.filter((node) => node !== lastNode); + } - if (!isValidWsc(values)) { - return; - } + rule.walkDecls('border', (decl) => { + const nextDecl = decl.next(); - const position = directions.indexOf(decl.prop); - let dirs = [...directions]; + if (!nextDecl || nextDecl.type !== 'decl') { + return; + } - dirs.splice(position, 1); - wsc.forEach((d, i) => { - const props = dirs.map(dir => `${dir}-${d}`); + const index = directions.indexOf(nextDecl.prop); - mergeRules(rule, [decl.prop, ...props], (rules) => { - if (!rules.includes(decl)) { - return; - } + if (!~index) { + return; + } - const longhands = rules.filter(p => p !== decl); + const values = parseWsc(decl.value); + const nextValues = parseWsc(nextDecl.value); - if (longhands[0].value.toLowerCase() === longhands[1].value.toLowerCase() && - longhands[1].value.toLowerCase() === longhands[2].value.toLowerCase() && - longhands[0].value.toLowerCase() === values[i].toLowerCase() - ) { - longhands.forEach(remove); + if (!isValidWsc(values) || !isValidWsc(nextValues)) { + return; + } - insertCloned(decl.parent, decl, { - prop: borderProperty(d), - value: values[i], - }); + const config = { + values, + nextValues, + decl, + nextDecl, + index, + }; - values[i] = null; - } - }); + return mergeRedundant(config); + }); - const newValue = values.join(' '); + rule.walkDecls(/^border($|-(top|right|bottom|left)$)/i, (decl) => { + let values = parseWsc(decl.value); - if (newValue) { - decl.value = newValue; - } else { - decl.remove(); - } - }); - }); - - // clean-up values - rule.walkDecls(/^border($|-(top|right|bottom|left)$)/i, decl => { - decl.value = minifyWsc(decl.value); - }); + if (!isValidWsc(values)) { + return; + } - // border-spacing-hv -> border-spacing - rule.walkDecls(/^border-spacing$/i, decl => { - const value = list.space(decl.value); + const position = directions.indexOf(decl.prop); + let dirs = [...directions]; - // merge vertical and horizontal dups - if (value.length > 1 && value[0] === value[1]) { - decl.value = value.slice(1).join(' '); + dirs.splice(position, 1); + wsc.forEach((d, i) => { + const props = dirs.map((dir) => `${dir}-${d}`); + + mergeRules(rule, [decl.prop, ...props], (rules) => { + if (!rules.includes(decl)) { + return; } - }); - // clean-up rules - decls = getDecls(rule, allProperties); - - while (decls.length) { - const lastNode = decls[decls.length - 1]; - const lastPart = lastNode.prop.split('-').pop(); - - // remove properties of lower precedence - const lesser = decls.filter(node => - !detect(lastNode) && - !detect(node) && - !isCustomProp(lastNode) && - node !== lastNode && - node.important === lastNode.important && - getLevel(node.prop) > getLevel(lastNode.prop) && - (!!~node.prop.toLowerCase().indexOf(lastNode.prop) || node.prop.toLowerCase().endsWith(lastPart))); - - lesser.forEach(remove); - decls = decls.filter(node => !~lesser.indexOf(node)); - - // get duplicate properties - let duplicates = decls.filter(node => - !detect(lastNode) && - !detect(node) && - node !== lastNode && - node.important === lastNode.important && - node.prop === lastNode.prop && - !(!isCustomProp(node) && isCustomProp(lastNode)) - ); + const longhands = rules.filter((p) => p !== decl); - if (duplicates.length) { - if (/hsla\(|rgba\(/i.test(getColorValue(lastNode))) { - const preserve = duplicates - .filter(node => !/hsla\(|rgba\(/i.test(getColorValue(node))) - .pop(); + if ( + longhands[0].value.toLowerCase() === + longhands[1].value.toLowerCase() && + longhands[1].value.toLowerCase() === + longhands[2].value.toLowerCase() && + (values[i] !== undefined && + longhands[0].value.toLowerCase() === values[i].toLowerCase()) + ) { + longhands.forEach(remove); - duplicates = duplicates.filter(node => node !== preserve); - } + insertCloned(decl.parent, decl, { + prop: borderProperty(d), + value: values[i], + }); - duplicates.forEach(remove); + values[i] = null; } + }); - decls = decls.filter(node => node !== lastNode && !~duplicates.indexOf(node)); + const newValue = values.join(' '); + + if (newValue) { + decl.value = newValue; + } else { + decl.remove(); + } + }); + }); + + // clean-up values + rule.walkDecls(/^border($|-(top|right|bottom|left)$)/i, (decl) => { + decl.value = minifyWsc(decl.value); + }); + + // border-spacing-hv -> border-spacing + rule.walkDecls(/^border-spacing$/i, (decl) => { + const value = list.space(decl.value); + + // merge vertical and horizontal dups + if (value.length > 1 && value[0] === value[1]) { + decl.value = value.slice(1).join(' '); + } + }); + + // clean-up rules + decls = getDecls(rule, allProperties); + + while (decls.length) { + const lastNode = decls[decls.length - 1]; + const lastPart = lastNode.prop.split('-').pop(); + + // remove properties of lower precedence + const lesser = decls.filter( + (node) => + !detect(lastNode) && + !detect(node) && + !isCustomProp(lastNode) && + node !== lastNode && + node.important === lastNode.important && + getLevel(node.prop) > getLevel(lastNode.prop) && + (!!~node.prop.toLowerCase().indexOf(lastNode.prop) || + node.prop.toLowerCase().endsWith(lastPart)) + ); + + lesser.forEach(remove); + decls = decls.filter((node) => !~lesser.indexOf(node)); + + // get duplicate properties + let duplicates = decls.filter( + (node) => + !detect(lastNode) && + !detect(node) && + node !== lastNode && + node.important === lastNode.important && + node.prop === lastNode.prop && + !(!isCustomProp(node) && isCustomProp(lastNode)) + ); + + if (duplicates.length) { + if (/hsla\(|rgba\(/i.test(getColorValue(lastNode))) { + const preserve = duplicates + .filter((node) => !/hsla\(|rgba\(/i.test(getColorValue(node))) + .pop(); + + duplicates = duplicates.filter((node) => node !== preserve); + } + + duplicates.forEach(remove); } + + decls = decls.filter( + (node) => node !== lastNode && !~duplicates.indexOf(node) + ); + } } export default { - explode, - merge, + explode, + merge, }; diff --git a/packages/postcss-merge-longhand/src/lib/decl/boxBase.js b/packages/postcss-merge-longhand/src/lib/decl/boxBase.js index 81ef44275..321f5f886 100644 --- a/packages/postcss-merge-longhand/src/lib/decl/boxBase.js +++ b/packages/postcss-merge-longhand/src/lib/decl/boxBase.js @@ -1,4 +1,4 @@ -import {detect} from 'lerna:stylehacks'; +import { detect } from 'lerna:stylehacks'; import canMerge from '../canMerge'; import getDecls from '../getDecls'; import minifyTrbl from '../minifyTrbl'; @@ -11,80 +11,86 @@ import trbl from '../trbl'; import isCustomProp from '../isCustomProp'; import canExplode from '../canExplode'; -export default prop => { - const properties = trbl.map(direction => `${prop}-${direction}`); +export default (prop) => { + const properties = trbl.map((direction) => `${prop}-${direction}`); - const cleanup = rule => { - let decls = getDecls(rule, [prop].concat(properties)); + const cleanup = (rule) => { + let decls = getDecls(rule, [prop].concat(properties)); - while (decls.length) { - const lastNode = decls[decls.length - 1]; + while (decls.length) { + const lastNode = decls[decls.length - 1]; - // remove properties of lower precedence - const lesser = decls.filter(node => - !detect(lastNode) && - !detect(node) && - node !== lastNode && - node.important === lastNode.important && - lastNode.prop === prop && node.prop !== lastNode.prop); + // remove properties of lower precedence + const lesser = decls.filter( + (node) => + !detect(lastNode) && + !detect(node) && + node !== lastNode && + node.important === lastNode.important && + lastNode.prop === prop && + node.prop !== lastNode.prop + ); - lesser.forEach(remove); - decls = decls.filter(node => !~lesser.indexOf(node)); + lesser.forEach(remove); + decls = decls.filter((node) => !~lesser.indexOf(node)); - // get duplicate properties - let duplicates = decls.filter(node => - !detect(lastNode) && - !detect(node) && - node !== lastNode && - node.important === lastNode.important && - node.prop === lastNode.prop && - !(!isCustomProp(node) && isCustomProp(lastNode)) - ); + // get duplicate properties + let duplicates = decls.filter( + (node) => + !detect(lastNode) && + !detect(node) && + node !== lastNode && + node.important === lastNode.important && + node.prop === lastNode.prop && + !(!isCustomProp(node) && isCustomProp(lastNode)) + ); - duplicates.forEach(remove); - decls = decls.filter(node => node !== lastNode && !~duplicates.indexOf(node)); - } - }; + duplicates.forEach(remove); + decls = decls.filter( + (node) => node !== lastNode && !~duplicates.indexOf(node) + ); + } + }; - const processor = { - explode: rule => { - rule.walkDecls(new RegExp("^" + prop + "$", "i"), decl => { - if (!canExplode(decl)) { - return; - } + const processor = { + explode: (rule) => { + rule.walkDecls(new RegExp('^' + prop + '$', 'i'), (decl) => { + if (!canExplode(decl)) { + return; + } - if (detect(decl)) { - return; - } + if (detect(decl)) { + return; + } - const values = parseTrbl(decl.value); + const values = parseTrbl(decl.value); - trbl.forEach((direction, index) => { - insertCloned(decl.parent, decl, { - prop: properties[index], - value: values[index], - }); - }); + trbl.forEach((direction, index) => { + insertCloned(decl.parent, decl, { + prop: properties[index], + value: values[index], + }); + }); - decl.remove(); - }); - }, - merge: rule => { - mergeRules(rule, properties, (rules, lastNode) => { - if (canMerge(rules) && !rules.some(detect)) { - insertCloned(lastNode.parent, lastNode, { - prop, - value: minifyTrbl(mergeValues(...rules)), - }); - rules.forEach(remove); + decl.remove(); + }); + }, + merge: (rule) => { + mergeRules(rule, properties, (rules, lastNode) => { + if (canMerge(rules) && !rules.some(detect)) { + insertCloned(lastNode.parent, lastNode, { + prop, + value: minifyTrbl(mergeValues(...rules)), + }); + rules.forEach(remove); - return true; - } - }); + return true; + } + }); - cleanup(rule); - }, - }; + cleanup(rule); + }, + }; - return processor; + return processor; }; diff --git a/packages/postcss-merge-longhand/src/lib/decl/columns.js b/packages/postcss-merge-longhand/src/lib/decl/columns.js index e9458ad36..0134e3121 100644 --- a/packages/postcss-merge-longhand/src/lib/decl/columns.js +++ b/packages/postcss-merge-longhand/src/lib/decl/columns.js @@ -1,6 +1,6 @@ -import {list} from 'postcss'; -import {unit} from 'postcss-value-parser'; -import {detect} from 'lerna:stylehacks'; +import { list } from 'postcss'; +import { unit } from 'postcss-value-parser'; +import { detect } from 'lerna:stylehacks'; import canMerge from '../canMerge'; import getDecls from '../getDecls'; import getValue from '../getValue'; @@ -23,107 +23,116 @@ const inherit = 'inherit'; * Specification link: https://www.w3.org/TR/css3-multicol/ */ -function normalize (values) { - if (values[0].toLowerCase() === auto) { - return values[1]; - } +function normalize(values) { + if (values[0].toLowerCase() === auto) { + return values[1]; + } - if (values[1].toLowerCase() === auto) { - return values[0]; - } + if (values[1].toLowerCase() === auto) { + return values[0]; + } - if (values[0].toLowerCase() === inherit && values[1].toLowerCase() === inherit) { - return inherit; - } + if ( + values[0].toLowerCase() === inherit && + values[1].toLowerCase() === inherit + ) { + return inherit; + } - return values.join(' '); + return values.join(' '); } -function explode (rule) { - rule.walkDecls(/^columns$/i, decl => { - if (!canExplode(decl)) { - return; - } - - if (detect(decl)) { - return; - } +function explode(rule) { + rule.walkDecls(/^columns$/i, (decl) => { + if (!canExplode(decl)) { + return; + } - let values = list.space(decl.value); + if (detect(decl)) { + return; + } - if (values.length === 1) { - values.push(auto); - } + let values = list.space(decl.value); - values.forEach((value, i) => { - let prop = properties[1]; + if (values.length === 1) { + values.push(auto); + } - if (value.toLowerCase() === auto) { - prop = properties[i]; - } else if (unit(value).unit) { - prop = properties[0]; - } + values.forEach((value, i) => { + let prop = properties[1]; - insertCloned(decl.parent, decl, { - prop, - value, - }); - }); + if (value.toLowerCase() === auto) { + prop = properties[i]; + } else if (unit(value).unit) { + prop = properties[0]; + } - decl.remove(); + insertCloned(decl.parent, decl, { + prop, + value, + }); }); + + decl.remove(); + }); } -function cleanup (rule) { - let decls = getDecls(rule, ['columns'].concat(properties)); - - while (decls.length) { - const lastNode = decls[decls.length - 1]; - - // remove properties of lower precedence - const lesser = decls.filter(node => - !detect(lastNode) && - !detect(node) && - node !== lastNode && - node.important === lastNode.important && - lastNode.prop === 'columns' && node.prop !== lastNode.prop); - - lesser.forEach(remove); - decls = decls.filter(node => !~lesser.indexOf(node)); - - // get duplicate properties - let duplicates = decls.filter(node => - !detect(lastNode) && - !detect(node) && - node !== lastNode && - node.important === lastNode.important && - node.prop === lastNode.prop && - !(!isCustomProp(node) && isCustomProp(lastNode)) - ); - - duplicates.forEach(remove); - decls = decls.filter(node => node !== lastNode && !~duplicates.indexOf(node)); - } +function cleanup(rule) { + let decls = getDecls(rule, ['columns'].concat(properties)); + + while (decls.length) { + const lastNode = decls[decls.length - 1]; + + // remove properties of lower precedence + const lesser = decls.filter( + (node) => + !detect(lastNode) && + !detect(node) && + node !== lastNode && + node.important === lastNode.important && + lastNode.prop === 'columns' && + node.prop !== lastNode.prop + ); + + lesser.forEach(remove); + decls = decls.filter((node) => !~lesser.indexOf(node)); + + // get duplicate properties + let duplicates = decls.filter( + (node) => + !detect(lastNode) && + !detect(node) && + node !== lastNode && + node.important === lastNode.important && + node.prop === lastNode.prop && + !(!isCustomProp(node) && isCustomProp(lastNode)) + ); + + duplicates.forEach(remove); + decls = decls.filter( + (node) => node !== lastNode && !~duplicates.indexOf(node) + ); + } } -function merge (rule) { - mergeRules(rule, properties, (rules, lastNode) => { - if (canMerge(rules) && !rules.some(detect)) { - insertCloned(lastNode.parent, lastNode, { - prop: 'columns', - value: normalize(rules.map(getValue)), - }); +function merge(rule) { + mergeRules(rule, properties, (rules, lastNode) => { + if (canMerge(rules) && !rules.some(detect)) { + insertCloned(lastNode.parent, lastNode, { + prop: 'columns', + value: normalize(rules.map(getValue)), + }); - rules.forEach(remove); + rules.forEach(remove); - return true; - } - }); + return true; + } + }); - cleanup(rule); + cleanup(rule); } export default { - explode, - merge, + explode, + merge, }; diff --git a/packages/postcss-merge-longhand/src/lib/decl/index.js b/packages/postcss-merge-longhand/src/lib/decl/index.js index 75af8ecb7..a1ccbe50f 100644 --- a/packages/postcss-merge-longhand/src/lib/decl/index.js +++ b/packages/postcss-merge-longhand/src/lib/decl/index.js @@ -3,9 +3,4 @@ import columns from './columns'; import margin from './margin'; import padding from './padding'; -export default [ - borders, - columns, - margin, - padding, -]; +export default [borders, columns, margin, padding]; diff --git a/packages/postcss-merge-longhand/src/lib/getDecls.js b/packages/postcss-merge-longhand/src/lib/getDecls.js index d2827be9a..05cf5e1c8 100644 --- a/packages/postcss-merge-longhand/src/lib/getDecls.js +++ b/packages/postcss-merge-longhand/src/lib/getDecls.js @@ -1,3 +1,5 @@ -export default function getDecls (rule, properties) { - return rule.nodes.filter(({prop}) => prop && ~properties.indexOf(prop.toLowerCase())); +export default function getDecls(rule, properties) { + return rule.nodes.filter( + ({ prop }) => prop && ~properties.indexOf(prop.toLowerCase()) + ); } diff --git a/packages/postcss-merge-longhand/src/lib/getLastNode.js b/packages/postcss-merge-longhand/src/lib/getLastNode.js index d6ccef1ad..9c105f1f5 100644 --- a/packages/postcss-merge-longhand/src/lib/getLastNode.js +++ b/packages/postcss-merge-longhand/src/lib/getLastNode.js @@ -1,3 +1,3 @@ export default (rule, prop) => { - return rule.filter(n => n.prop && n.prop.toLowerCase() === prop).pop(); + return rule.filter((n) => n.prop && n.prop.toLowerCase() === prop).pop(); }; diff --git a/packages/postcss-merge-longhand/src/lib/getRules.js b/packages/postcss-merge-longhand/src/lib/getRules.js index c77b9014a..73f737c9c 100644 --- a/packages/postcss-merge-longhand/src/lib/getRules.js +++ b/packages/postcss-merge-longhand/src/lib/getRules.js @@ -1,9 +1,9 @@ -import getLastNode from "./getLastNode"; +import getLastNode from './getLastNode'; -export default function getRules (props, properties) { - return properties - .map(property => { - return getLastNode(props, property); - }) - .filter(Boolean); +export default function getRules(props, properties) { + return properties + .map((property) => { + return getLastNode(props, property); + }) + .filter(Boolean); } diff --git a/packages/postcss-merge-longhand/src/lib/getValue.js b/packages/postcss-merge-longhand/src/lib/getValue.js index 9b4c78d75..9bfe81ba1 100644 --- a/packages/postcss-merge-longhand/src/lib/getValue.js +++ b/packages/postcss-merge-longhand/src/lib/getValue.js @@ -1,3 +1,3 @@ -export default function getValue ({value}) { - return value; +export default function getValue({ value }) { + return value; } diff --git a/packages/postcss-merge-longhand/src/lib/hasAllProps.js b/packages/postcss-merge-longhand/src/lib/hasAllProps.js index b3b850242..546f5c539 100644 --- a/packages/postcss-merge-longhand/src/lib/hasAllProps.js +++ b/packages/postcss-merge-longhand/src/lib/hasAllProps.js @@ -1,3 +1,5 @@ export default (rule, ...props) => { - return props.every(p => rule.some(({prop}) => prop && ~prop.toLowerCase().indexOf(p))); + return props.every((p) => + rule.some(({ prop }) => prop && ~prop.toLowerCase().indexOf(p)) + ); }; diff --git a/packages/postcss-merge-longhand/src/lib/insertCloned.js b/packages/postcss-merge-longhand/src/lib/insertCloned.js index 564702aaa..b6a60bc68 100644 --- a/packages/postcss-merge-longhand/src/lib/insertCloned.js +++ b/packages/postcss-merge-longhand/src/lib/insertCloned.js @@ -1,7 +1,7 @@ -export default function insertCloned (rule, decl, props) { - const newNode = Object.assign(decl.clone(), props); +export default function insertCloned(rule, decl, props) { + const newNode = Object.assign(decl.clone(), props); - rule.insertAfter(decl, newNode); + rule.insertAfter(decl, newNode); - return newNode; -}; + return newNode; +} diff --git a/packages/postcss-merge-longhand/src/lib/isCustomProp.js b/packages/postcss-merge-longhand/src/lib/isCustomProp.js index 0a5c284d6..391c2cffc 100644 --- a/packages/postcss-merge-longhand/src/lib/isCustomProp.js +++ b/packages/postcss-merge-longhand/src/lib/isCustomProp.js @@ -1,2 +1 @@ -export default node => - ~node.value.search(/var\s*\(\s*--/i); +export default (node) => ~node.value.search(/var\s*\(\s*--/i); diff --git a/packages/postcss-merge-longhand/src/lib/mergeRules.js b/packages/postcss-merge-longhand/src/lib/mergeRules.js index 85933e817..c05bdddb5 100644 --- a/packages/postcss-merge-longhand/src/lib/mergeRules.js +++ b/packages/postcss-merge-longhand/src/lib/mergeRules.js @@ -2,42 +2,42 @@ import hasAllProps from './hasAllProps'; import getDecls from './getDecls'; import getRules from './getRules'; -function isConflictingProp (propA, propB) { - if (!propB.prop || propB.important !== propA.important) { - return; - } +function isConflictingProp(propA, propB) { + if (!propB.prop || propB.important !== propA.important) { + return; + } - const parts = propA.prop.split('-'); + const parts = propA.prop.split('-'); - return parts.some(() => { - parts.pop(); + return parts.some(() => { + parts.pop(); - return parts.join('-') === propB.prop; - }); + return parts.join('-') === propB.prop; + }); } -function hasConflicts (match, nodes) { - const firstNode = Math.min.apply(null, match.map(n => nodes.indexOf(n))); - const lastNode = Math.max.apply(null, match.map(n => nodes.indexOf(n))); - const between = nodes.slice(firstNode + 1, lastNode); +function hasConflicts(match, nodes) { + const firstNode = Math.min.apply(null, match.map((n) => nodes.indexOf(n))); + const lastNode = Math.max.apply(null, match.map((n) => nodes.indexOf(n))); + const between = nodes.slice(firstNode + 1, lastNode); - return match.some(a => between.some(b => isConflictingProp(a, b))); + return match.some((a) => between.some((b) => isConflictingProp(a, b))); } -export default function mergeRules (rule, properties, callback) { - let decls = getDecls(rule, properties); - - while (decls.length) { - const last = decls[decls.length - 1]; - const props = decls.filter(node => node.important === last.important); - const rules = getRules(props, properties); +export default function mergeRules(rule, properties, callback) { + let decls = getDecls(rule, properties); - if (hasAllProps(rules, ...properties) && !hasConflicts(rules, rule.nodes)) { - if (callback(rules, last, props)) { - decls = decls.filter(node => !~rules.indexOf(node)); - } - } + while (decls.length) { + const last = decls[decls.length - 1]; + const props = decls.filter((node) => node.important === last.important); + const rules = getRules(props, properties); - decls = decls.filter(node => node !== last); + if (hasAllProps(rules, ...properties) && !hasConflicts(rules, rule.nodes)) { + if (callback(rules, last, props)) { + decls = decls.filter((node) => !~rules.indexOf(node)); + } } + + decls = decls.filter((node) => node !== last); + } } diff --git a/packages/postcss-merge-longhand/src/lib/minifyTrbl.js b/packages/postcss-merge-longhand/src/lib/minifyTrbl.js index 108d21d40..a84e0ca01 100644 --- a/packages/postcss-merge-longhand/src/lib/minifyTrbl.js +++ b/packages/postcss-merge-longhand/src/lib/minifyTrbl.js @@ -1,19 +1,19 @@ import parseTrbl from './parseTrbl'; -export default v => { - const value = parseTrbl(v); +export default (v) => { + const value = parseTrbl(v); - if (value[3] === value[1]) { - value.pop(); + if (value[3] === value[1]) { + value.pop(); - if (value[2] === value[0]) { - value.pop(); + if (value[2] === value[0]) { + value.pop(); - if (value[0] === value[1]) { - value.pop(); - } - } + if (value[0] === value[1]) { + value.pop(); + } } + } - return value.join(' '); + return value.join(' '); }; diff --git a/packages/postcss-merge-longhand/src/lib/minifyWsc.js b/packages/postcss-merge-longhand/src/lib/minifyWsc.js index 2b2e47964..96c070a09 100644 --- a/packages/postcss-merge-longhand/src/lib/minifyWsc.js +++ b/packages/postcss-merge-longhand/src/lib/minifyWsc.js @@ -1,23 +1,29 @@ import parseWsc from './parseWsc'; import minifyTrbl from './minifyTrbl'; -import {isValidWsc} from './validateWsc'; +import { isValidWsc } from './validateWsc'; const defaults = ['medium', 'none', 'currentcolor']; -export default v => { - const values = parseWsc(v); +export default (v) => { + const values = parseWsc(v); - if (!isValidWsc(values)) { - return minifyTrbl(v); - } + if (!isValidWsc(values)) { + return minifyTrbl(v); + } - const value = [...values, ''].reduceRight((prev, cur, i, arr) => { - if (cur === undefined || cur.toLowerCase() === defaults[i] && (!i ||(arr[i-1] || '').toLowerCase() !== cur.toLowerCase())) { - return prev; - } + const value = [...values, ''] + .reduceRight((prev, cur, i, arr) => { + if ( + cur === undefined || + (cur.toLowerCase() === defaults[i] && + (!i || (arr[i - 1] || '').toLowerCase() !== cur.toLowerCase())) + ) { + return prev; + } - return cur + ' ' + prev; - }).trim(); + return cur + ' ' + prev; + }) + .trim(); - return minifyTrbl(value || 'none'); + return minifyTrbl(value || 'none'); }; diff --git a/packages/postcss-merge-longhand/src/lib/parseTrbl.js b/packages/postcss-merge-longhand/src/lib/parseTrbl.js index d3567724f..f77f6390f 100644 --- a/packages/postcss-merge-longhand/src/lib/parseTrbl.js +++ b/packages/postcss-merge-longhand/src/lib/parseTrbl.js @@ -1,11 +1,11 @@ -import {list} from 'postcss'; +import { list } from 'postcss'; -export default v => { - const s = typeof v === 'string' ? list.space(v) : v; - return [ - s[0], // top - s[1] || s[0], // right - s[2] || s[0], // bottom - s[3] || s[1] || s[0], // left - ]; +export default (v) => { + const s = typeof v === 'string' ? list.space(v) : v; + return [ + s[0], // top + s[1] || s[0], // right + s[2] || s[0], // bottom + s[3] || s[1] || s[0], // left + ]; }; diff --git a/packages/postcss-merge-longhand/src/lib/parseWsc.js b/packages/postcss-merge-longhand/src/lib/parseWsc.js index 0dd83d0e8..58eee6e6e 100644 --- a/packages/postcss-merge-longhand/src/lib/parseWsc.js +++ b/packages/postcss-merge-longhand/src/lib/parseWsc.js @@ -1,56 +1,61 @@ -import {list} from 'postcss'; -import {isWidth, isStyle, isColor} from './validateWsc'; +import { list } from 'postcss'; +import { isWidth, isStyle, isColor } from './validateWsc'; const none = /^\s*(none|medium)(\s+none(\s+(none|currentcolor))?)?\s*$/i; const varRE = /(^.*var)(.*\(.*--.*\))(.*)/i; -const varPreserveCase = p => `${p[1].toLowerCase()}${p[2]}${p[3].toLowerCase()}`; -const toLower = v => { - const match = varRE.exec(v); - return match ? varPreserveCase(match) : v.toLowerCase(); +const varPreserveCase = (p) => + `${p[1].toLowerCase()}${p[2]}${p[3].toLowerCase()}`; +const toLower = (v) => { + const match = varRE.exec(v); + return match ? varPreserveCase(match) : v.toLowerCase(); }; -export default function parseWsc (value) { - if (none.test(value)) { - return [ 'medium', 'none', 'currentcolor']; +export default function parseWsc(value) { + if (none.test(value)) { + return ['medium', 'none', 'currentcolor']; + } + + let width, style, color; + + const values = list.space(value); + + if ( + values.length > 1 && + isStyle(values[1]) && + values[0].toLowerCase() === 'none' + ) { + values.unshift(); + width = '0'; + } + + const unknown = []; + + values.forEach((v) => { + if (isStyle(v)) { + style = toLower(v); + } else if (isWidth(v)) { + width = toLower(v); + } else if (isColor(v)) { + color = toLower(v); + } else { + unknown.push(v); } + }); - let width, style, color; - - const values = list.space(value); + if (unknown.length) { + if (!width && style && color) { + width = unknown.pop(); + } - if (values.length > 1 && isStyle(values[1]) && values[0].toLowerCase() === 'none') { - values.unshift(); - width = '0'; + if (width && !style && color) { + style = unknown.pop(); } - const unknown = []; - - values.forEach(v => { - if (isStyle(v)) { - style = toLower(v); - } else if (isWidth(v)) { - width = toLower(v); - } else if (isColor(v)) { - color = toLower(v); - } else { - unknown.push(v); - } - }); - - if (unknown.length) { - if (!width && style && color) { - width = unknown.pop(); - } - - if (width && !style && color) { - style = unknown.pop(); - } - - if (width && style && !color) { - color = unknown.pop(); - } + if (width && style && !color) { + color = unknown.pop(); } + } - return [ width, style, color ]; + return [width, style, color]; } diff --git a/packages/postcss-merge-longhand/src/lib/remove.js b/packages/postcss-merge-longhand/src/lib/remove.js index 2f356cb82..700e91889 100644 --- a/packages/postcss-merge-longhand/src/lib/remove.js +++ b/packages/postcss-merge-longhand/src/lib/remove.js @@ -1,3 +1,3 @@ -export default function remove (node) { - return node.remove(); +export default function remove(node) { + return node.remove(); } diff --git a/packages/postcss-merge-longhand/src/lib/validateWsc.js b/packages/postcss-merge-longhand/src/lib/validateWsc.js index 725e43085..a137b1a73 100644 --- a/packages/postcss-merge-longhand/src/lib/validateWsc.js +++ b/packages/postcss-merge-longhand/src/lib/validateWsc.js @@ -1,69 +1,69 @@ -import colorNames from "css-color-names"; +import colorNames from 'css-color-names'; -const widths = ["thin", "medium", "thick"]; +const widths = ['thin', 'medium', 'thick']; const styles = [ - "none", - "hidden", - "dotted", - "dashed", - "solid", - "double", - "groove", - "ridge", - "inset", - "outset", + 'none', + 'hidden', + 'dotted', + 'dashed', + 'solid', + 'double', + 'groove', + 'ridge', + 'inset', + 'outset', ]; const colors = Object.keys(colorNames); -export function isStyle (value) { - return value && !!~styles.indexOf(value.toLowerCase()); +export function isStyle(value) { + return value && !!~styles.indexOf(value.toLowerCase()); } -export function isWidth (value) { - return ( - (value && !!~widths.indexOf(value.toLowerCase())) || - /^(\d+(\.\d+)?|\.\d+)(\w+)?$/.test(value) - ); +export function isWidth(value) { + return ( + (value && !!~widths.indexOf(value.toLowerCase())) || + /^(\d+(\.\d+)?|\.\d+)(\w+)?$/.test(value) + ); } -export function isColor (value) { - if (!value) { - return false; - } +export function isColor(value) { + if (!value) { + return false; + } - value = value.toLowerCase(); + value = value.toLowerCase(); - if (/rgba?\(/.test(value)) { - return true; - } + if (/rgba?\(/.test(value)) { + return true; + } - if (/hsla?\(/.test(value)) { - return true; - } + if (/hsla?\(/.test(value)) { + return true; + } - if (/#([0-9a-z]{6}|[0-9a-z]{3})/.test(value)) { - return true; - } + if (/#([0-9a-z]{6}|[0-9a-z]{3})/.test(value)) { + return true; + } - if (value === "transparent") { - return true; - } + if (value === 'transparent') { + return true; + } - if (value === "currentcolor") { - return true; - } + if (value === 'currentcolor') { + return true; + } - return !!~colors.indexOf(value); + return !!~colors.indexOf(value); } -export function isValidWsc (wscs) { - const validWidth = isWidth(wscs[0]); - const validStyle = isStyle(wscs[1]); - const validColor = isColor(wscs[2]); +export function isValidWsc(wscs) { + const validWidth = isWidth(wscs[0]); + const validStyle = isStyle(wscs[1]); + const validColor = isColor(wscs[2]); - return ( - (validWidth && validStyle) || - (validWidth && validColor) || - (validStyle && validColor) - ); + return ( + (validWidth && validStyle) || + (validWidth && validColor) || + (validStyle && validColor) + ); } diff --git a/packages/postcss-merge-rules/src/__tests__/index.js b/packages/postcss-merge-rules/src/__tests__/index.js index 5a342f43d..b8f2ba0b2 100644 --- a/packages/postcss-merge-rules/src/__tests__/index.js +++ b/packages/postcss-merge-rules/src/__tests__/index.js @@ -3,726 +3,730 @@ import postcss from 'postcss'; import vars from 'postcss-simple-vars'; import comments from 'postcss-discard-comments'; // alias not loading correctly import plugin from '..'; -import {pseudoElements} from '../lib/ensureCompatibility'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { pseudoElements } from '../lib/ensureCompatibility'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); test( - 'should merge based on declarations', - processCSS, - 'h1{display:block}h2{display:block}', - 'h1,h2{display:block}' + 'should merge based on declarations', + processCSS, + 'h1{display:block}h2{display:block}', + 'h1,h2{display:block}' ); test( - 'should merge based on declarations (2)', - processCSS, - 'h1{color:red;line-height:1.5;font-size:2em}h2{color:red;line-height:1.5;font-size:2em}', - 'h1,h2{color:red;line-height:1.5;font-size:2em}' + 'should merge based on declarations (2)', + processCSS, + 'h1{color:red;line-height:1.5;font-size:2em}h2{color:red;line-height:1.5;font-size:2em}', + 'h1,h2{color:red;line-height:1.5;font-size:2em}' ); test( - 'should merge based on declarations, with a different property order', - processCSS, - 'h1{color:red;line-height:1.5;font-size:2em}h2{font-size:2em;color:red;line-height:1.5}', - 'h1,h2{color:red;line-height:1.5;font-size:2em}' + 'should merge based on declarations, with a different property order', + processCSS, + 'h1{color:red;line-height:1.5;font-size:2em}h2{font-size:2em;color:red;line-height:1.5}', + 'h1,h2{color:red;line-height:1.5;font-size:2em}' ); test( - 'should merge based on selectors', - processCSS, - 'h1{display:block}h1{text-decoration:underline}', - 'h1{display:block;text-decoration:underline}' + 'should merge based on selectors', + processCSS, + 'h1{display:block}h1{text-decoration:underline}', + 'h1{display:block;text-decoration:underline}' ); test( - 'should merge based on selectors (2)', - processCSS, - 'h1{color:red;display:block}h1{text-decoration:underline}', - 'h1{color:red;display:block;text-decoration:underline}' + 'should merge based on selectors (2)', + processCSS, + 'h1{color:red;display:block}h1{text-decoration:underline}', + 'h1{color:red;display:block;text-decoration:underline}' ); test( - 'should merge based on selectors (3)', - processCSS, - 'h1{font-size:2em;color:#000}h1{background:#fff;line-height:1.5}', - 'h1{font-size:2em;color:#000;background:#fff;line-height:1.5}' + 'should merge based on selectors (3)', + processCSS, + 'h1{font-size:2em;color:#000}h1{background:#fff;line-height:1.5}', + 'h1{font-size:2em;color:#000;background:#fff;line-height:1.5}' ); test( - 'should merge in media queries', - processCSS, - '@media print{h1{display:block}h1{color:red}}', - '@media print{h1{display:block;color:red}}' + 'should merge in media queries', + processCSS, + '@media print{h1{display:block}h1{color:red}}', + '@media print{h1{display:block;color:red}}' ); test( - 'should merge in media queries (2)', - processCSS, - '@media print{h1{display:block}p{display:block}}', - '@media print{h1,p{display:block}}' + 'should merge in media queries (2)', + processCSS, + '@media print{h1{display:block}p{display:block}}', + '@media print{h1,p{display:block}}' ); test( - 'should merge in media queries (3)', - processCSS, - '@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}h3{text-decoration:none}', - '@media print{h1{color:red}h1,h2{text-decoration:none}}h3{text-decoration:none}' + 'should merge in media queries (3)', + processCSS, + '@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}h3{text-decoration:none}', + '@media print{h1{color:red}h1,h2{text-decoration:none}}h3{text-decoration:none}' ); test( - 'should merge in media queries (4)', - processCSS, - 'h3{text-decoration:none}@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}', - 'h3{text-decoration:none}@media print{h1{color:red}h1,h2{text-decoration:none}}' + 'should merge in media queries (4)', + processCSS, + 'h3{text-decoration:none}@media print{h1{color:red;text-decoration:none}h2{text-decoration:none}}', + 'h3{text-decoration:none}@media print{h1{color:red}h1,h2{text-decoration:none}}' ); test( - 'should not merge across media queries', - passthroughCSS, - '@media screen and (max-width:480px){h1{display:block}}@media screen and (min-width:480px){h2{display:block}}' + 'should not merge across media queries', + passthroughCSS, + '@media screen and (max-width:480px){h1{display:block}}@media screen and (min-width:480px){h2{display:block}}' ); test( - 'should not merge across media queries (2)', - passthroughCSS, - '@media screen and (max-width:200px){h1{color:red}}@media screen and (min-width:480px){h1{display:block}}' + 'should not merge across media queries (2)', + passthroughCSS, + '@media screen and (max-width:200px){h1{color:red}}@media screen and (min-width:480px){h1{display:block}}' ); test( - 'should not merge across keyframes', - passthroughCSS, - '@-webkit-keyframes test{0%{color:#000}to{color:#fff}}@keyframes test{0%{color:#000}to{color:#fff}}' + 'should not merge across keyframes', + passthroughCSS, + '@-webkit-keyframes test{0%{color:#000}to{color:#fff}}@keyframes test{0%{color:#000}to{color:#fff}}' ); test( - 'should not merge across keyframes (2)', - passthroughCSS, - [ - '@-webkit-keyframes slideInDown{', - '0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}', - 'to{-webkit-transform:translateY(0);transform:translateY(0)}', - '}', - '@keyframes slideInDown{', - '0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}', - 'to{-webkit-transform:translateY(0);transform:translateY(0)}', - '}', - ].join('') + 'should not merge across keyframes (2)', + passthroughCSS, + [ + '@-webkit-keyframes slideInDown{', + '0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}', + 'to{-webkit-transform:translateY(0);transform:translateY(0)}', + '}', + '@keyframes slideInDown{', + '0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}', + 'to{-webkit-transform:translateY(0);transform:translateY(0)}', + '}', + ].join('') ); test( - 'should not merge across keyframes (3)', - passthroughCSS, - [ - '#foo {-webkit-animation-name:some-animation;-moz-animation-name:some-animation;-o-animation-name:some-animation;animation-name:some-animation}', - '@-webkit-keyframes some-animation{100%{-webkit-transform:scale(2);transform:scale(2)}}', - '@-moz-keyframes some-animation{100%{-moz-transform:scale(2);transform:scale(2)}}', - '@-o-keyframes some-animation {100%{-o-transform:scale(2);transform:scale(2)}}', - '@keyframes some-animation {100%{-webkit-transform:scale(2);-moz-transform:scale(2);-o-transform:scale(2);transform:scale(2)}}', - ].join('') + 'should not merge across keyframes (3)', + passthroughCSS, + [ + '#foo {-webkit-animation-name:some-animation;-moz-animation-name:some-animation;-o-animation-name:some-animation;animation-name:some-animation}', + '@-webkit-keyframes some-animation{100%{-webkit-transform:scale(2);transform:scale(2)}}', + '@-moz-keyframes some-animation{100%{-moz-transform:scale(2);transform:scale(2)}}', + '@-o-keyframes some-animation {100%{-o-transform:scale(2);transform:scale(2)}}', + '@keyframes some-animation {100%{-webkit-transform:scale(2);-moz-transform:scale(2);-o-transform:scale(2);transform:scale(2)}}', + ].join('') ); test( - 'should not merge in different contexts', - passthroughCSS, - 'h1{display:block}@media print{h1{color:red}}' + 'should not merge in different contexts', + passthroughCSS, + 'h1{display:block}@media print{h1{color:red}}' ); test( - 'should not merge in different contexts (2)', - passthroughCSS, - '@media print{h1{display:block}}h1{color:red}' + 'should not merge in different contexts (2)', + passthroughCSS, + '@media print{h1{display:block}}h1{color:red}' ); test( - 'should perform partial merging of selectors', - processCSS, - 'h1{color:red}h2{color:red;text-decoration:underline}', - 'h1,h2{color:red}h2{text-decoration:underline}' + 'should perform partial merging of selectors', + processCSS, + 'h1{color:red}h2{color:red;text-decoration:underline}', + 'h1,h2{color:red}h2{text-decoration:underline}' ); test( - 'should perform partial merging of selectors (2)', - processCSS, - 'h1{color:red}h2{color:red;text-decoration:underline}h3{color:green;text-decoration:underline}', - 'h1,h2{color:red}h2,h3{text-decoration:underline}h3{color:green}' + 'should perform partial merging of selectors (2)', + processCSS, + 'h1{color:red}h2{color:red;text-decoration:underline}h3{color:green;text-decoration:underline}', + 'h1,h2{color:red}h2,h3{text-decoration:underline}h3{color:green}' ); test( - 'should perform partial merging of selectors (3)', - processCSS, - 'h1{color:red;text-decoration:underline}h2{text-decoration:underline;color:green}h3{font-weight:bold;color:green}', - 'h1{color:red}h1,h2{text-decoration:underline}h2,h3{color:green}h3{font-weight:bold}' + 'should perform partial merging of selectors (3)', + processCSS, + 'h1{color:red;text-decoration:underline}h2{text-decoration:underline;color:green}h3{font-weight:bold;color:green}', + 'h1{color:red}h1,h2{text-decoration:underline}h2,h3{color:green}h3{font-weight:bold}' ); test( - 'should perform partial merging of selectors (4)', - processCSS, - '.test0{color:red;border:none;margin:0}.test1{color:green;border:none;margin:0}', - '.test0{color:red}.test0,.test1{border:none;margin:0}.test1{color:green}' + 'should perform partial merging of selectors (4)', + processCSS, + '.test0{color:red;border:none;margin:0}.test1{color:green;border:none;margin:0}', + '.test0{color:red}.test0,.test1{border:none;margin:0}.test1{color:green}' ); test( - 'should perform partial merging of selectors (5)', - processCSS, - 'h1{color:red;font-weight:bold}h2{font-weight:bold}h3{text-decoration:none}', - 'h1{color:red}h1,h2{font-weight:bold}h3{text-decoration:none}' + 'should perform partial merging of selectors (5)', + processCSS, + 'h1{color:red;font-weight:bold}h2{font-weight:bold}h3{text-decoration:none}', + 'h1{color:red}h1,h2{font-weight:bold}h3{text-decoration:none}' ); test( - 'should perform partial merging of selectors (6)', - processCSS, - '.test-1,.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', - '.test-1,.test-2,.another-test{margin-top:10px}.another-test{margin-bottom:30px}' + 'should perform partial merging of selectors (6)', + processCSS, + '.test-1,.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', + '.test-1,.test-2,.another-test{margin-top:10px}.another-test{margin-bottom:30px}' ); test( - 'should perform partial merging of selectors (7)', - processCSS, - '.test-1{margin-top:10px;margin-bottom:20px}.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', - '.test-1{margin-bottom:20px}.test-1,.test-2,.another-test{margin-top:10px}.another-test{margin-bottom:30px}' + 'should perform partial merging of selectors (7)', + processCSS, + '.test-1{margin-top:10px;margin-bottom:20px}.test-2{margin-top:10px}.another-test{margin-top:10px;margin-bottom:30px}', + '.test-1{margin-bottom:20px}.test-1,.test-2,.another-test{margin-top:10px}.another-test{margin-bottom:30px}' ); test( - 'should perform partial merging of selectors (8)', - processCSS, - '.foo{margin:0;display:block}.barim{display:block;line-height:1}.bazaz{font-size:3em;margin:0}', - '.foo{margin:0}.foo,.barim{display:block}.barim{line-height:1}.bazaz{font-size:3em;margin:0}' + 'should perform partial merging of selectors (8)', + processCSS, + '.foo{margin:0;display:block}.barim{display:block;line-height:1}.bazaz{font-size:3em;margin:0}', + '.foo{margin:0}.foo,.barim{display:block}.barim{line-height:1}.bazaz{font-size:3em;margin:0}' ); test( - 'should not merge over-eagerly (cssnano#36 [case 3])', - passthroughCSS, - '.foobam{font-family:serif;display:block}.barim{display:block;line-height:1}.bazaz{font-size:3em;font-family:serif}' + 'should not merge over-eagerly (cssnano#36 [case 3])', + passthroughCSS, + '.foobam{font-family:serif;display:block}.barim{display:block;line-height:1}.bazaz{font-size:3em;font-family:serif}' ); test( - 'should not merge over-eagerly (cssnano#36 [case 4])', - processCSS, - '.foo{font-family:serif;display:block}.barim{display:block;line-height:1}.bazaz{font-size:3em;font-family:serif}', - '.foo{font-family:serif}.foo,.barim{display:block}.barim{line-height:1}.bazaz{font-size:3em;font-family:serif}' + 'should not merge over-eagerly (cssnano#36 [case 4])', + processCSS, + '.foo{font-family:serif;display:block}.barim{display:block;line-height:1}.bazaz{font-size:3em;font-family:serif}', + '.foo{font-family:serif}.foo,.barim{display:block}.barim{line-height:1}.bazaz{font-size:3em;font-family:serif}' ); test( - 'should merge multiple values (cssnano#49)', - processCSS, - 'h1{border:1px solid red;background-color:red;background-position:50% 100%}h1{border:1px solid red;background-color:red}h1{border:1px solid red}', - 'h1{border:1px solid red;background-color:red;background-position:50% 100%}' + 'should merge multiple values (cssnano#49)', + processCSS, + 'h1{border:1px solid red;background-color:red;background-position:50% 100%}h1{border:1px solid red;background-color:red}h1{border:1px solid red}', + 'h1{border:1px solid red;background-color:red;background-position:50% 100%}' ); test( - 'should perform partial merging of selectors in the opposite direction', - processCSS, - 'h1{color:black}h2{color:black;font-weight:bold}h3{color:black;font-weight:bold}', - 'h1{color:black}h2,h3{color:black;font-weight:bold}' + 'should perform partial merging of selectors in the opposite direction', + processCSS, + 'h1{color:black}h2{color:black;font-weight:bold}h3{color:black;font-weight:bold}', + 'h1{color:black}h2,h3{color:black;font-weight:bold}' ); test( - 'should not perform partial merging of selectors if the output would be longer', - passthroughCSS, - '.test0{color:red;border:none;margin:0}.longlonglonglong{color:green;border:none;margin:0}' + 'should not perform partial merging of selectors if the output would be longer', + passthroughCSS, + '.test0{color:red;border:none;margin:0}.longlonglonglong{color:green;border:none;margin:0}' ); test( - 'should merge vendor prefixed selectors when vendors are the same', - processCSS, - 'code ::-moz-selection{background:red}code::-moz-selection{background:red}', - 'code ::-moz-selection,code::-moz-selection{background:red}' + 'should merge vendor prefixed selectors when vendors are the same', + processCSS, + 'code ::-moz-selection{background:red}code::-moz-selection{background:red}', + 'code ::-moz-selection,code::-moz-selection{background:red}' ); test( - 'should not merge mixed vendor prefixes', - passthroughCSS, - 'code ::-webkit-selection{background:red}code::-moz-selection{background:red}' + 'should not merge mixed vendor prefixes', + passthroughCSS, + 'code ::-webkit-selection{background:red}code::-moz-selection{background:red}' ); test( - 'should not merge ms vendor prefixes', - passthroughCSS, - 'code :-ms-input-placeholder{background:red}code::-ms-input-placeholder{background:red}' + 'should not merge ms vendor prefixes', + passthroughCSS, + 'code :-ms-input-placeholder{background:red}code::-ms-input-placeholder{background:red}' ); test( - 'should not merge mixed vendor prefixes (2)', - passthroughCSS, - 'input[type=range] { -webkit-appearance: none !important; } input[type=range]::-webkit-slider-runnable-track { height: 2px; width: 100px; background: red; border: none; } input[type=range]::-webkit-slider-thumb { -webkit-appearance: none !important; border: none; width: 10px; height: 10px; background: red; } input[type=range]::-moz-range-thumb { border: none; width: 10px; height: 10px; background: red; }' + 'should not merge mixed vendor prefixes (2)', + passthroughCSS, + 'input[type=range] { -webkit-appearance: none !important; } input[type=range]::-webkit-slider-runnable-track { height: 2px; width: 100px; background: red; border: none; } input[type=range]::-webkit-slider-thumb { -webkit-appearance: none !important; border: none; width: 10px; height: 10px; background: red; } input[type=range]::-moz-range-thumb { border: none; width: 10px; height: 10px; background: red; }' ); test( - 'should not merge mixed vendor prefixed and non-vendor prefixed', - passthroughCSS, - 'code ::selection{background:red}code ::-moz-selection{background:red}' + 'should not merge mixed vendor prefixed and non-vendor prefixed', + passthroughCSS, + 'code ::selection{background:red}code ::-moz-selection{background:red}' ); test( - 'should merge text-* properties', - processCSS, - 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline}', - 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}' + 'should merge text-* properties', + processCSS, + 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline}', + 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}' ); test( - 'should merge text-* properties (2)', - processCSS, - 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:green}', - 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}h2{color:green}' + 'should merge text-* properties (2)', + processCSS, + 'h1{color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:green}', + 'h1{color:red}h1,h2{text-align:right;text-decoration:underline}h2{color:green}' ); test( - 'should merge text-* properties (3)', - processCSS, - 'h1{background:white;color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:red}', - 'h1{background:white}h1,h2{color:red;text-align:right;text-decoration:underline}' + 'should merge text-* properties (3)', + processCSS, + 'h1{background:white;color:red;text-align:right;text-decoration:underline}h2{text-align:right;text-decoration:underline;color:red}', + 'h1{background:white}h1,h2{color:red;text-align:right;text-decoration:underline}' ); test( - 'should merge text-* properties (4)', - processCSS, - 'h1{color:red;text-align:center;text-transform:small-caps}h2{text-align:center;color:red}', - 'h1{text-transform:small-caps}h1,h2{color:red;text-align:center}' + 'should merge text-* properties (4)', + processCSS, + 'h1{color:red;text-align:center;text-transform:small-caps}h2{text-align:center;color:red}', + 'h1{text-transform:small-caps}h1,h2{color:red;text-align:center}' ); test( - 'should merge text-* properties (5)', - processCSS, - 'h1{text-align:left;text-transform:small-caps}h2{text-align:right;text-transform:small-caps}', - 'h1{text-align:left}h1,h2{text-transform:small-caps}h2{text-align:right}' + 'should merge text-* properties (5)', + processCSS, + 'h1{text-align:left;text-transform:small-caps}h2{text-align:right;text-transform:small-caps}', + 'h1{text-align:left}h1,h2{text-transform:small-caps}h2{text-align:right}' ); test( - 'should not incorrectly extract transform properties', - passthroughCSS, - '@keyframes a {0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}' + 'should not incorrectly extract transform properties', + passthroughCSS, + '@keyframes a {0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}' ); test( - 'should not incorrectly extract background properties', - passthroughCSS, - '.iPhone{background:url(a.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-102px -74px}.logo{background:url(b.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-2px -146px}' + 'should not incorrectly extract background properties', + passthroughCSS, + '.iPhone{background:url(a.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-102px -74px}.logo{background:url(b.png);background-image:url(../../../sprites/c.png);background-repeat:no-repeat;background-position:-2px -146px}' ); test( - 'should not incorrectly extract margin properties', - passthroughCSS, - 'h2{margin-bottom:20px}h1{margin:10px;margin-bottom:20px}' + 'should not incorrectly extract margin properties', + passthroughCSS, + 'h2{margin-bottom:20px}h1{margin:10px;margin-bottom:20px}' ); test( - 'should not incorrectly extract margin properties (2)', - processCSS, - 'h2{color:red;margin-bottom:20px}h1{color:red;margin:10px;margin-bottom:20px}', - 'h2{margin-bottom:20px}h2,h1{color:red}h1{margin:10px;margin-bottom:20px}' + 'should not incorrectly extract margin properties (2)', + processCSS, + 'h2{color:red;margin-bottom:20px}h1{color:red;margin:10px;margin-bottom:20px}', + 'h2{margin-bottom:20px}h2,h1{color:red}h1{margin:10px;margin-bottom:20px}' ); test( - 'should not incorrectly extract margin properties (3)', - passthroughCSS, - 'h2{margin:0;margin-bottom:20px}h1{margin:0;margin-top:20px}' + 'should not incorrectly extract margin properties (3)', + passthroughCSS, + 'h2{margin:0;margin-bottom:20px}h1{margin:0;margin-top:20px}' ); test( - 'should not incorrectly extract margin properties (4)', - passthroughCSS, - 'h2{margin:0}h1{margin-top:20px;margin:0}' + 'should not incorrectly extract margin properties (4)', + passthroughCSS, + 'h2{margin:0}h1{margin-top:20px;margin:0}' ); test( - 'should not incorrectly extract display properties', - passthroughCSS, - '.box1{display:inline-block;display:block}.box2{display:inline-block}' + 'should not incorrectly extract display properties', + passthroughCSS, + '.box1{display:inline-block;display:block}.box2{display:inline-block}' ); test( - 'should handle selector hacks', - processCSS, - '.classA{*zoom:1}.classB{box-sizing:border-box;position:relative;min-height:100%}.classC{box-sizing:border-box;position:relative}.classD{box-sizing:border-box;position:relative}', - '.classA{*zoom:1}.classB{min-height:100%}.classB,.classC,.classD{box-sizing:border-box;position:relative}' + 'should handle selector hacks', + processCSS, + '.classA{*zoom:1}.classB{box-sizing:border-box;position:relative;min-height:100%}.classC{box-sizing:border-box;position:relative}.classD{box-sizing:border-box;position:relative}', + '.classA{*zoom:1}.classB{min-height:100%}.classB,.classC,.classD{box-sizing:border-box;position:relative}' ); -test( - 'should handle empty rulesets', - processCSS, - 'h1{h2{}h3{}}', - 'h1{h2,h3{}}' -); +test('should handle empty rulesets', processCSS, 'h1{h2{}h3{}}', 'h1{h2,h3{}}'); test( - 'should not throw on charset declarations', - processCSS, - '@charset "utf-8";@charset "utf-8";@charset "utf-8";h1{}h2{}', - '@charset "utf-8";@charset "utf-8";@charset "utf-8";h1,h2{}' + 'should not throw on charset declarations', + processCSS, + '@charset "utf-8";@charset "utf-8";@charset "utf-8";h1{}h2{}', + '@charset "utf-8";@charset "utf-8";@charset "utf-8";h1,h2{}' ); test( - 'should not throw on comment nodes', - passthroughCSS, - '.navbar-soft .navbar-nav > .active > a{color:#fff;background-color:#303030}.navbar-soft .navbar-nav > .open > a{color:#fff;background-color:rgba(48,48,48,0.8)}/* caret */.navbar-soft .navbar-nav > .dropdown > a .caret{border-top-color:#777;border-bottom-color:#777}' + 'should not throw on comment nodes', + passthroughCSS, + '.navbar-soft .navbar-nav > .active > a{color:#fff;background-color:#303030}.navbar-soft .navbar-nav > .open > a{color:#fff;background-color:rgba(48,48,48,0.8)}/* caret */.navbar-soft .navbar-nav > .dropdown > a .caret{border-top-color:#777;border-bottom-color:#777}' ); test( - 'should not throw on comment nodes (2)', - processCSS, - 'h1{color:black;background:blue/*test*/}h2{background:blue}', - 'h1{color:black/*test*/}h1,h2{background:blue}' + 'should not throw on comment nodes (2)', + processCSS, + 'h1{color:black;background:blue/*test*/}h2{background:blue}', + 'h1{color:black/*test*/}h1,h2{background:blue}' ); test( - 'should not be responsible for deduping declarations when merging', - processCSS, - 'h1{display:block;display:block}h2{display:block;display:block}', - 'h1,h2{display:block;display:block}' + 'should not be responsible for deduping declarations when merging', + processCSS, + 'h1{display:block;display:block}h2{display:block;display:block}', + 'h1,h2{display:block;display:block}' ); test( - 'should not be responsible for deduping selectors when merging', - processCSS, - 'h1,h2{display:block}h2,h1{display:block}', - 'h1,h2,h2,h1{display:block}' + 'should not be responsible for deduping selectors when merging', + processCSS, + 'h1,h2{display:block}h2,h1{display:block}', + 'h1,h2,h2,h1{display:block}' ); test( - 'should not merge across font face rules', - processCSS, - '.one, .two, .three { font-family: "lorem"; font-weight: normal; } .four { font-family: "lorem", serif; font-weight: normal; }.five { font-family: "lorem"; font-weight: normal; } @font-face { font-family: "lorem"; font-weight: normal; src: url(/assets/lorem.eot); src: url(/assets/lorem.eot?#iefix) format("embedded-opentype"), url(/assets/lorem.woff) format("woff"), url(/assets/lorem.ttf) format("truetype"); }', - '.one, .two, .three { font-family: "lorem"; font-weight: normal; } .four { font-family: "lorem", serif; }.four,.five { font-weight: normal; }.five { font-family: "lorem"; } @font-face { font-family: "lorem"; font-weight: normal; src: url(/assets/lorem.eot); src: url(/assets/lorem.eot?#iefix) format("embedded-opentype"), url(/assets/lorem.woff) format("woff"), url(/assets/lorem.ttf) format("truetype"); }' + 'should not merge across font face rules', + processCSS, + '.one, .two, .three { font-family: "lorem"; font-weight: normal; } .four { font-family: "lorem", serif; font-weight: normal; }.five { font-family: "lorem"; font-weight: normal; } @font-face { font-family: "lorem"; font-weight: normal; src: url(/assets/lorem.eot); src: url(/assets/lorem.eot?#iefix) format("embedded-opentype"), url(/assets/lorem.woff) format("woff"), url(/assets/lorem.ttf) format("truetype"); }', + '.one, .two, .three { font-family: "lorem"; font-weight: normal; } .four { font-family: "lorem", serif; }.four,.five { font-weight: normal; }.five { font-family: "lorem"; } @font-face { font-family: "lorem"; font-weight: normal; src: url(/assets/lorem.eot); src: url(/assets/lorem.eot?#iefix) format("embedded-opentype"), url(/assets/lorem.woff) format("woff"), url(/assets/lorem.ttf) format("truetype"); }' ); test( - 'should not merge across font face rules (2)', - processCSS, - '.foo { font-weight: normal; } .bar { font-family: "my-font"; font-weight: normal; } @font-face { font-family: "my-font"; font-weight: normal; src: url("my-font.ttf"); }', - '.foo,.bar { font-weight: normal; } .bar { font-family: "my-font"; } @font-face { font-family: "my-font"; font-weight: normal; src: url("my-font.ttf"); }' + 'should not merge across font face rules (2)', + processCSS, + '.foo { font-weight: normal; } .bar { font-family: "my-font"; font-weight: normal; } @font-face { font-family: "my-font"; font-weight: normal; src: url("my-font.ttf"); }', + '.foo,.bar { font-weight: normal; } .bar { font-family: "my-font"; } @font-face { font-family: "my-font"; font-weight: normal; src: url("my-font.ttf"); }' ); test( - 'should not merge conflicting rules', - passthroughCSS, - '.a{font-family:Arial;font-family:Helvetica;}.b{font-family:Arial;}' + 'should not merge conflicting rules', + passthroughCSS, + '.a{font-family:Arial;font-family:Helvetica;}.b{font-family:Arial;}' ); test( - 'should merge properties with vendor prefixes', - processCSS, - '.a{-webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);-webkit-overflow-scrolling: touch}.b{-webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);}', - '.a{-webkit-overflow-scrolling: touch}.a,.b{-webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);}' + 'should merge properties with vendor prefixes', + processCSS, + '.a{-webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);-webkit-overflow-scrolling: touch}.b{-webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);}', + '.a{-webkit-overflow-scrolling: touch}.a,.b{-webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);}' ); test( - 'should respect property order and do nothing', - passthroughCSS, - 'body { overflow: hidden; overflow-y: scroll; overflow-x: hidden;} main { overflow: hidden }' + 'should respect property order and do nothing', + passthroughCSS, + 'body { overflow: hidden; overflow-y: scroll; overflow-x: hidden;} main { overflow: hidden }' ); test( - 'should respect property order and do nothing (2)', - passthroughCSS, - '.a{ border-color:transparent; border-bottom-color:#111111; border-bottom-style:solid; }.b{ border-color:transparent; border-bottom-color:#222222; border-bottom-style:solid; }' + 'should respect property order and do nothing (2)', + passthroughCSS, + '.a{ border-color:transparent; border-bottom-color:#111111; border-bottom-style:solid; }.b{ border-color:transparent; border-bottom-color:#222222; border-bottom-style:solid; }' ); test( - 'should respect property order and do nothing (3)', - processCSS, - '.fb-col-md-6 { color: red; border-color:blue; flex: 0 0 auto; flex-basis: 50%; } .fb-col-md-7 { color: red; border-color:blue; flex: 0 0 auto; flex-basis: 58.3%; }', - '.fb-col-md-6 { flex: 0 0 auto; flex-basis: 50%; } .fb-col-md-6,.fb-col-md-7 { color: red; border-color:blue; } .fb-col-md-7 { flex: 0 0 auto; flex-basis: 58.3%; }' + 'should respect property order and do nothing (3)', + processCSS, + '.fb-col-md-6 { color: red; border-color:blue; flex: 0 0 auto; flex-basis: 50%; } .fb-col-md-7 { color: red; border-color:blue; flex: 0 0 auto; flex-basis: 58.3%; }', + '.fb-col-md-6 { flex: 0 0 auto; flex-basis: 50%; } .fb-col-md-6,.fb-col-md-7 { color: red; border-color:blue; } .fb-col-md-7 { flex: 0 0 auto; flex-basis: 58.3%; }' ); test( - 'should respect property order and do nothing (4) (cssnano#160)', - passthroughCSS, - 'one { border: 1px solid black; border-top: none; } two { border: 1px solid black; }' + 'should respect property order and do nothing (4) (cssnano#160)', + passthroughCSS, + 'one { border: 1px solid black; border-top: none; } two { border: 1px solid black; }' ); test( - 'should respect property order and do nothing (5) (cssnano#87)', - passthroughCSS, - '.dispendium-theme.fr-toolbar.fr-top { border-radius: 0; background-clip: padding-box; box-shadow: none; border: 1px solid #E0E0E0; border-bottom: 0; } .dispendium-theme.fr-toolbar.fr-bottom { border-radius: 0; background-clip: padding-box; box-shadow: none; border: 1px solid #E0E0E0; border-top: 0; }' + 'should respect property order and do nothing (5) (cssnano#87)', + passthroughCSS, + '.dispendium-theme.fr-toolbar.fr-top { border-radius: 0; background-clip: padding-box; box-shadow: none; border: 1px solid #E0E0E0; border-bottom: 0; } .dispendium-theme.fr-toolbar.fr-bottom { border-radius: 0; background-clip: padding-box; box-shadow: none; border: 1px solid #E0E0E0; border-top: 0; }' ); test( - 'should respect property order and do nothing (6) (issue #19)', - passthroughCSS, - '.share .comment-count:before { content: \' \'; position: absolute; width: 0; height: 0; right: 7px; top: 26px; border: 5px solid; border-color: #326891 #326891 transparent transparent; } .share .comment-count:after { content: \' \'; position: absolute; width: 0; height: 0; right: 8px; top: 24px; border: 5px solid; border-color: #fff #fff transparent transparent; }' + 'should respect property order and do nothing (6) (issue #19)', + passthroughCSS, + ".share .comment-count:before { content: ' '; position: absolute; width: 0; height: 0; right: 7px; top: 26px; border: 5px solid; border-color: #326891 #326891 transparent transparent; } .share .comment-count:after { content: ' '; position: absolute; width: 0; height: 0; right: 8px; top: 24px; border: 5px solid; border-color: #fff #fff transparent transparent; }" ); test( - 'should not merge @keyframes rules', - passthroughCSS, - '@keyframes foo{0%{visibility:visible;transform:scale3d(.85,.85,.85);opacity:0}to{visibility:visible;opacity:1}}' + 'should not merge @keyframes rules', + passthroughCSS, + '@keyframes foo{0%{visibility:visible;transform:scale3d(.85,.85,.85);opacity:0}to{visibility:visible;opacity:1}}' ); test( - 'should not merge overlapping rules with vendor prefixes', - passthroughCSS, - '.foo{background:#fff;-webkit-background-clip:text}.bar{background:#000;-webkit-background-clip:text}' + 'should not merge overlapping rules with vendor prefixes', + passthroughCSS, + '.foo{background:#fff;-webkit-background-clip:text}.bar{background:#000;-webkit-background-clip:text}' ); test( - 'should not destroy any declarations when merging', - processCSS, - '.a{background-color:#fff}.a{background-color:#717F83;color:#fff}', - '.a{background-color:#fff;background-color:#717F83;color:#fff}', + 'should not destroy any declarations when merging', + processCSS, + '.a{background-color:#fff}.a{background-color:#717F83;color:#fff}', + '.a{background-color:#fff;background-color:#717F83;color:#fff}' ); test( - 'should merge ::placeholder selectors when supported', - processCSS, - '::placeholder{color:blue}h1{color:blue}', - '::placeholder,h1{color:blue}', - {env: 'chrome58'} + 'should merge ::placeholder selectors when supported', + processCSS, + '::placeholder{color:blue}h1{color:blue}', + '::placeholder,h1{color:blue}', + { env: 'chrome58' } ); test( - 'should not merge general sibling combinators', - passthroughCSS, - 'div{color:#fff}a ~ b{color:#fff}', - {env: 'ie6'} + 'should not merge general sibling combinators', + passthroughCSS, + 'div{color:#fff}a ~ b{color:#fff}', + { env: 'ie6' } ); test( - 'should not merge child combinators', - passthroughCSS, - 'div{color:#fff}a > b{color:#fff}', - {env: 'ie6'} + 'should not merge child combinators', + passthroughCSS, + 'div{color:#fff}a > b{color:#fff}', + { env: 'ie6' } ); test( - 'should not merge attribute selectors (css 2.1)', - passthroughCSS, - 'div{color:#fff}[href]{color:#fff}', - {env: 'ie6'} + 'should not merge attribute selectors (css 2.1)', + passthroughCSS, + 'div{color:#fff}[href]{color:#fff}', + { env: 'ie6' } ); test( - 'should not merge attribute selectors (css 2.1) (2)', - passthroughCSS, - 'div{color:#fff}[href="foo"]{color:#fff}', - {env: 'ie6'} + 'should not merge attribute selectors (css 2.1) (2)', + passthroughCSS, + 'div{color:#fff}[href="foo"]{color:#fff}', + { env: 'ie6' } ); test( - 'should not merge attribute selectors (css 2.1) (3)', - passthroughCSS, - 'div{color:#fff}[href~="foo"]{color:#fff}', - {env: 'ie6'} + 'should not merge attribute selectors (css 2.1) (3)', + passthroughCSS, + 'div{color:#fff}[href~="foo"]{color:#fff}', + { env: 'ie6' } ); test( - 'should not merge attribute selectors (css 2.1) (4)', - passthroughCSS, - 'div{color:#fff}[href|="foo"]{color:#fff}', - {env: 'ie6'} + 'should not merge attribute selectors (css 2.1) (4)', + passthroughCSS, + 'div{color:#fff}[href|="foo"]{color:#fff}', + { env: 'ie6' } ); test( - 'should not merge attribute selectors (css 3)', - passthroughCSS, - 'div{color:#fff}[href^="foo"]{color:#fff}', - {env: 'ie7'} + 'should not merge attribute selectors (css 3)', + passthroughCSS, + 'div{color:#fff}[href^="foo"]{color:#fff}', + { env: 'ie7' } ); test( - 'should not merge attribute selectors (css 3) (2)', - passthroughCSS, - 'div{color:#fff}[href$="foo"]{color:#fff}', - {env: 'ie7'} + 'should not merge attribute selectors (css 3) (2)', + passthroughCSS, + 'div{color:#fff}[href$="foo"]{color:#fff}', + { env: 'ie7' } ); test( - 'should not merge attribute selectors (css 3) (3)', - passthroughCSS, - 'div{color:#fff}[href*="foo"]{color:#fff}', - {env: 'ie7'} + 'should not merge attribute selectors (css 3) (3)', + passthroughCSS, + 'div{color:#fff}[href*="foo"]{color:#fff}', + { env: 'ie7' } ); test( - 'should not merge case insensitive attribute selectors', - passthroughCSS, - 'div{color:#fff}[href="foo" i]{color:#fff}', - {env: 'edge15'} + 'should not merge case insensitive attribute selectors', + passthroughCSS, + 'div{color:#fff}[href="foo" i]{color:#fff}', + { env: 'edge15' } ); const pseudoKeys = Object.keys(pseudoElements); -test(`should not merge ${pseudoKeys.length} pseudo elements`, t => { - return Promise.all( - pseudoKeys.reduce((promises, pseudo) => { - return [...promises, processCSS( - t, - `${pseudo}{color:blue}h1{color:blue}`, - `${pseudo}{color:blue}h1{color:blue}`, - {env: 'ie6'} - )]; - }, []) - ); +test(`should not merge ${pseudoKeys.length} pseudo elements`, (t) => { + return Promise.all( + pseudoKeys.reduce((promises, pseudo) => { + return [ + ...promises, + processCSS( + t, + `${pseudo}{color:blue}h1{color:blue}`, + `${pseudo}{color:blue}h1{color:blue}`, + { env: 'ie6' } + ), + ]; + }, []) + ); }); test( - 'should handle css mixins', - passthroughCSS, - `paper-card{--paper-card-content:{padding-top:0};margin:0 auto 16px;width:768px;max-width:calc(100% - 32px)}` + 'should handle css mixins', + passthroughCSS, + `paper-card{--paper-card-content:{padding-top:0};margin:0 auto 16px;width:768px;max-width:calc(100% - 32px)}` ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); -test('should not crash when node.raws.value is null', t => { - const css = '$color: red; h1{box-shadow:inset 0 -10px 12px 0 $color, /* some comment */ inset 0 0 5px 0 $color;color:blue}h2{color:blue}'; - const res = postcss([ vars(), comments(), plugin]).process(css).css; +test('should not crash when node.raws.value is null', (t) => { + const css = + '$color: red; h1{box-shadow:inset 0 -10px 12px 0 $color, /* some comment */ inset 0 0 5px 0 $color;color:blue}h2{color:blue}'; + const res = postcss([vars(), comments(), plugin]).process(css).css; - t.deepEqual(res, 'h1{box-shadow:inset 0 -10px 12px 0 red, inset 0 0 5px 0 red}h1,h2{color:blue}'); + t.deepEqual( + res, + 'h1{box-shadow:inset 0 -10px 12px 0 red, inset 0 0 5px 0 red}h1,h2{color:blue}' + ); }); -test('should not crash when node.raws.value is null (2)', t => { - const css = '#foo .bar { margin-left: auto ; margin-right: auto ; } #foo .qux { margin-right: auto ; }'; - const res = postcss([ comments(), plugin]).process(css).css; +test('should not crash when node.raws.value is null (2)', (t) => { + const css = + '#foo .bar { margin-left: auto ; margin-right: auto ; } #foo .qux { margin-right: auto ; }'; + const res = postcss([comments(), plugin]).process(css).css; - t.deepEqual(res, '#foo .bar{ margin-left:auto; } #foo .bar,#foo .qux{ margin-right:auto; }'); + t.deepEqual( + res, + '#foo .bar{ margin-left:auto; } #foo .bar,#foo .qux{ margin-right:auto; }' + ); }); test( - 'should place rules with "all" at the top', - processCSS, - '.a{margin: 10px 20px;display: flex;all: initial;font-size: 10px;border-radius: 2px;color: blue;}.b{margin: 10px 30px;display: flex;all: initial;font-size: 20px;border-radius: 2px;color: blue;}', - '.a,.b{display: flex;all: initial;border-radius: 2px;color: blue;}.a{margin: 10px 20px;font-size: 10px;}.b{margin: 10px 30px;font-size: 20px;}' + 'should place rules with "all" at the top', + processCSS, + '.a{margin: 10px 20px;display: flex;all: initial;font-size: 10px;border-radius: 2px;color: blue;}.b{margin: 10px 30px;display: flex;all: initial;font-size: 20px;border-radius: 2px;color: blue;}', + '.a,.b{display: flex;all: initial;border-radius: 2px;color: blue;}.a{margin: 10px 20px;font-size: 10px;}.b{margin: 10px 30px;font-size: 20px;}' ); test( - 'should place rules with "all" at the top (2)', - processCSS, - '.a{margin: 10px 20px;display: flex;ALL: initial;font-size: 10px;border-radius: 2px;color: blue;}.b{margin: 10px 30px;display: flex;ALL: initial;font-size: 20px;border-radius: 2px;color: blue;}', - '.a,.b{display: flex;ALL: initial;border-radius: 2px;color: blue;}.a{margin: 10px 20px;font-size: 10px;}.b{margin: 10px 30px;font-size: 20px;}' + 'should place rules with "all" at the top (2)', + processCSS, + '.a{margin: 10px 20px;display: flex;ALL: initial;font-size: 10px;border-radius: 2px;color: blue;}.b{margin: 10px 30px;display: flex;ALL: initial;font-size: 20px;border-radius: 2px;color: blue;}', + '.a,.b{display: flex;ALL: initial;border-radius: 2px;color: blue;}.a{margin: 10px 20px;font-size: 10px;}.b{margin: 10px 30px;font-size: 20px;}' ); test( - 'should merge multiple media queries', - processCSS, - '@media print{h1{display:block}}@media print{h1{color:red}}', - '@media print{h1{display:block;color:red}}@media print{}' + 'should merge multiple media queries', + processCSS, + '@media print{h1{display:block}}@media print{h1{color:red}}', + '@media print{h1{display:block;color:red}}@media print{}' ); test( - 'should merge multiple media queries (uppercase)', - processCSS, - '@media print{h1{display:block}}@MEDIA print{h1{color:red}}', - '@media print{h1{display:block;color:red}}@MEDIA print{}' + 'should merge multiple media queries (uppercase)', + processCSS, + '@media print{h1{display:block}}@MEDIA print{h1{color:red}}', + '@media print{h1{display:block;color:red}}@MEDIA print{}' ); test( - 'should not merge nested at-rules', - passthroughCSS, - [ - '@media (min-width: 48rem){.wrapper{display: block}}', - '@supports (display: flex){@media (min-width: 48rem){.wrapper{display:flex}}}', - ].join(''), + 'should not merge nested at-rules', + passthroughCSS, + [ + '@media (min-width: 48rem){.wrapper{display: block}}', + '@supports (display: flex){@media (min-width: 48rem){.wrapper{display:flex}}}', + ].join('') ); test( - 'should merge with same at-rule parent', - processCSS, - [ - '@media print{h1{display:block}}', - '@media print{h1{color:red}h2{padding:10px}}', - ].join(''), - [ - '@media print{h1{display:block;color:red}h2{padding:10px}}', - '@media print{}', - ].join('') + 'should merge with same at-rule parent', + processCSS, + [ + '@media print{h1{display:block}}', + '@media print{h1{color:red}h2{padding:10px}}', + ].join(''), + [ + '@media print{h1{display:block;color:red}h2{padding:10px}}', + '@media print{}', + ].join('') ); test( - 'should merge with same at-rule parent (2)', - processCSS, - [ - '@media (width:40px){.red{color:red}}', - '@media (width:40px){.green{color:green}}', - '@media (width:40px){.blue{color:blue}}', - '@supports (--var:var){.white{color:white}}', - '@supports (--var:var){.black{color:black}}', - ].join(''), - [ - '@media (width:40px){.red{color:red}.green{color:green}.blue{color:blue}}', - '@media (width:40px){}', - '@media (width:40px){}', - '@supports (--var:var){.white{color:white}.black{color:black}}', - '@supports (--var:var){}', - ].join('') + 'should merge with same at-rule parent (2)', + processCSS, + [ + '@media (width:40px){.red{color:red}}', + '@media (width:40px){.green{color:green}}', + '@media (width:40px){.blue{color:blue}}', + '@supports (--var:var){.white{color:white}}', + '@supports (--var:var){.black{color:black}}', + ].join(''), + [ + '@media (width:40px){.red{color:red}.green{color:green}.blue{color:blue}}', + '@media (width:40px){}', + '@media (width:40px){}', + '@supports (--var:var){.white{color:white}.black{color:black}}', + '@supports (--var:var){}', + ].join('') ); test( - 'should merge with same nested at-rule parents', - processCSS, - [ - '@media (width:40px){.red{color:red}}', - '@media (width:40px){.green{color:green}}', - '@media (width:40px){.blue{color:blue}}', - '@supports (--var:var){@media (width:40px){.white{color:white}}}', - '@supports (--var:var){@media (width:40px){.black{color:black}}}', - ].join(''), - [ - '@media (width:40px){.red{color:red}.green{color:green}.blue{color:blue}}', - '@media (width:40px){}', - '@media (width:40px){}', - '@supports (--var:var){@media (width:40px){.white{color:white}.black{color:black}}}', - '@supports (--var:var){@media (width:40px){}}', - ].join('') + 'should merge with same nested at-rule parents', + processCSS, + [ + '@media (width:40px){.red{color:red}}', + '@media (width:40px){.green{color:green}}', + '@media (width:40px){.blue{color:blue}}', + '@supports (--var:var){@media (width:40px){.white{color:white}}}', + '@supports (--var:var){@media (width:40px){.black{color:black}}}', + ].join(''), + [ + '@media (width:40px){.red{color:red}.green{color:green}.blue{color:blue}}', + '@media (width:40px){}', + '@media (width:40px){}', + '@supports (--var:var){@media (width:40px){.white{color:white}.black{color:black}}}', + '@supports (--var:var){@media (width:40px){}}', + ].join('') ); test( - 'should not merge with different at-rule parent', - passthroughCSS, - [ - '@media print{h1{display:block}}', - '@media screen{h1{color:red}h2{padding:10px}}', - ].join('') + 'should not merge with different at-rule parent', + passthroughCSS, + [ + '@media print{h1{display:block}}', + '@media screen{h1{color:red}h2{padding:10px}}', + ].join('') ); test( - 'should not merge with different nested at-rules parents', - passthroughCSS, - [ - '@media (min-width: 48rem){.wrapper{display: block}}', - '@supports (display: flex){@media (min-width: 48rem){.wrapper{display:flex}}}', - ].join('') + 'should not merge with different nested at-rules parents', + passthroughCSS, + [ + '@media (min-width: 48rem){.wrapper{display: block}}', + '@supports (display: flex){@media (min-width: 48rem){.wrapper{display:flex}}}', + ].join('') ); test( - 'should not merge with different nested at-rule parents (2)', - passthroughCSS, - [ - '@media print{h1{display:block}}', - '@support (color:red){@media print (color:red){h1{color:red}h2{padding:10px}}}', - ].join('') + 'should not merge with different nested at-rule parents (2)', + passthroughCSS, + [ + '@media print{h1{display:block}}', + '@support (color:red){@media print (color:red){h1{color:red}h2{padding:10px}}}', + ].join('') ); - -test( - 'should merge multiple values across at-rules', - processCSS, - [ - '@media (width:40px){h1{border:1px solid red;background-color:red;background-position:50% 100%}}', - '@media (width:40px){h1{border:1px solid red;background-color:red}}', - '@media (width:40px){h1{border:1px solid red}}', - ].join(''), - [ - '@media (width:40px){h1{border:1px solid red;background-color:red;background-position:50% 100%}}', - '@media (width:40px){}', - '@media (width:40px){}', - ].join(''), -); - -test( - 'should partially merge selectors in the opposite direction across at-rules', - processCSS, - [ - '@media (width:40px){h1{color:black}h2{color:black;font-weight:bold}}', - '@media (width:40px){h3{color:black;font-weight:bold}}', - ].join(''), - [ - '@media (width:40px){h1{color:black}h2,h3{color:black;font-weight:bold}}', - '@media (width:40px){}', - ].join('') - + +test( + 'should merge multiple values across at-rules', + processCSS, + [ + '@media (width:40px){h1{border:1px solid red;background-color:red;background-position:50% 100%}}', + '@media (width:40px){h1{border:1px solid red;background-color:red}}', + '@media (width:40px){h1{border:1px solid red}}', + ].join(''), + [ + '@media (width:40px){h1{border:1px solid red;background-color:red;background-position:50% 100%}}', + '@media (width:40px){}', + '@media (width:40px){}', + ].join('') +); + +test( + 'should partially merge selectors in the opposite direction across at-rules', + processCSS, + [ + '@media (width:40px){h1{color:black}h2{color:black;font-weight:bold}}', + '@media (width:40px){h3{color:black;font-weight:bold}}', + ].join(''), + [ + '@media (width:40px){h1{color:black}h2,h3{color:black;font-weight:bold}}', + '@media (width:40px){}', + ].join('') ); diff --git a/packages/postcss-merge-rules/src/index.js b/packages/postcss-merge-rules/src/index.js index a4f0b4bb8..6e877733f 100644 --- a/packages/postcss-merge-rules/src/index.js +++ b/packages/postcss-merge-rules/src/index.js @@ -5,15 +5,17 @@ import sameParent from 'lerna:cssnano-util-same-parent'; import ensureCompatibility from './lib/ensureCompatibility'; /** @type {string[]} */ -const prefixes = vendors.map(v => `-${v}-`); +const prefixes = vendors.map((v) => `-${v}-`); /** * @param {postcss.Declaration} a * @param {postcss.Declaration} b * @return {boolean} */ -function declarationIsEqual (a, b) { - return (a.important === b.important && a.prop === b.prop && a.value === b.value); +function declarationIsEqual(a, b) { + return ( + a.important === b.important && a.prop === b.prop && a.value === b.value + ); } /** @@ -21,8 +23,8 @@ function declarationIsEqual (a, b) { * @param {postcss.Declaration} decl * @return {number} */ -function indexOfDeclaration (array, decl) { - return array.findIndex(d => declarationIsEqual(d, decl)); +function indexOfDeclaration(array, decl) { + return array.findIndex((d) => declarationIsEqual(d, decl)); } /** @@ -32,11 +34,11 @@ function indexOfDeclaration (array, decl) { * @param {boolean} [not=false] * @return {postcss.Declaration[]} */ -function intersect (a, b, not) { - return a.filter((c) => { - const index = ~indexOfDeclaration(b, c); - return not ? !index : index; - }); +function intersect(a, b, not) { + return a.filter((c) => { + const index = ~indexOfDeclaration(b, c); + return not ? !index : index; + }); } /** @@ -44,37 +46,41 @@ function intersect (a, b, not) { * @param {postcss.Declaration[]} b * @return {boolean} */ -function sameDeclarationsAndOrder (a, b) { - if (a.length !== b.length) { - return false; - } - return a.every((d, index) => declarationIsEqual(d, b[index])); +function sameDeclarationsAndOrder(a, b) { + if (a.length !== b.length) { + return false; + } + return a.every((d, index) => declarationIsEqual(d, b[index])); } // Internet Explorer use :-ms-input-placeholder. // Microsoft Edge use ::-ms-input-placeholder. -const findMsInputPlaceholder = selector => ~selector.search(/-ms-input-placeholder/i); +const findMsInputPlaceholder = (selector) => + ~selector.search(/-ms-input-placeholder/i); /** * @param {string} selector * @return {string[]} */ -function filterPrefixes (selector) { - return prefixes.filter(prefix => selector.indexOf(prefix) !== -1); +function filterPrefixes(selector) { + return prefixes.filter((prefix) => selector.indexOf(prefix) !== -1); } -function sameVendor (selectorsA, selectorsB) { - let same = selectors => selectors.map(filterPrefixes).join(); - let findMsVendor = selectors => selectors.find(findMsInputPlaceholder); - return same(selectorsA) === same(selectorsB) && !(findMsVendor(selectorsA) && findMsVendor(selectorsB)); +function sameVendor(selectorsA, selectorsB) { + let same = (selectors) => selectors.map(filterPrefixes).join(); + let findMsVendor = (selectors) => selectors.find(findMsInputPlaceholder); + return ( + same(selectorsA) === same(selectorsB) && + !(findMsVendor(selectorsA) && findMsVendor(selectorsB)) + ); } /** * @param {string} selector * @return {boolean} */ -function noVendor (selector) { - return !filterPrefixes(selector).length; +function noVendor(selector) { + return !filterPrefixes(selector).length; } /** @@ -84,99 +90,98 @@ function noVendor (selector) { * @param {Object.=} compatibilityCache * @return {boolean} */ -function canMerge (ruleA, ruleB, browsers, compatibilityCache) { - const a = ruleA.selectors; - const b = ruleB.selectors; - - const selectors = a.concat(b); - - if (!ensureCompatibility(selectors, browsers, compatibilityCache)) { - return false; - } - - const parent = sameParent(ruleA, ruleB); - const {name} = ruleA.parent; - if (parent && name && ~name.indexOf('keyframes')) { - return false; - } - return parent && (selectors.every(noVendor) || sameVendor(a, b)); +function canMerge(ruleA, ruleB, browsers, compatibilityCache) { + const a = ruleA.selectors; + const b = ruleB.selectors; + + const selectors = a.concat(b); + + if (!ensureCompatibility(selectors, browsers, compatibilityCache)) { + return false; + } + + const parent = sameParent(ruleA, ruleB); + const { name } = ruleA.parent; + if (parent && name && ~name.indexOf('keyframes')) { + return false; + } + return parent && (selectors.every(noVendor) || sameVendor(a, b)); } /** * @param {postcss.Rule} rule * @return {postcss.Declaration[]} */ -function getDecls (rule) { - return rule.nodes.filter(node => node.type === 'decl'); +function getDecls(rule) { + return rule.nodes.filter((node) => node.type === 'decl'); } -const joinSelectors = (...rules) => rules.map(s => s.selector).join(); +const joinSelectors = (...rules) => rules.map((s) => s.selector).join(); -function ruleLength (...rules) { - return rules.map(r => r.nodes.length ? String(r) : '').join('').length; +function ruleLength(...rules) { + return rules.map((r) => (r.nodes.length ? String(r) : '')).join('').length; } /** * @param {string} prop * @return {{prefix: string, base:string, rest:string[]}} */ -function splitProp (prop) { - // Treat vendor prefixed properties as if they were unprefixed; - // moving them when combined with non-prefixed properties can - // cause issues. e.g. moving -webkit-background-clip when there - // is a background shorthand definition. - - const parts = prop.split('-'); - if (prop[0] !== '-') { - return { - prefix: '', - base: parts[0], - rest: parts.slice(1), - }; - } - // Don't split css variables - if (prop[1] === '-') { - return { - prefix: null, - base: null, - rest: [prop], - }; - } - // Found prefix +function splitProp(prop) { + // Treat vendor prefixed properties as if they were unprefixed; + // moving them when combined with non-prefixed properties can + // cause issues. e.g. moving -webkit-background-clip when there + // is a background shorthand definition. + + const parts = prop.split('-'); + if (prop[0] !== '-') { + return { + prefix: '', + base: parts[0], + rest: parts.slice(1), + }; + } + // Don't split css variables + if (prop[1] === '-') { return { - prefix: parts[1], - base: parts[2], - rest: parts.slice(3), + prefix: null, + base: null, + rest: [prop], }; - + } + // Found prefix + return { + prefix: parts[1], + base: parts[2], + rest: parts.slice(3), + }; } /** * @param {string} propA * @param {string} propB */ -function isConflictingProp (propA, propB) { - if (propA === propB) { - // Same specificity - return true; - } - const a = splitProp(propA); - const b = splitProp(propB); - // Don't resort css variables - if (!a.base && !b.base) { - return true; - } - // Different base; - if (a.base !== b.base) { - return false; - } - // Conflict if rest-count mismatches - if (a.rest.length !== b.rest.length) { - return true; - } +function isConflictingProp(propA, propB) { + if (propA === propB) { + // Same specificity + return true; + } + const a = splitProp(propA); + const b = splitProp(propB); + // Don't resort css variables + if (!a.base && !b.base) { + return true; + } + // Different base; + if (a.base !== b.base) { + return false; + } + // Conflict if rest-count mismatches + if (a.rest.length !== b.rest.length) { + return true; + } - // Conflict if rest parameters are equal (same but unprefixed) - return (a.rest.every((s, index) => b.rest[index] === s)); + // Conflict if rest parameters are equal (same but unprefixed) + return a.rest.every((s, index) => b.rest[index] === s); } /** @@ -184,22 +189,22 @@ function isConflictingProp (propA, propB) { * @param {postcss.Rule} second * @return {boolean} merged */ -function mergeParents (first, second) { - // Null check for detached rules - if (!first.parent || !second.parent) { - return false; - } - - // Check if parents share node - if (first.parent === second.parent) { - return false; - } - - // sameParent() already called by canMerge() - - second.remove(); - first.parent.append(second); - return true; +function mergeParents(first, second) { + // Null check for detached rules + if (!first.parent || !second.parent) { + return false; + } + + // Check if parents share node + if (first.parent === second.parent) { + return false; + } + + // sameParent() already called by canMerge() + + second.remove(); + first.parent.append(second); + return true; } /** @@ -207,113 +212,123 @@ function mergeParents (first, second) { * @param {postcss.Rule} second * @return {postcss.Rule} mergedRule */ -function partialMerge (first, second) { - let intersection = intersect(getDecls(first), getDecls(second)); - if (!intersection.length) { - return second; +function partialMerge(first, second) { + let intersection = intersect(getDecls(first), getDecls(second)); + if (!intersection.length) { + return second; + } + let nextRule = second.next(); + if (!nextRule) { + // Grab next cousin + const parentSibling = second.parent.next(); + nextRule = parentSibling && parentSibling.nodes && parentSibling.nodes[0]; + } + if (nextRule && nextRule.type === 'rule' && canMerge(second, nextRule)) { + let nextIntersection = intersect(getDecls(second), getDecls(nextRule)); + if (nextIntersection.length > intersection.length) { + mergeParents(second, nextRule); + first = second; + second = nextRule; + intersection = nextIntersection; } - let nextRule = second.next(); - if (!nextRule) { - // Grab next cousin - const parentSibling = second.parent.next(); - nextRule = parentSibling && parentSibling.nodes && parentSibling.nodes[0]; + } + + const firstDecls = getDecls(first); + + // Filter out intersections with later conflicts in First + intersection = intersection.filter((decl, intersectIndex) => { + const index = indexOfDeclaration(firstDecls, decl); + const nextConflictInFirst = firstDecls + .slice(index + 1) + .find((d) => isConflictingProp(d.prop, decl.prop)); + if (!nextConflictInFirst) { + return true; } - if (nextRule && nextRule.type === 'rule' && canMerge(second, nextRule)) { - let nextIntersection = intersect(getDecls(second), getDecls(nextRule)); - if (nextIntersection.length > intersection.length) { - mergeParents(second, nextRule); - first = second; second = nextRule; intersection = nextIntersection; - } + const nextConflictInIntersection = intersection + .slice(intersectIndex + 1) + .find((d) => isConflictingProp(d.prop, decl.prop)); + if (!nextConflictInIntersection) { + return false; } - - const firstDecls = getDecls(first); - - // Filter out intersections with later conflicts in First - intersection = intersection.filter((decl, intersectIndex) => { - const index = indexOfDeclaration(firstDecls, decl); - const nextConflictInFirst = firstDecls.slice(index + 1) - .find(d => isConflictingProp(d.prop, decl.prop)); - if (!nextConflictInFirst) { - return true; - } - const nextConflictInIntersection = intersection.slice(intersectIndex + 1) - .find(d => isConflictingProp(d.prop, decl.prop)); - if (!nextConflictInIntersection) { - return false; - } - if (declarationIsEqual(nextConflictInFirst, nextConflictInIntersection)) { - return true; - } - return false; - }); - - // Filter out intersections with previous conflicts in Second - const secondDecls = getDecls(second); - intersection = intersection.filter((decl) => { - const nextConflictIndex = secondDecls.findIndex(d => isConflictingProp(d.prop, decl.prop)); - if (nextConflictIndex === -1) { - return false; - } - if (!declarationIsEqual(secondDecls[nextConflictIndex], decl)) { - return false; - } - secondDecls.splice(nextConflictIndex, 1); - return true; - }); - - if (!intersection.length) { - // Nothing to merge - return second; + if (declarationIsEqual(nextConflictInFirst, nextConflictInIntersection)) { + return true; } - - const receivingBlock = second.clone(); - receivingBlock.selector = joinSelectors(first, second); - receivingBlock.nodes = []; - - // Rules with "all" declarations must be on top - if (intersection.some(declaration => declaration.prop.toLowerCase() === 'all')) { - second.parent.insertBefore(first, receivingBlock); - } else { - second.parent.insertBefore(second, receivingBlock); + return false; + }); + + // Filter out intersections with previous conflicts in Second + const secondDecls = getDecls(second); + intersection = intersection.filter((decl) => { + const nextConflictIndex = secondDecls.findIndex((d) => + isConflictingProp(d.prop, decl.prop) + ); + if (nextConflictIndex === -1) { + return false; } - - const firstClone = first.clone(); - const secondClone = second.clone(); - - /** - * @param {function(postcss.Declaration):void} callback - * @return {function(postcss.Declaration)} - */ - function moveDecl (callback) { - return (decl) => { - if (~indexOfDeclaration(intersection, decl)) { - callback.call(this, decl); - } - }; + if (!declarationIsEqual(secondDecls[nextConflictIndex], decl)) { + return false; + } + secondDecls.splice(nextConflictIndex, 1); + return true; + }); + + if (!intersection.length) { + // Nothing to merge + return second; + } + + const receivingBlock = second.clone(); + receivingBlock.selector = joinSelectors(first, second); + receivingBlock.nodes = []; + + // Rules with "all" declarations must be on top + if ( + intersection.some((declaration) => declaration.prop.toLowerCase() === 'all') + ) { + second.parent.insertBefore(first, receivingBlock); + } else { + second.parent.insertBefore(second, receivingBlock); + } + + const firstClone = first.clone(); + const secondClone = second.clone(); + + /** + * @param {function(postcss.Declaration):void} callback + * @return {function(postcss.Declaration)} + */ + function moveDecl(callback) { + return (decl) => { + if (~indexOfDeclaration(intersection, decl)) { + callback.call(this, decl); + } }; - firstClone.walkDecls(moveDecl(decl => { - decl.remove(); - receivingBlock.append(decl); - })); - secondClone.walkDecls(moveDecl(decl => decl.remove())); - const merged = ruleLength(firstClone, receivingBlock, secondClone); - const original = ruleLength(first, second); - if (merged < original) { - first.replaceWith(firstClone); - second.replaceWith(secondClone); - [firstClone, receivingBlock, secondClone].forEach(r => { - if (!r.nodes.length) { - r.remove(); - } - }); - if (!secondClone.parent) { - return receivingBlock; - } - return secondClone; - } else { - receivingBlock.remove(); - return second; + } + firstClone.walkDecls( + moveDecl((decl) => { + decl.remove(); + receivingBlock.append(decl); + }) + ); + secondClone.walkDecls(moveDecl((decl) => decl.remove())); + const merged = ruleLength(firstClone, receivingBlock, secondClone); + const original = ruleLength(first, second); + if (merged < original) { + first.replaceWith(firstClone); + second.replaceWith(secondClone); + [firstClone, receivingBlock, secondClone].forEach((r) => { + if (!r.nodes.length) { + r.remove(); + } + }); + if (!secondClone.parent) { + return receivingBlock; } + return secondClone; + } else { + receivingBlock.remove(); + return second; + } } /** @@ -321,62 +336,62 @@ function partialMerge (first, second) { * @param {Object.} compatibilityCache * @return {function(postcss.Rule)} */ -function selectorMerger (browsers, compatibilityCache) { - /** @type {postcss.Rule} */ - let cache = null; - return function (rule) { - // Prime the cache with the first rule, or alternately ensure that it is - // safe to merge both declarations before continuing - if (!cache || !canMerge(rule, cache, browsers, compatibilityCache)) { - cache = rule; - return; - } - // Ensure that we don't deduplicate the same rule; this is sometimes - // caused by a partial merge - if (cache === rule) { - cache = rule; - return; - } +function selectorMerger(browsers, compatibilityCache) { + /** @type {postcss.Rule} */ + let cache = null; + return function(rule) { + // Prime the cache with the first rule, or alternately ensure that it is + // safe to merge both declarations before continuing + if (!cache || !canMerge(rule, cache, browsers, compatibilityCache)) { + cache = rule; + return; + } + // Ensure that we don't deduplicate the same rule; this is sometimes + // caused by a partial merge + if (cache === rule) { + cache = rule; + return; + } - // Parents merge: check if the rules have same parents, but not same parent nodes - mergeParents(cache, rule); + // Parents merge: check if the rules have same parents, but not same parent nodes + mergeParents(cache, rule); - // Merge when declarations are exactly equal - // e.g. h1 { color: red } h2 { color: red } - if (sameDeclarationsAndOrder(getDecls(rule), getDecls(cache))) { - rule.selector = joinSelectors(cache, rule); - cache.remove(); - cache = rule; - return; - } - // Merge when both selectors are exactly equal - // e.g. a { color: blue } a { font-weight: bold } - if (cache.selector === rule.selector) { - const cached = getDecls(cache); - rule.walk(decl => { - if (~indexOfDeclaration(cached, decl)) { - return decl.remove(); - } - cache.append(decl); - }); - rule.remove(); - return; + // Merge when declarations are exactly equal + // e.g. h1 { color: red } h2 { color: red } + if (sameDeclarationsAndOrder(getDecls(rule), getDecls(cache))) { + rule.selector = joinSelectors(cache, rule); + cache.remove(); + cache = rule; + return; + } + // Merge when both selectors are exactly equal + // e.g. a { color: blue } a { font-weight: bold } + if (cache.selector === rule.selector) { + const cached = getDecls(cache); + rule.walk((decl) => { + if (~indexOfDeclaration(cached, decl)) { + return decl.remove(); } - // Partial merge: check if the rule contains a subset of the last; if - // so create a joined selector with the subset, if smaller. - cache = partialMerge(cache, rule); - }; + cache.append(decl); + }); + rule.remove(); + return; + } + // Partial merge: check if the rule contains a subset of the last; if + // so create a joined selector with the subset, if smaller. + cache = partialMerge(cache, rule); + }; } export default postcss.plugin('postcss-merge-rules', () => { - return (css, result) => { - const resultOpts = result.opts || {}; - const browsers = browserslist(null, { - stats: resultOpts.stats, - path: __dirname, - env: resultOpts.env, - }); - const compatibilityCache = {}; - css.walkRules(selectorMerger(browsers, compatibilityCache)); - }; + return (css, result) => { + const resultOpts = result.opts || {}; + const browsers = browserslist(null, { + stats: resultOpts.stats, + path: __dirname, + env: resultOpts.env, + }); + const compatibilityCache = {}; + css.walkRules(selectorMerger(browsers, compatibilityCache)); + }; }); diff --git a/packages/postcss-merge-rules/src/lib/ensureCompatibility.js b/packages/postcss-merge-rules/src/lib/ensureCompatibility.js index 0c001c495..3de1038ca 100644 --- a/packages/postcss-merge-rules/src/lib/ensureCompatibility.js +++ b/packages/postcss-merge-rules/src/lib/ensureCompatibility.js @@ -1,4 +1,4 @@ -import {isSupported} from 'caniuse-api'; +import { isSupported } from 'caniuse-api'; import selectorParser from 'postcss-selector-parser'; const simpleSelectorRe = /^#?[-._a-z0-9 ]+$/i; @@ -11,132 +11,136 @@ const cssFirstLine = 'css-first-line'; const cssInOutOfRange = 'css-in-out-of-range'; export const pseudoElements = { - ':active': cssSel2, - ':after': cssGencontent, - ':before': cssGencontent, - ':checked': cssSel3, - ':default': 'css-default-pseudo', - ':dir': 'css-dir-pseudo', - ':disabled': cssSel3, - ':empty': cssSel3, - ':enabled': cssSel3, - ':first-child': cssSel2, - ':first-letter': cssFirstLetter, - ':first-line': cssFirstLine, - ':first-of-type': cssSel3, - ':focus': cssSel2, - ':focus-within': 'css-focus-within', - ':has': 'css-has', - ':hover': cssSel2, - ':in-range': cssInOutOfRange, - ':indeterminate': 'css-indeterminate-pseudo', - ':lang': cssSel2, - ':last-child': cssSel3, - ':last-of-type': cssSel3, - ':matches': 'css-matches-pseudo', - ':not': cssSel3, - ':nth-child': cssSel3, - ':nth-last-child': cssSel3, - ':nth-last-of-type': cssSel3, - ':nth-of-type': cssSel3, - ':only-child': cssSel3, - ':only-of-type': cssSel3, - ':optional': 'css-optional-pseudo', - ':out-of-range': cssInOutOfRange, - ':placeholder-shown': 'css-placeholder-shown', - ':root': cssSel3, - ':target': cssSel3, - '::after': cssGencontent, - '::backdrop': 'dialog', - '::before': cssGencontent, - '::first-letter': cssFirstLetter, - '::first-line': cssFirstLine, - '::marker': 'css-marker-pseudo', - '::placeholder': 'css-placeholder', - '::selection': 'css-selection', + ':active': cssSel2, + ':after': cssGencontent, + ':before': cssGencontent, + ':checked': cssSel3, + ':default': 'css-default-pseudo', + ':dir': 'css-dir-pseudo', + ':disabled': cssSel3, + ':empty': cssSel3, + ':enabled': cssSel3, + ':first-child': cssSel2, + ':first-letter': cssFirstLetter, + ':first-line': cssFirstLine, + ':first-of-type': cssSel3, + ':focus': cssSel2, + ':focus-within': 'css-focus-within', + ':has': 'css-has', + ':hover': cssSel2, + ':in-range': cssInOutOfRange, + ':indeterminate': 'css-indeterminate-pseudo', + ':lang': cssSel2, + ':last-child': cssSel3, + ':last-of-type': cssSel3, + ':matches': 'css-matches-pseudo', + ':not': cssSel3, + ':nth-child': cssSel3, + ':nth-last-child': cssSel3, + ':nth-last-of-type': cssSel3, + ':nth-of-type': cssSel3, + ':only-child': cssSel3, + ':only-of-type': cssSel3, + ':optional': 'css-optional-pseudo', + ':out-of-range': cssInOutOfRange, + ':placeholder-shown': 'css-placeholder-shown', + ':root': cssSel3, + ':target': cssSel3, + '::after': cssGencontent, + '::backdrop': 'dialog', + '::before': cssGencontent, + '::first-letter': cssFirstLetter, + '::first-line': cssFirstLine, + '::marker': 'css-marker-pseudo', + '::placeholder': 'css-placeholder', + '::selection': 'css-selection', }; -function isCssMixin (selector) { - return selector[selector.length - 1] === ':'; +function isCssMixin(selector) { + return selector[selector.length - 1] === ':'; } const isSupportedCache = {}; // Move to util in future -function isSupportedCached (feature, browsers) { - const key = JSON.stringify({feature, browsers}); - let result = isSupportedCache[key]; +function isSupportedCached(feature, browsers) { + const key = JSON.stringify({ feature, browsers }); + let result = isSupportedCache[key]; - if (!result) { - result = isSupported(feature, browsers); - isSupportedCache[key] = result; - } + if (!result) { + result = isSupported(feature, browsers); + isSupportedCache[key] = result; + } - return result; + return result; } -export default function ensureCompatibility (selectors, browsers, compatibilityCache) { - // Should not merge mixins - if (selectors.some(isCssMixin)) { - return false; +export default function ensureCompatibility( + selectors, + browsers, + compatibilityCache +) { + // Should not merge mixins + if (selectors.some(isCssMixin)) { + return false; + } + return selectors.every((selector) => { + if (simpleSelectorRe.test(selector)) { + return true; + } + if (compatibilityCache && selector in compatibilityCache) { + return compatibilityCache[selector]; } - return selectors.every(selector => { - if (simpleSelectorRe.test(selector)) { - return true; + let compatible = true; + selectorParser((ast) => { + ast.walk((node) => { + const { type, value } = node; + if (type === 'pseudo') { + const entry = pseudoElements[value]; + if (entry && compatible) { + compatible = isSupportedCached(entry, browsers); + } } - if (compatibilityCache && (selector in compatibilityCache)) { - return compatibilityCache[selector]; + if (type === 'combinator') { + if (~value.indexOf('~')) { + compatible = isSupportedCached(cssSel3, browsers); + } + if (~value.indexOf('>') || ~value.indexOf('+')) { + compatible = isSupportedCached(cssSel2, browsers); + } } - let compatible = true; - selectorParser(ast => { - ast.walk(node => { - const {type, value} = node; - if (type === 'pseudo') { - const entry = pseudoElements[value]; - if (entry && compatible) { - compatible = isSupportedCached(entry, browsers); - } - } - if (type === 'combinator') { - if (~value.indexOf('~')) { - compatible = isSupportedCached(cssSel3, browsers); - } - if (~value.indexOf('>') || ~value.indexOf('+')) { - compatible = isSupportedCached(cssSel2, browsers); - } - } - if (type === 'attribute' && node.attribute) { - // [foo] - if (!node.operator) { - compatible = isSupportedCached(cssSel2, browsers); - } + if (type === 'attribute' && node.attribute) { + // [foo] + if (!node.operator) { + compatible = isSupportedCached(cssSel2, browsers); + } - if (value) { - // [foo="bar"], [foo~="bar"], [foo|="bar"] - if (~['=', '~=', '|='].indexOf(node.operator)) { - compatible = isSupportedCached(cssSel2, browsers); - } - // [foo^="bar"], [foo$="bar"], [foo*="bar"] - if (~['^=', '$=', '*='].indexOf(node.operator)) { - compatible = isSupportedCached(cssSel3, browsers); - } - } + if (value) { + // [foo="bar"], [foo~="bar"], [foo|="bar"] + if (~['=', '~=', '|='].indexOf(node.operator)) { + compatible = isSupportedCached(cssSel2, browsers); + } + // [foo^="bar"], [foo$="bar"], [foo*="bar"] + if (~['^=', '$=', '*='].indexOf(node.operator)) { + compatible = isSupportedCached(cssSel3, browsers); + } + } - // [foo="bar" i] - if (node.insensitive) { - compatible = isSupportedCached('css-case-insensitive', browsers); - } - } - if (!compatible) { - // If this node was not compatible, - // break out early from walking the rest - return false; - } - }); - }).processSync(selector); - if (compatibilityCache) { - compatibilityCache[selector] = compatible; + // [foo="bar" i] + if (node.insensitive) { + compatible = isSupportedCached('css-case-insensitive', browsers); + } } - return compatible; - }); + if (!compatible) { + // If this node was not compatible, + // break out early from walking the rest + return false; + } + }); + }).processSync(selector); + if (compatibilityCache) { + compatibilityCache[selector] = compatible; + } + return compatible; + }); } diff --git a/packages/postcss-minify-font-values/src/__tests__/index.js b/packages/postcss-minify-font-values/src/__tests__/index.js index badc24e84..c6026f0e4 100644 --- a/packages/postcss-minify-font-values/src/__tests__/index.js +++ b/packages/postcss-minify-font-values/src/__tests__/index.js @@ -1,402 +1,504 @@ import test from 'ava'; import plugin from '..'; import { - usePostCSSPlugin, - processCSSFactory, - processCSSWithPresetFactory, + usePostCSSPlugin, + processCSSFactory, + processCSSWithPresetFactory, } from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); const { - processCSS: withDefaultPreset, - passthroughCSS: passthroughDefault, + processCSS: withDefaultPreset, + passthroughCSS: passthroughDefault, } = processCSSWithPresetFactory('default'); test( - 'should not unquote font names with a leading number', - passthroughCSS, - 'h1{font-family:"11880-icons"!important;}' + 'should not unquote font names with a leading number', + passthroughCSS, + 'h1{font-family:"11880-icons"!important;}' ); test( - 'should unquote font names', - processCSS, - 'h1{font-family:"Helvetica Neue"}', - 'h1{font-family:Helvetica Neue}' + 'should unquote font names', + processCSS, + 'h1{font-family:"Helvetica Neue"}', + 'h1{font-family:Helvetica Neue}' ); test( - 'should unquote font names with one character name', - processCSS, - 'h1{font-family:"A"}', - 'h1{font-family:A}' + 'should unquote font names with one character name', + processCSS, + 'h1{font-family:"A"}', + 'h1{font-family:A}' ); test( - 'should unquote font names with space at the start', - processCSS, - 'h1{font-family:" Helvetica Neue"}', - 'h1{font-family:\\ Helvetica Neue}' + 'should unquote font names with space at the start', + processCSS, + 'h1{font-family:" Helvetica Neue"}', + 'h1{font-family:\\ Helvetica Neue}' ); test( - 'should unquote font names with space at the end', - processCSS, - 'h1{font-family:"Helvetica Neue "}', - 'h1{font-family:Helvetica Neue\\ }' + 'should unquote font names with space at the end', + processCSS, + 'h1{font-family:"Helvetica Neue "}', + 'h1{font-family:Helvetica Neue\\ }' ); test( - 'should unquote and join identifiers with a slash, if numeric', - processCSS, - 'h1{font-family:"Bond 007"}', - 'h1{font-family:Bond\\ 007}' + 'should unquote and join identifiers with a slash, if numeric', + processCSS, + 'h1{font-family:"Bond 007"}', + 'h1{font-family:Bond\\ 007}' ); test( - 'should not unquote font name contains generic font family word at start', - passthroughCSS, - 'h1{font-family:"serif custom font"}' + 'should not unquote font name contains generic font family word at start', + passthroughCSS, + 'h1{font-family:"serif custom font"}' ); test( - 'should not unquote font name contains generic font family word at middle', - passthroughCSS, - 'h1{font-family:"custom serif font"}' + 'should not unquote font name contains generic font family word at middle', + passthroughCSS, + 'h1{font-family:"custom serif font"}' ); test( - 'should not unquote font name contains generic font family word at end', - passthroughCSS, - 'h1{font-family:"custom font serif"}' + 'should not unquote font name contains generic font family word at end', + passthroughCSS, + 'h1{font-family:"custom font serif"}' ); test( - 'should not unquote font name contains monospace generic font family word', - passthroughCSS, - 'h1{font-family:"Monospace Custom Font"}' + 'should not unquote font name contains monospace generic font family word', + passthroughCSS, + 'h1{font-family:"Monospace Custom Font"}' ); test( - 'should not unquote font name contains monospace generic font family word with spaces', - passthroughCSS, - 'h1{font-family:" Monospace Custom Font "}' + 'should not unquote font name contains monospace generic font family word with spaces', + passthroughCSS, + 'h1{font-family:" Monospace Custom Font "}' ); test( - 'should unquote and join identifiers with a slash', - passthroughCSS, - 'h1{font-family:Ahem\\!}' + 'should unquote and join identifiers with a slash', + passthroughCSS, + 'h1{font-family:Ahem\\!}' ); test( - 'should unquote with escaped `/` character', - passthroughCSS, - 'h1{font-family:Red\\/Black}' + 'should unquote with escaped `/` character', + passthroughCSS, + 'h1{font-family:Red\\/Black}' ); test( - 'should unquote with multiple escaped ` ` character', - passthroughCSS, - 'h1{font-family:Hawaii \\ \\ \\ \\ \\ \\\\35}' + 'should unquote with multiple escaped ` ` character', + passthroughCSS, + 'h1{font-family:Hawaii \\ \\ \\ \\ \\ \\\\35}' ); test( - 'should not unquote if it would produce a bigger identifier', - passthroughCSS, - 'h1{font-family:"Call 0118 999 881 999 119 725 3"}' + 'should not unquote if it would produce a bigger identifier', + passthroughCSS, + 'h1{font-family:"Call 0118 999 881 999 119 725 3"}' ); test( - 'should not unquote font names if they contain keywords', - passthroughCSS, - 'h1{font-family:"slab serif"}' + 'should not unquote font names if they contain keywords', + passthroughCSS, + 'h1{font-family:"slab serif"}' ); test( - 'should not unquote font names with multiple \\', - passthroughCSS, - 'h1{font-family:"\\5FAE\\8F6F\\96C5\\9ED1"}' + 'should not unquote font names with multiple \\', + passthroughCSS, + 'h1{font-family:"\\5FAE\\8F6F\\96C5\\9ED1"}' ); test( - 'should not unquote font names with multiple \\', - passthroughCSS, - 'h1{font-family:"\\5B8B\\4F53"}' + 'should not unquote font names with multiple \\', + passthroughCSS, + 'h1{font-family:"\\5B8B\\4F53"}' ); test( - 'should minimise space inside a legal font name', - processCSS, - 'h1{font-family:Lucida Grande}', - 'h1{font-family:Lucida Grande}' + 'should minimise space inside a legal font name', + processCSS, + 'h1{font-family:Lucida Grande}', + 'h1{font-family:Lucida Grande}' ); test( - 'should minimise space around a list of font names', - processCSS, - 'h1{font-family:Arial, Helvetica, sans-serif}', - 'h1{font-family:Arial,Helvetica,sans-serif}' + 'should minimise space around a list of font names', + processCSS, + 'h1{font-family:Arial, Helvetica, sans-serif}', + 'h1{font-family:Arial,Helvetica,sans-serif}' ); test( - 'should dedupe font family names', - processCSS, - 'h1{font-family:Helvetica,Arial,Helvetica,sans-serif}', - 'h1{font-family:Helvetica,Arial,sans-serif}' + 'should dedupe font family names', + processCSS, + 'h1{font-family:Helvetica,Arial,Helvetica,sans-serif}', + 'h1{font-family:Helvetica,Arial,sans-serif}' ); test( - 'should dedupe lowercase generic font family name', - processCSS, - 'h1{font-family:Helvetica,Arial,sans-serif,sans-serif}', - 'h1{font-family:Helvetica,Arial,sans-serif}' + 'should dedupe lowercase generic font family name', + processCSS, + 'h1{font-family:Helvetica,Arial,sans-serif,sans-serif}', + 'h1{font-family:Helvetica,Arial,sans-serif}' ); test( - 'should dedupe uppercase generic font family name', - processCSS, - 'h1{font-family:Helvetica,Arial,SANS-SERIF,SANS-SERIF}', - 'h1{font-family:Helvetica,Arial,SANS-SERIF}' + 'should dedupe uppercase generic font family name', + processCSS, + 'h1{font-family:Helvetica,Arial,SANS-SERIF,SANS-SERIF}', + 'h1{font-family:Helvetica,Arial,SANS-SERIF}' ); test( - 'should discard the rest of the declaration after a keyword', - processCSS, - 'h1{font-family:Arial,sans-serif,Arial,"Trebuchet MS"}', - 'h1{font-family:Arial,sans-serif}', - {removeAfterKeyword: true} + 'should discard the rest of the declaration after a keyword', + processCSS, + 'h1{font-family:Arial,sans-serif,Arial,"Trebuchet MS"}', + 'h1{font-family:Arial,sans-serif}', + { removeAfterKeyword: true } ); test( - 'should convert the font shorthand property', - processCSS, - 'h1{font:italic small-caps normal 13px/150% "Helvetica Neue", sans-serif}', - 'h1{font:italic small-caps normal 13px/150% Helvetica Neue,sans-serif}' + 'should convert the font shorthand property', + processCSS, + 'h1{font:italic small-caps normal 13px/150% "Helvetica Neue", sans-serif}', + 'h1{font:italic small-caps normal 13px/150% Helvetica Neue,sans-serif}' ); test( - 'should convert shorthand with zero unit line height', - processCSS, - 'h1{font:italic small-caps normal 13px/1.5 "Helvetica Neue", sans-serif}', - 'h1{font:italic small-caps normal 13px/1.5 Helvetica Neue,sans-serif}' + 'should convert shorthand with zero unit line height', + processCSS, + 'h1{font:italic small-caps normal 13px/1.5 "Helvetica Neue", sans-serif}', + 'h1{font:italic small-caps normal 13px/1.5 Helvetica Neue,sans-serif}' ); test( - 'should convert the font shorthand property with upperlower keyword, unquoted', - processCSS, - 'h1{font:italic Helvetica Neue,sans-serif,Arial}', - 'h1{font:italic Helvetica Neue,sans-serif}', - {removeAfterKeyword: true} + 'should convert the font shorthand property with upperlower keyword, unquoted', + processCSS, + 'h1{font:italic Helvetica Neue,sans-serif,Arial}', + 'h1{font:italic Helvetica Neue,sans-serif}', + { removeAfterKeyword: true } ); test( - 'should convert the font shorthand property with uppercase keyword, unquoted', - processCSS, - 'h1{font:italic Helvetica Neue,SANS-SERIF,Arial}', - 'h1{font:italic Helvetica Neue,SANS-SERIF}', - {removeAfterKeyword: true} + 'should convert the font shorthand property with uppercase keyword, unquoted', + processCSS, + 'h1{font:italic Helvetica Neue,SANS-SERIF,Arial}', + 'h1{font:italic Helvetica Neue,SANS-SERIF}', + { removeAfterKeyword: true } ); test( - 'should join identifiers in the shorthand property', - processCSS, - 'h1{font:italic "Bond 007",sans-serif}', - 'h1{font:italic Bond\\ 007,sans-serif}' + 'should join identifiers in the shorthand property', + processCSS, + 'h1{font:italic "Bond 007",sans-serif}', + 'h1{font:italic Bond\\ 007,sans-serif}' ); test( - 'should join non-digit identifiers in the shorthand property', - processCSS, - 'h1{font:italic "Bond !",serif}', - 'h1{font:italic Bond \\!,serif}' + 'should join non-digit identifiers in the shorthand property', + processCSS, + 'h1{font:italic "Bond !",serif}', + 'h1{font:italic Bond \\!,serif}' ); test( - 'should correctly escape special characters at the start', - processCSS, - 'h1{font-family:"$42"}', - 'h1{font-family:\\$42}' + 'should correctly escape special characters at the start', + processCSS, + 'h1{font-family:"$42"}', + 'h1{font-family:\\$42}' ); test( - 'should correctly escape special characters at the end', - passthroughCSS, - 'h1{font-family:Helvetica Neue\\ }' + 'should correctly escape special characters at the end', + passthroughCSS, + 'h1{font-family:Helvetica Neue\\ }' ); test( - 'should correctly escape multiple special with numbers font name', - passthroughCSS, - 'h1{font-family:\\31 \\ 2\\ 3\\ 4\\ 5}' + 'should correctly escape multiple special with numbers font name', + passthroughCSS, + 'h1{font-family:\\31 \\ 2\\ 3\\ 4\\ 5}' ); test( - 'should correctly escape multiple ` `', - passthroughCSS, - 'h1{font-family:f \\ \\ \\ \\ o \\ \\ \\ \\ o}' + 'should correctly escape multiple ` `', + passthroughCSS, + 'h1{font-family:f \\ \\ \\ \\ o \\ \\ \\ \\ o}' ); test( - 'should correctly escape only spaces font name', - passthroughCSS, - 'h1{font-family:\\ \\ \\ }' + 'should correctly escape only spaces font name', + passthroughCSS, + 'h1{font-family:\\ \\ \\ }' ); test( - 'should correctly escape only two spaces font name', - passthroughCSS, - 'h1{font-family:" "}' + 'should correctly escape only two spaces font name', + passthroughCSS, + 'h1{font-family:" "}' ); test( - 'should correctly escape only spaces font name with quotes', - passthroughCSS, - 'h1{font-family:" "}' + 'should correctly escape only spaces font name with quotes', + passthroughCSS, + 'h1{font-family:" "}' ); test( - 'should unquote multiple escape `[` characters', - passthroughCSS, - 'h1{font-family:"STHeiti Light [STXihei]"}' + 'should unquote multiple escape `[` characters', + passthroughCSS, + 'h1{font-family:"STHeiti Light [STXihei]"}' ); test( - 'should not escape legal characters', - passthroughDefault, - 'h1{font-family:€42}' + 'should not escape legal characters', + passthroughDefault, + 'h1{font-family:€42}' ); test( - 'should not join identifiers in the shorthand property', - passthroughDefault, - 'h1{font:italic "Bond 007 008 009",sans-serif}' + 'should not join identifiers in the shorthand property', + passthroughDefault, + 'h1{font:italic "Bond 007 008 009",sans-serif}' ); test( - 'should escape special characters if unquoting', - withDefaultPreset, - 'h1{font-family:"Ahem!"}', - 'h1{font-family:Ahem\\!}' + 'should escape special characters if unquoting', + withDefaultPreset, + 'h1{font-family:"Ahem!"}', + 'h1{font-family:Ahem\\!}' ); test( - 'should not escape multiple special characters', - passthroughDefault, - 'h1{font-family:"Ahem!!"}' + 'should not escape multiple special characters', + passthroughDefault, + 'h1{font-family:"Ahem!!"}' ); test( - 'should not mangle legal unquoted values', - passthroughDefault, - 'h1{font-family:\\$42}' + 'should not mangle legal unquoted values', + passthroughDefault, + 'h1{font-family:\\$42}' ); test( - 'should not mangle font names', - passthroughDefault, - 'h1{font-family:Glyphicons Halflings}' + 'should not mangle font names', + passthroughDefault, + 'h1{font-family:Glyphicons Halflings}' ); test( - 'should not mangle font names (2)', - passthroughCSS, - 'h1{font-family:FF Din Pro,FF Din Pro Medium}' + 'should not mangle font names (2)', + passthroughCSS, + 'h1{font-family:FF Din Pro,FF Din Pro Medium}' ); test( - 'should handle rem values', - processCSS, - 'h1{font:bold 2.2rem/.9 "Open Sans Condensed", sans-serif}', - 'h1{font:700 2.2rem/.9 Open Sans Condensed,sans-serif}' + 'should handle rem values', + processCSS, + 'h1{font:bold 2.2rem/.9 "Open Sans Condensed", sans-serif}', + 'h1{font:700 2.2rem/.9 Open Sans Condensed,sans-serif}' ); test( - 'should pass through when it doesn\'t find a font property', - passthroughCSS, - 'h1{color:black;text-decoration:none}' + "should pass through when it doesn't find a font property", + passthroughCSS, + 'h1{color:black;text-decoration:none}' ); test( - 'should not remove duplicates', - passthroughCSS, - 'h1{font-family:Helvetica,Helvetica}', - {removeDuplicates: false} + 'should not remove duplicates', + passthroughCSS, + 'h1{font-family:Helvetica,Helvetica}', + { removeDuplicates: false } ); test( - 'should not remove after keyword', - passthroughCSS, - 'h1{font-family:serif,Times}', - {removeAfterKeyword: false} + 'should not remove after keyword', + passthroughCSS, + 'h1{font-family:serif,Times}', + { removeAfterKeyword: false } ); test( - 'should not remove quotes', - passthroughCSS, - 'h1{font-family:"Glyphicons Halflings","Arial"}', - {removeQuotes: false} + 'should not remove quotes', + passthroughCSS, + 'h1{font-family:"Glyphicons Halflings","Arial"}', + { removeQuotes: false } ); test( - 'should not dedupe lower case monospace', - passthroughCSS, - 'font-family:monospace,monospace' + 'should not dedupe lower case monospace', + passthroughCSS, + 'font-family:monospace,monospace' ); test( - 'should not dedupe uppercase monospace', - passthroughCSS, - 'font-family:MONOSPACE,MONOSPACE' + 'should not dedupe uppercase monospace', + passthroughCSS, + 'font-family:MONOSPACE,MONOSPACE' ); test( - 'should not dedupe monospace (2)', - passthroughCSS, - 'font:italic small-caps normal 13px/150% monospace,monospace' + 'should not dedupe monospace (2)', + passthroughCSS, + 'font:italic small-caps normal 13px/150% monospace,monospace' ); test( - 'should not mangle custom props', - passthroughCSS, - ':root{--sans:Helvetica}header{font-family:var(--sans)}' + 'should not mangle custom props', + passthroughCSS, + ':root{--sans:Helvetica}header{font-family:var(--sans)}' ); test( - 'should minify lowercase font-weight', - processCSS, - 'h1{font-weight:bold}', - 'h1{font-weight:700}' + 'should minify lowercase font-weight', + processCSS, + 'h1{font-weight:bold}', + 'h1{font-weight:700}' ); test( - 'should minify uppercase font-weight', - processCSS, - 'h1{font-weight:BOLD}', - 'h1{font-weight:700}' + 'should minify uppercase font-weight', + processCSS, + 'h1{font-weight:BOLD}', + 'h1{font-weight:700}' ); test( - 'should pass through unrelated font lowercase properties', - passthroughCSS, - 'h1{font-style:normal}' + 'should pass through unrelated font lowercase properties', + passthroughCSS, + 'h1{font-style:normal}' ); test( - 'should pass through unrelated font uppercase properties', - passthroughCSS, - 'h1{font-style:NORMAL}' + 'should pass through unrelated font uppercase properties', + passthroughCSS, + 'h1{font-style:NORMAL}' ); test( - 'should minify font property', - processCSS, - 'h1{font: BOLD italic 20px Times New Roman;}', - 'h1{font: 700 italic 20px Times New Roman;}', + 'should minify font property', + processCSS, + 'h1{font:BOLD italic 20px Times New Roman}', + 'h1{font:700 italic 20px Times New Roman}' ); test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + 'should minify font property #2', + passthroughCSS, + 'h1{font:var(--foo) 1.2em Fira Sans,serif}' ); + +test( + 'should minify font property #3', + processCSS, + 'h1{font:var(--foo) bold 16px/2 cursive}', + 'h1{font:var(--foo) 700 16px/2 cursive}' +); + +test( + 'should minify font property #4', + processCSS, + 'h1{font:italic var(--foo) bold 16px/2 cursive}', + 'h1{font:italic var(--foo) 700 16px/2 cursive}' +); + +test( + 'should minify font property #5', + processCSS, + 'h1{font:italic 1.2em "Helvetica Neue", var(--foo)}', + 'h1{font:italic 1.2em Helvetica Neue,var(--foo)}' +); + +test( + 'should minify font property #6', + processCSS, + 'h1{font:oblique 10deg 10px "Helvetica Neue"}', + 'h1{font:oblique 10deg 10px Helvetica Neue}' +); + +test( + 'should pass through css variables in font', + passthroughCSS, + 'h1{font:var(--font-size)}' +); + +test( + 'should pass through css variables in font #2', + passthroughCSS, + 'h1{font:var(--font-size) sans-serif}' +); + +test( + 'should pass through css variables in font #3', + passthroughCSS, + 'h1{font:var(--font-family),sans-serif}' +); + +test( + 'should pass through css variables in font #4', + passthroughCSS, + 'h1{font:italic 1.2em var(--foo)}' +); + +test( + 'should pass through css variables in font #5', + passthroughCSS, + 'h1{font:italic 1.2em sans-serif,var(--foo)}' +); + +test( + 'should pass through css variables in font #6', + passthroughCSS, + 'h1{font:italic var(--foo),monospace}' +); + +test( + 'should pass through css variables in font #7', + passthroughCSS, + 'h1{font:italic var(--foo) monospace}' +); + +test( + 'should pass through css variables in font #8', + passthroughCSS, + 'h1{font:italic monospace,var(--foo)}' +); + +test( + 'should pass through css variables in font #9', + passthroughCSS, + 'h1{font:italic monospace,var(--foo)}' +); + +test( + 'should pass through css variables in font-weight', + passthroughCSS, + 'h1{font-weight:var(--font-size)}' +); + +test( + 'should pass through css variables in font-family', + passthroughCSS, + 'h1{font-family:var(--font-size)}' +); + +test( + 'should pass through css variables in font-family #2', + passthroughCSS, + 'h1{font-family:var(--font-size), Helvetica}' +); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-minify-font-values/src/__tests__/minify-family.js b/packages/postcss-minify-font-values/src/__tests__/minify-family.js index 74e17ec1e..6a1993993 100644 --- a/packages/postcss-minify-font-values/src/__tests__/minify-family.js +++ b/packages/postcss-minify-font-values/src/__tests__/minify-family.js @@ -2,96 +2,96 @@ import test from 'ava'; import minifyFamily from '../lib/minify-family'; const tests = [ - { - message: 'Should strip quotes for names without keywords', - options: { - removeQuotes: true, - }, - fixture: [ - {type: 'space', value: ' '}, - {type: 'word', value: 'Times'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'new'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'Roman'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'word', value: 'sans-serif'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'string', quote: '"', value: 'serif'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'string', quote: '"', value: 'Roboto Plus'}, - {type: 'div', value: ',', before: ' ', after: ' '}, - {type: 'word', value: 'Georgia'}, - {type: 'space', value: ' '}, - ], - expected: [ - { - type: 'word', - value: 'Times new Roman,sans-serif,"serif",Roboto Plus,Georgia', - }, - ], + { + message: 'Should strip quotes for names without keywords', + options: { + removeQuotes: true, }, - { - message: 'Should remove fonts after keywords', - options: { - removeAfterKeyword: true, - }, - fixture: [ - {type: 'space', value: ' '}, - {type: 'word', value: 'Times'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'new'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'Roman'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'string', quote: '"', value: 'serif'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'word', value: 'sans-serif'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'string', quote: '"', value: 'Roboto Plus'}, - {type: 'div', value: ',', before: ' ', after: ' '}, - {type: 'word', value: 'Georgia'}, - {type: 'space', value: ' '}, - ], - expected: [ - { - type: 'word', - value: 'Times new Roman,"serif",sans-serif', - }, - ], + fixture: [ + { type: 'space', value: ' ' }, + { type: 'word', value: 'Times' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'new' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'Roman' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'word', value: 'sans-serif' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'string', quote: '"', value: 'serif' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'string', quote: '"', value: 'Roboto Plus' }, + { type: 'div', value: ',', before: ' ', after: ' ' }, + { type: 'word', value: 'Georgia' }, + { type: 'space', value: ' ' }, + ], + expected: [ + { + type: 'word', + value: 'Times new Roman,sans-serif,"serif",Roboto Plus,Georgia', + }, + ], + }, + { + message: 'Should remove fonts after keywords', + options: { + removeAfterKeyword: true, }, - { - message: 'Should dublicates', - options: { - removeQuotes: true, - removeDuplicates: true, - }, - fixture: [ - {type: 'space', value: ' '}, - {type: 'word', value: 'Roman'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'string', quote: '"', value: 'serif'}, - {type: 'word', value: 'Roman'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'word', value: 'serif'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'string', quote: '"', value: 'Roman'}, - {type: 'div', value: ',', before: ' ', after: ' '}, - {type: 'word', value: 'Georgia'}, - {type: 'space', value: ' '}, - ], - expected: [ - { - type: 'word', - value: 'Roman,"serif",serif,Georgia', - }, - ], + fixture: [ + { type: 'space', value: ' ' }, + { type: 'word', value: 'Times' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'new' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'Roman' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'string', quote: '"', value: 'serif' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'word', value: 'sans-serif' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'string', quote: '"', value: 'Roboto Plus' }, + { type: 'div', value: ',', before: ' ', after: ' ' }, + { type: 'word', value: 'Georgia' }, + { type: 'space', value: ' ' }, + ], + expected: [ + { + type: 'word', + value: 'Times new Roman,"serif",sans-serif', + }, + ], + }, + { + message: 'Should dublicates', + options: { + removeQuotes: true, + removeDuplicates: true, }, + fixture: [ + { type: 'space', value: ' ' }, + { type: 'word', value: 'Roman' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'string', quote: '"', value: 'serif' }, + { type: 'word', value: 'Roman' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'word', value: 'serif' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'string', quote: '"', value: 'Roman' }, + { type: 'div', value: ',', before: ' ', after: ' ' }, + { type: 'word', value: 'Georgia' }, + { type: 'space', value: ' ' }, + ], + expected: [ + { + type: 'word', + value: 'Roman,"serif",serif,Georgia', + }, + ], + }, ]; test('minify-family', (t) => { - t.plan(tests.length); - tests.forEach(({fixture, options, expected, message}) => { - t.deepEqual(minifyFamily(fixture, options), expected, message); - }); + t.plan(tests.length); + tests.forEach(({ fixture, options, expected, message }) => { + t.deepEqual(minifyFamily(fixture, options), expected, message); + }); }); diff --git a/packages/postcss-minify-font-values/src/__tests__/minify-font.js b/packages/postcss-minify-font-values/src/__tests__/minify-font.js index 46bd2b563..2eaa08996 100644 --- a/packages/postcss-minify-font-values/src/__tests__/minify-font.js +++ b/packages/postcss-minify-font-values/src/__tests__/minify-font.js @@ -2,37 +2,37 @@ import test from 'ava'; import minifyFont from '../lib/minify-font'; const tests = [ - { - options: {}, - fixture: [ - {type: 'word', value: 'bold'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'italic'}, - {type: 'space', value: ' \t '}, - {type: 'word', value: '20px'}, - {type: 'space', value: ' \n '}, - {type: 'word', value: 'Times'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'New'}, - {type: 'space', value: ' \t '}, - {type: 'word', value: 'Roman'}, - {type: 'div', value: ',', before: '', after: ' '}, - {type: 'word', value: 'serif'}, - ], - expected: [ - {type: 'word', value: '700'}, - {type: 'space', value: ' '}, - {type: 'word', value: 'italic'}, - {type: 'space', value: ' \t '}, - {type: 'word', value: '20px'}, - {type: 'space', value: ' \n '}, - {type: 'word', value: 'Times New Roman,serif'}, - ], - }, + { + options: {}, + fixture: [ + { type: 'word', value: 'bold' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'italic' }, + { type: 'space', value: ' \t ' }, + { type: 'word', value: '20px' }, + { type: 'space', value: ' \n ' }, + { type: 'word', value: 'Times' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'New' }, + { type: 'space', value: ' \t ' }, + { type: 'word', value: 'Roman' }, + { type: 'div', value: ',', before: '', after: ' ' }, + { type: 'word', value: 'serif' }, + ], + expected: [ + { type: 'word', value: '700' }, + { type: 'space', value: ' ' }, + { type: 'word', value: 'italic' }, + { type: 'space', value: ' \t ' }, + { type: 'word', value: '20px' }, + { type: 'space', value: ' \n ' }, + { type: 'word', value: 'Times New Roman,serif' }, + ], + }, ]; test('minify-font', (t) => { - tests.forEach(({fixture, options, expected}) => { - t.deepEqual(minifyFont(fixture, options), expected); - }); + tests.forEach(({ fixture, options, expected }) => { + t.deepEqual(minifyFont(fixture, options), expected); + }); }); diff --git a/packages/postcss-minify-font-values/src/__tests__/minify-weight.js b/packages/postcss-minify-font-values/src/__tests__/minify-weight.js index 7771575a8..1cb226197 100644 --- a/packages/postcss-minify-font-values/src/__tests__/minify-weight.js +++ b/packages/postcss-minify-font-values/src/__tests__/minify-weight.js @@ -2,8 +2,8 @@ import test from 'ava'; import minifyWeight from '../lib/minify-weight'; test('minify-weight', (t) => { - t.is(minifyWeight('normal'), '400', 'should convert normal -> 400'); - t.is(minifyWeight('bold'), '700', 'should convert bold -> 700'); - t.is(minifyWeight('lighter'), 'lighter', 'shouldn\'t convert lighter'); - t.is(minifyWeight('bolder'), 'bolder', 'shouldn\'t convert bolder'); + t.is(minifyWeight('normal'), '400', 'should convert normal -> 400'); + t.is(minifyWeight('bold'), '700', 'should convert bold -> 700'); + t.is(minifyWeight('lighter'), 'lighter', "shouldn't convert lighter"); + t.is(minifyWeight('bolder'), 'bolder', "shouldn't convert bolder"); }); diff --git a/packages/postcss-minify-font-values/src/index.js b/packages/postcss-minify-font-values/src/index.js index 75784a363..5747d1b9e 100644 --- a/packages/postcss-minify-font-values/src/index.js +++ b/packages/postcss-minify-font-values/src/index.js @@ -4,29 +4,44 @@ import minifyWeight from './lib/minify-weight'; import minifyFamily from './lib/minify-family'; import minifyFont from './lib/minify-font'; -function transform (opts, decl) { - let tree; - let prop = decl.prop.toLowerCase(); - - if (prop === 'font-weight') { - decl.value = minifyWeight(decl.value); - } else if (prop === 'font-family') { - tree = valueParser(decl.value); - tree.nodes = minifyFamily(tree.nodes, opts); - decl.value = tree.toString(); - } else if (prop === 'font') { - tree = valueParser(decl.value); - tree.nodes = minifyFont(tree.nodes, opts); - decl.value = tree.toString(); - } +function hasCssVariables(value) { + const lowerCasedValue = value.toLowerCase(); + + return lowerCasedValue.includes('var('); +} + +function transform(opts, decl) { + if (!decl.value) { + return; + } + + let lowerCasedProp = decl.prop.toLowerCase(); + + if (lowerCasedProp === 'font-weight' && !hasCssVariables(decl.value)) { + decl.value = minifyWeight(decl.value); + } else if (lowerCasedProp === 'font-family' && !hasCssVariables(decl.value)) { + const tree = valueParser(decl.value); + + tree.nodes = minifyFamily(tree.nodes, opts); + decl.value = tree.toString(); + } else if (lowerCasedProp === 'font') { + const tree = valueParser(decl.value); + + tree.nodes = minifyFont(tree.nodes, opts); + decl.value = tree.toString(); + } } export default postcss.plugin('postcss-minify-font-values', (opts) => { - opts = Object.assign({}, { - removeAfterKeyword: false, - removeDuplicates: true, - removeQuotes: true, - }, opts); + opts = Object.assign( + {}, + { + removeAfterKeyword: false, + removeDuplicates: true, + removeQuotes: true, + }, + opts + ); - return css => css.walkDecls(/font/i, transform.bind(null, opts)); + return (css) => css.walkDecls(/font/i, transform.bind(null, opts)); }); diff --git a/packages/postcss-minify-font-values/src/lib/keywords.js b/packages/postcss-minify-font-values/src/lib/keywords.js index 4aef775e3..37e5626d0 100644 --- a/packages/postcss-minify-font-values/src/lib/keywords.js +++ b/packages/postcss-minify-font-values/src/lib/keywords.js @@ -1,44 +1,39 @@ export default { - style: [ - 'italic', - 'oblique', - ], - variant: [ - 'small-caps', - ], - weight: [ - '100', - '200', - '300', - '400', - '500', - '600', - '700', - '800', - '900', - 'bold', - 'lighter', - 'bolder', - ], - stretch: [ - 'ultra-condensed', - 'extra-condensed', - 'condensed', - 'semi-condensed', - 'semi-expanded', - 'expanded', - 'extra-expanded', - 'ultra-expanded', - ], - size: [ - 'xx-small', - 'x-small', - 'small', - 'medium', - 'large', - 'x-large', - 'xx-large', - 'larger', - 'smaller', - ], + style: ['italic', 'oblique'], + variant: ['small-caps'], + weight: [ + '100', + '200', + '300', + '400', + '500', + '600', + '700', + '800', + '900', + 'bold', + 'lighter', + 'bolder', + ], + stretch: [ + 'ultra-condensed', + 'extra-condensed', + 'condensed', + 'semi-condensed', + 'semi-expanded', + 'expanded', + 'extra-expanded', + 'ultra-expanded', + ], + size: [ + 'xx-small', + 'x-small', + 'small', + 'medium', + 'large', + 'x-large', + 'xx-large', + 'larger', + 'smaller', + ], }; diff --git a/packages/postcss-minify-font-values/src/lib/minify-family.js b/packages/postcss-minify-font-values/src/lib/minify-family.js index c3fa3d3a8..015b16b76 100644 --- a/packages/postcss-minify-font-values/src/lib/minify-family.js +++ b/packages/postcss-minify-font-values/src/lib/minify-family.js @@ -1,71 +1,74 @@ -import {stringify} from 'postcss-value-parser'; +import { stringify } from 'postcss-value-parser'; import uniqueExcept from './uniqs'; const uniqs = uniqueExcept('monospace'); -const globalKeywords = [ - 'inherit', - 'initial', - 'unset', -]; +const globalKeywords = ['inherit', 'initial', 'unset']; const genericFontFamilykeywords = [ - 'sans-serif', - 'serif', - 'fantasy', - 'cursive', - 'monospace', - 'system-ui', + 'sans-serif', + 'serif', + 'fantasy', + 'cursive', + 'monospace', + 'system-ui', ]; -function makeArray (value, length) { - let array = []; - while (length--) { - array[length] = value; - } - return array; +function makeArray(value, length) { + let array = []; + while (length--) { + array[length] = value; + } + return array; } +// eslint-disable-next-line no-useless-escape const regexSimpleEscapeCharacters = /[ !"#$%&'()*+,.\/;<=>?@\[\\\]^`{|}~]/; -function escape (string, escapeForString) { - let counter = 0; - let character = null; - let charCode = null; - let value = null; - let output = ''; - - while (counter < string.length) { - character = string.charAt(counter++); - charCode = character.charCodeAt(); - - // \r is already tokenized away at this point - // `:` can be escaped as `\:`, but that fails in IE < 8 - if (!escapeForString && /[\t\n\v\f:]/.test(character)) { - value = '\\' + charCode.toString(16) + ' '; - } else if (!escapeForString && regexSimpleEscapeCharacters.test(character)) { - value = '\\' + character; - } else { - value = character; - } - - output += value; +function escape(string, escapeForString) { + let counter = 0; + let character = null; + let charCode = null; + let value = null; + let output = ''; + + while (counter < string.length) { + character = string.charAt(counter++); + charCode = character.charCodeAt(); + + // \r is already tokenized away at this point + // `:` can be escaped as `\:`, but that fails in IE < 8 + if (!escapeForString && /[\t\n\v\f:]/.test(character)) { + value = '\\' + charCode.toString(16) + ' '; + } else if ( + !escapeForString && + regexSimpleEscapeCharacters.test(character) + ) { + value = '\\' + character; + } else { + value = character; } - if (!escapeForString) { - if (/^-[-\d]/.test(output)) { - output = '\\-' + output.slice(1); - } + output += value; + } + + if (!escapeForString) { + if (/^-[-\d]/.test(output)) { + output = '\\-' + output.slice(1); + } - const firstChar = string.charAt(0); + const firstChar = string.charAt(0); - if (/\d/.test(firstChar)) { - output = '\\3' + firstChar + ' ' + output.slice(1); - } + if (/\d/.test(firstChar)) { + output = '\\3' + firstChar + ' ' + output.slice(1); } + } - return output; + return output; } -const regexKeyword = new RegExp(genericFontFamilykeywords.concat(globalKeywords).join('|'), 'i'); +const regexKeyword = new RegExp( + genericFontFamilykeywords.concat(globalKeywords).join('|'), + 'i' +); const regexInvalidIdentifier = /^(-?\d|--)/; const regexSpaceAtStart = /^\x20/; const regexWhitespace = /[\t\n\f\r\x20]/g; @@ -74,133 +77,136 @@ const regexConsecutiveSpaces = /(\\(?:[a-fA-F0-9]{1,6}\x20|\x20))?(\x20{2,})/g; const regexTrailingEscape = /\\[a-fA-F0-9]{0,6}\x20$/; const regexTrailingSpace = /\x20$/; -function escapeIdentifierSequence (string) { - let identifiers = string.split(regexWhitespace); - let index = 0; - let result = []; - let escapeResult; +function escapeIdentifierSequence(string) { + let identifiers = string.split(regexWhitespace); + let index = 0; + let result = []; + let escapeResult; - while (index < identifiers.length) { - let subString = identifiers[index++]; + while (index < identifiers.length) { + let subString = identifiers[index++]; - if (subString === '') { - result.push(subString); - continue; - } + if (subString === '') { + result.push(subString); + continue; + } - escapeResult = escape(subString, false); - - if (regexIdentifierCharacter.test(subString)) { - // the font family name part consists of allowed characters exclusively - if (regexInvalidIdentifier.test(subString)) { - // the font family name part starts with two hyphens, a digit, or a - // hyphen followed by a digit - if (index === 1) { // if this is the first item - result.push(escapeResult); - } else { - // if it’s not the first item, we can simply escape the space - // between the two identifiers to merge them into a single - // identifier rather than escaping the start characters of the - // second identifier - result[index - 2] += '\\'; - result.push(escape(subString, true)); - } - } else { - // the font family name part doesn’t start with two hyphens, a digit, - // or a hyphen followed by a digit - result.push(escapeResult); - } + escapeResult = escape(subString, false); + + if (regexIdentifierCharacter.test(subString)) { + // the font family name part consists of allowed characters exclusively + if (regexInvalidIdentifier.test(subString)) { + // the font family name part starts with two hyphens, a digit, or a + // hyphen followed by a digit + if (index === 1) { + // if this is the first item + result.push(escapeResult); } else { - // the font family name part contains invalid identifier characters - result.push(escapeResult); + // if it’s not the first item, we can simply escape the space + // between the two identifiers to merge them into a single + // identifier rather than escaping the start characters of the + // second identifier + result[index - 2] += '\\'; + result.push(escape(subString, true)); } + } else { + // the font family name part doesn’t start with two hyphens, a digit, + // or a hyphen followed by a digit + result.push(escapeResult); + } + } else { + // the font family name part contains invalid identifier characters + result.push(escapeResult); } + } - result = result.join(' ').replace(regexConsecutiveSpaces, ($0, $1, $2) => { - const spaceCount = $2.length; - const escapesNeeded = Math.floor(spaceCount / 2); - const array = makeArray('\\ ', escapesNeeded); + result = result.join(' ').replace(regexConsecutiveSpaces, ($0, $1, $2) => { + const spaceCount = $2.length; + const escapesNeeded = Math.floor(spaceCount / 2); + const array = makeArray('\\ ', escapesNeeded); - if (spaceCount % 2) { - array[escapesNeeded - 1] += '\\ '; - } + if (spaceCount % 2) { + array[escapesNeeded - 1] += '\\ '; + } - return ($1 || '') + ' ' + array.join(' '); - }); + return ($1 || '') + ' ' + array.join(' '); + }); - // Escape trailing spaces unless they’re already part of an escape - if (regexTrailingSpace.test(result) && !regexTrailingEscape.test(result)) { - result = result.replace(regexTrailingSpace, '\\ '); - } + // Escape trailing spaces unless they’re already part of an escape + if (regexTrailingSpace.test(result) && !regexTrailingEscape.test(result)) { + result = result.replace(regexTrailingSpace, '\\ '); + } - if (regexSpaceAtStart.test(result)) { - result = '\\ ' + result.slice(1); - } + if (regexSpaceAtStart.test(result)) { + result = '\\ ' + result.slice(1); + } - return result; + return result; } -export default function (nodes, opts) { - let family = []; - let last = null; - let i, max; - - nodes.forEach((node, index, arr) => { - if (node.type === 'string' || node.type === 'function') { - family.push(node); - } else if (node.type === 'word') { - if (!last) { - last = {type: 'word', value: ''}; - family.push(last); - } - - last.value += node.value; - } else if (node.type === 'space') { - if (last && index !== arr.length - 1) { - last.value += ' '; - } - } else { - last = null; - } - }); +export default function(nodes, opts) { + let family = []; + let last = null; + let i, max; + + nodes.forEach((node, index, arr) => { + if (node.type === 'string' || node.type === 'function') { + family.push(node); + } else if (node.type === 'word') { + if (!last) { + last = { type: 'word', value: '' }; + family.push(last); + } + + last.value += node.value; + } else if (node.type === 'space') { + if (last && index !== arr.length - 1) { + last.value += ' '; + } + } else { + last = null; + } + }); - family = family.map((node) => { - if (node.type === 'string') { - const isKeyword = regexKeyword.test(node.value); + family = family.map((node) => { + if (node.type === 'string') { + const isKeyword = regexKeyword.test(node.value); - if ( - !opts.removeQuotes || - isKeyword || - /[0-9]/.test(node.value.slice(0, 1)) - ) { - return stringify(node); - } + if ( + !opts.removeQuotes || + isKeyword || + /[0-9]/.test(node.value.slice(0, 1)) + ) { + return stringify(node); + } - let escaped = escapeIdentifierSequence(node.value); + let escaped = escapeIdentifierSequence(node.value); - if (escaped.length < node.value.length + 2) { - return escaped; - } - } - - return stringify(node); - }); - - if (opts.removeAfterKeyword) { - for (i = 0, max = family.length; i < max; i += 1) { - if (~genericFontFamilykeywords.indexOf(family[i].toLowerCase())) { - family = family.slice(0, i + 1); - break; - } - } + if (escaped.length < node.value.length + 2) { + return escaped; + } } - if (opts.removeDuplicates) { - family = uniqs(family); - } + return stringify(node); + }); - return [{ - type: 'word', - value: family.join(), - }]; -}; + if (opts.removeAfterKeyword) { + for (i = 0, max = family.length; i < max; i += 1) { + if (~genericFontFamilykeywords.indexOf(family[i].toLowerCase())) { + family = family.slice(0, i + 1); + break; + } + } + } + + if (opts.removeDuplicates) { + family = uniqs(family); + } + + return [ + { + type: 'word', + value: family.join(), + }, + ]; +} diff --git a/packages/postcss-minify-font-values/src/lib/minify-font.js b/packages/postcss-minify-font-values/src/lib/minify-font.js index f7896ab65..96bfde7cd 100644 --- a/packages/postcss-minify-font-values/src/lib/minify-font.js +++ b/packages/postcss-minify-font-values/src/lib/minify-font.js @@ -1,40 +1,57 @@ -import {unit} from 'postcss-value-parser'; +import { unit } from 'postcss-value-parser'; import keywords from './keywords'; import minifyFamily from './minify-family'; import minifyWeight from './minify-weight'; -export default function (nodes, opts) { - let i, max, node, familyStart, family; - let hasSize = false; - - for (i = 0, max = nodes.length; i < max; i += 1) { - node = nodes[i]; - if (node.type === 'word') { - if (hasSize) { - continue; - } - const value = node.value.toLowerCase(); - if ( - value === 'normal' || - ~keywords.style.indexOf(value) || - ~keywords.variant.indexOf(value) || - ~keywords.stretch.indexOf(value) - ) { - familyStart = i; - } else if (~keywords.weight.indexOf(value)) { - node.value = minifyWeight(value); - familyStart = i; - } else if (~keywords.size.indexOf(value) || unit(value)) { - familyStart = i; - hasSize = true; - } - } else if (node.type === 'div' && node.value === '/') { - familyStart = i + 1; - break; - } +export default function(nodes, opts) { + let i, max, node, familyStart, family; + let hasSize = false; + + for (i = 0, max = nodes.length; i < max; i += 1) { + node = nodes[i]; + + if (node.type === 'word') { + if (hasSize) { + continue; + } + + const value = node.value.toLowerCase(); + + if ( + value === 'normal' || + value === 'inherit' || + value === 'initial' || + value === 'unset' + ) { + familyStart = i; + } else if (~keywords.style.indexOf(value) || unit(value)) { + familyStart = i; + } else if (~keywords.variant.indexOf(value)) { + familyStart = i; + } else if (~keywords.weight.indexOf(value)) { + node.value = minifyWeight(value); + familyStart = i; + } else if (~keywords.stretch.indexOf(value)) { + familyStart = i; + } else if (~keywords.size.indexOf(value) || unit(value)) { + familyStart = i; + hasSize = true; + } + } else if ( + node.type === 'function' && + nodes[i + 1] && + nodes[i + 1].type === 'space' + ) { + familyStart = i; + } else if (node.type === 'div' && node.value === '/') { + familyStart = i + 1; + break; } + } + + familyStart += 2; + + family = minifyFamily(nodes.slice(familyStart), opts); - familyStart += 2; - family = minifyFamily(nodes.slice(familyStart), opts); - return nodes.slice(0, familyStart).concat(family); -}; + return nodes.slice(0, familyStart).concat(family); +} diff --git a/packages/postcss-minify-font-values/src/lib/minify-weight.js b/packages/postcss-minify-font-values/src/lib/minify-weight.js index 8a85e9b3f..392f40c20 100644 --- a/packages/postcss-minify-font-values/src/lib/minify-weight.js +++ b/packages/postcss-minify-font-values/src/lib/minify-weight.js @@ -1,5 +1,9 @@ -export default function (value) { - const valueInLowerCase = value.toLowerCase(); +export default function(value) { + const valueInLowerCase = value.toLowerCase(); - return valueInLowerCase === 'normal' ? '400' : valueInLowerCase === 'bold' ? '700' : value; -}; + return valueInLowerCase === 'normal' + ? '400' + : valueInLowerCase === 'bold' + ? '700' + : value; +} diff --git a/packages/postcss-minify-font-values/src/lib/uniqs.js b/packages/postcss-minify-font-values/src/lib/uniqs.js index e4f2d9b0f..a844abe1b 100644 --- a/packages/postcss-minify-font-values/src/lib/uniqs.js +++ b/packages/postcss-minify-font-values/src/lib/uniqs.js @@ -1,11 +1,11 @@ -export default function uniqueExcept (exclude) { - return function unique () { - const list = Array.prototype.concat.apply([], arguments); - return list.filter((item, i) => { - if (item.toLowerCase() === exclude) { - return true; - } - return i === list.indexOf(item); - }); - }; -}; +export default function uniqueExcept(exclude) { + return function unique() { + const list = Array.prototype.concat.apply([], arguments); + return list.filter((item, i) => { + if (item.toLowerCase() === exclude) { + return true; + } + return i === list.indexOf(item); + }); + }; +} diff --git a/packages/postcss-minify-gradients/src/__tests__/index.js b/packages/postcss-minify-gradients/src/__tests__/index.js index 941bc3113..b1cad3e10 100644 --- a/packages/postcss-minify-gradients/src/__tests__/index.js +++ b/packages/postcss-minify-gradients/src/__tests__/index.js @@ -1,330 +1,383 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); test( - 'linear: should convert "to top" to 0deg', - processCSS, - 'background:linear-gradient(to top,#ffe500,#121)', - 'background:linear-gradient(0deg,#ffe500,#121)' + 'linear: should convert "to top" to 0deg', + processCSS, + 'background:linear-gradient(to top,#ffe500,#121)', + 'background:linear-gradient(0deg,#ffe500,#121)' ); test( - 'linear: should convert "to top" to 0deg (uppercase property and value)', - processCSS, - 'BACKGROUND:LINEAR-GRADIENT(TO TOP,#ffe500,#121)', - 'BACKGROUND:LINEAR-GRADIENT(0deg,#ffe500,#121)' + 'linear: should convert "to top" to 0deg (uppercase property and value)', + processCSS, + 'BACKGROUND:LINEAR-GRADIENT(TO TOP,#ffe500,#121)', + 'BACKGROUND:LINEAR-GRADIENT(0deg,#ffe500,#121)' ); test( - 'linear: should convert "to right" to 90deg', - processCSS, - 'background:linear-gradient(to right,#ffe500,#121)', - 'background:linear-gradient(90deg,#ffe500,#121)' + 'linear: should convert "to right" to 90deg', + processCSS, + 'background:linear-gradient(to right,#ffe500,#121)', + 'background:linear-gradient(90deg,#ffe500,#121)' ); test( - 'linear: should convert "to right" to 90deg (uppercase property and value)', - processCSS, - 'BACKGROUND:LINEAR-GRADIENT(TO RIGHT,#FFE500,#121)', - 'BACKGROUND:LINEAR-GRADIENT(90deg,#FFE500,#121)' + 'linear: should convert "to right" to 90deg (uppercase property and value)', + processCSS, + 'BACKGROUND:LINEAR-GRADIENT(TO RIGHT,#FFE500,#121)', + 'BACKGROUND:LINEAR-GRADIENT(90deg,#FFE500,#121)' ); test( - 'linear: should convert "to bottom" to 180deg', - processCSS, - 'background:linear-gradient(to bottom,#ffe500,#121)', - 'background:linear-gradient(180deg,#ffe500,#121)' + 'linear: should convert "to bottom" to 180deg', + processCSS, + 'background:linear-gradient(to bottom,#ffe500,#121)', + 'background:linear-gradient(180deg,#ffe500,#121)' ); test( - 'linear: should convert "to left" to 270deg', - processCSS, - 'background:linear-gradient(to left,#ffe500,#121)', - 'background:linear-gradient(270deg,#ffe500,#121)' + 'linear: should convert "to left" to 270deg', + processCSS, + 'background:linear-gradient(to left,#ffe500,#121)', + 'background:linear-gradient(270deg,#ffe500,#121)' ); test( - 'linear: should convert "to top" to 0deg (with a solid colour)', - processCSS, - 'background:#ffe500 linear-gradient(to top,#ffe500,#121)', - 'background:#ffe500 linear-gradient(0deg,#ffe500,#121)' + 'linear: should convert "to top" to 0deg (with a solid colour)', + processCSS, + 'background:#ffe500 linear-gradient(to top,#ffe500,#121)', + 'background:#ffe500 linear-gradient(0deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to top" to 0deg', - processCSS, - 'background:repeating-linear-gradient(to top,#ffe500,#121)', - 'background:repeating-linear-gradient(0deg,#ffe500,#121)' + 'repeating-linear: should convert "to top" to 0deg', + processCSS, + 'background:repeating-linear-gradient(to top,#ffe500,#121)', + 'background:repeating-linear-gradient(0deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to top" to 0deg (uppercase)', - processCSS, - 'background:REPEATING-LINEAR-GRADIENT(TO TOP,#ffe500,#121)', - 'background:REPEATING-LINEAR-GRADIENT(0deg,#ffe500,#121)' + 'repeating-linear: should convert "to top" to 0deg (uppercase)', + processCSS, + 'background:REPEATING-LINEAR-GRADIENT(TO TOP,#ffe500,#121)', + 'background:REPEATING-LINEAR-GRADIENT(0deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to right" to 90deg', - processCSS, - 'background:repeating-linear-gradient(to right,#ffe500,#121)', - 'background:repeating-linear-gradient(90deg,#ffe500,#121)' + 'repeating-linear: should convert "to right" to 90deg', + processCSS, + 'background:repeating-linear-gradient(to right,#ffe500,#121)', + 'background:repeating-linear-gradient(90deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to bottom" to 180deg', - processCSS, - 'background:repeating-linear-gradient(to bottom,#ffe500,#121)', - 'background:repeating-linear-gradient(180deg,#ffe500,#121)' + 'repeating-linear: should convert "to bottom" to 180deg', + processCSS, + 'background:repeating-linear-gradient(to bottom,#ffe500,#121)', + 'background:repeating-linear-gradient(180deg,#ffe500,#121)' ); test( - 'repeating-linear: should convert "to left" to 270deg', - processCSS, - 'background:repeating-linear-gradient(to left,#ffe500,#121)', - 'background:repeating-linear-gradient(270deg,#ffe500,#121)' + 'repeating-linear: should convert "to left" to 270deg', + processCSS, + 'background:repeating-linear-gradient(to left,#ffe500,#121)', + 'background:repeating-linear-gradient(270deg,#ffe500,#121)' ); test( - 'linear: should not convert "to top right" to an angle', - passthroughCSS, - 'background:linear-gradient(to top right,#ffe500,#121)' + 'linear: should not convert "to top right" to an angle', + passthroughCSS, + 'background:linear-gradient(to top right,#ffe500,#121)' ); test( - 'linear: should not convert "to bottom left" to an angle', - passthroughCSS, - 'background:linear-gradient(to bottom left,#ffe500,#121)' + 'linear: should not convert "to bottom left" to an angle', + passthroughCSS, + 'background:linear-gradient(to bottom left,#ffe500,#121)' ); test( - 'linear: should reduce length values if they are the same', - processCSS, - 'background:linear-gradient(45deg,#ffe500 50%,#121 50%)', - 'background:linear-gradient(45deg,#ffe500 50%,#121 0)' + 'linear: should reduce length values if they are the same', + processCSS, + 'background:linear-gradient(45deg,#ffe500 50%,#121 50%)', + 'background:linear-gradient(45deg,#ffe500 50%,#121 0)' ); test( - 'linear: should reduce length values if they are the same (uppercase)', - processCSS, - 'background:LINEAR-GRADIENT(45DEG,#FFE500 50%,#121 50%)', - 'background:LINEAR-GRADIENT(45DEG,#FFE500 50%,#121 0)' + 'linear: should reduce length values if they are the same (uppercase)', + processCSS, + 'background:LINEAR-GRADIENT(45DEG,#FFE500 50%,#121 50%)', + 'background:LINEAR-GRADIENT(45DEG,#FFE500 50%,#121 0)' ); test( - 'linear: should reduce length values if they are less', - processCSS, - 'background:linear-gradient(45deg,#ffe500 50%,#121 25%)', - 'background:linear-gradient(45deg,#ffe500 50%,#121 0)' + 'linear: should reduce length values if they are less', + processCSS, + 'background:linear-gradient(45deg,#ffe500 50%,#121 25%)', + 'background:linear-gradient(45deg,#ffe500 50%,#121 0)' ); test( - 'linear: should not reduce length values with different units', - passthroughCSS, - 'background:linear-gradient(45deg,#ffe500 25px,#121 20%)' + 'linear: should not reduce length values with different units', + passthroughCSS, + 'background:linear-gradient(45deg,#ffe500 25px,#121 20%)' ); test( - 'linear: should remove the (unnecessary) start/end length values', - processCSS, - 'background:linear-gradient(#ffe500 0%,#121 100%)', - 'background:linear-gradient(#ffe500,#121)' + 'linear: should remove the (unnecessary) start/end length values', + processCSS, + 'background:linear-gradient(#ffe500 0%,#121 100%)', + 'background:linear-gradient(#ffe500,#121)' ); test( - 'repeating-radial: should reduce length values if they are the same', - processCSS, - 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 5px,#ffe500 10px)', - 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 0,#ffe500 10px)' + 'repeating-radial: should reduce length values if they are the same', + processCSS, + 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 5px,#ffe500 10px)', + 'background:repeating-radial-gradient(#121,#121 5px,#ffe500 0,#ffe500 10px)' ); test( - 'repeating-radial: should reduce length values if they are the same (uppercase property and value)', - processCSS, - 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 5PX,#FFE500 10PX)', - 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 0,#FFE500 10PX)' + 'repeating-radial: should reduce length values if they are the same (uppercase property and value)', + processCSS, + 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 5PX,#FFE500 10PX)', + 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 0,#FFE500 10PX)' ); test( - 'repeating-radial: should reduce length values if they are the same (last is zero)', - processCSS, - 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 5PX,#FFE500 0)', - 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 0,#FFE500 0)' + 'repeating-radial: should reduce length values if they are the same (last is zero)', + processCSS, + 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 5PX,#FFE500 0)', + 'BACKGROUND:REPEATING-RADIAL-GRADIENT(#121,#121 5PX,#FFE500 0,#FFE500 0)' ); test( - 'radial: should correctly account for "at"', - passthroughCSS, - 'background:radial-gradient(at 50% 0%,rgba(74,74,74,.15),transparent 40%);' + 'radial: should correctly account for "at"', + passthroughCSS, + 'background:radial-gradient(at 50% 0%,rgba(74,74,74,.15),transparent 40%);' ); test( - 'radial: should correctly account for uppercase "at"', - passthroughCSS, - 'background:radial-gradient(AT 50% 0%,rgba(74,74,74,.15),transparent 40%);' + 'radial: should correctly account for uppercase "at"', + passthroughCSS, + 'background:radial-gradient(AT 50% 0%,rgba(74,74,74,.15),transparent 40%);' ); +test( + 'radial: should correctly account for "at" (2)', + processCSS, + 'background:radial-gradient(at 50% 0%,rgba(74,74,74,.15),transparent 40%, red 40%);', + 'background:radial-gradient(at 50% 0%,rgba(74,74,74,.15),transparent 40%, red 0);' +); + +test( + 'radial: should correctly account for "at" (2) (uppercase)', + processCSS, + 'background:radial-gradient(AT 50% 0%,RGBA(74,74,74,.15),TRANSPARENT 40%, RED 40%);', + 'background:radial-gradient(AT 50% 0%,RGBA(74,74,74,.15),TRANSPARENT 40%, RED 0);' +); + +test( + 'radial: should correctly account with prefix "-webkit" (1)', + processCSS, + 'background: -webkit-radial-gradient(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)', + 'background: -webkit-radial-gradient(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)' +); + +test( + 'radial: should correctly account with prefix "-webkit" (1) (uppercase)', + processCSS, + 'background: -WEBKIT-RADIAL-GRADIENT(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)', + 'background: -WEBKIT-RADIAL-GRADIENT(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)' +); + +test( + 'radial: should correctly account with prefix "-webkit" (1) with px', + processCSS, + 'background: -webkit-radial-gradient(50% 26px, circle, #fff, rgba(255, 255, 255, 0) 24%)', + 'background: -webkit-radial-gradient(50% 26px, circle, #fff, rgba(255, 255, 255, 0) 24%)' +); + +test( + 'radial: should correctly account with prefix "-webkit" (1) with px (uppercase)', + processCSS, + 'background: -webkit-radial-gradient(50% 26PX, circle, #fff, rgba(255, 255, 255, 0) 24%)', + 'background: -webkit-radial-gradient(50% 26PX, circle, #fff, rgba(255, 255, 255, 0) 24%)' +); + +test( + 'radial: should correctly account with prefix "-webkit" (2)', + processCSS, + 'background: -webkit-radial-gradient(center, 30% 30%, white 20%, black 10%)', + 'background: -webkit-radial-gradient(center, 30% 30%, white 20%, black 0)' +); test( - 'radial: should correctly account for "at" (2)', - processCSS, - 'background:radial-gradient(at 50% 0%,rgba(74,74,74,.15),transparent 40%, red 40%);', - 'background:radial-gradient(at 50% 0%,rgba(74,74,74,.15),transparent 40%, red 0);' + 'radial: should correctly account with prefix "-webkit" (2) (uppercase)', + processCSS, + 'background: -WEBKIT-RADIAL-GRADIENT(CENTER, 30% 30%, WHITE 20%, BLACK 10%)', + 'background: -WEBKIT-RADIAL-GRADIENT(CENTER, 30% 30%, WHITE 20%, BLACK 0)' ); test( - 'radial: should correctly account for "at" (2) (uppercase)', - processCSS, - 'background:radial-gradient(AT 50% 0%,RGBA(74,74,74,.15),TRANSPARENT 40%, RED 40%);', - 'background:radial-gradient(AT 50% 0%,RGBA(74,74,74,.15),TRANSPARENT 40%, RED 0);' + 'radial: should correctly account with prefix "-webkit" (3)', + processCSS, + 'background: -webkit-radial-gradient(50% 26%, #fff, rgba(255, 255, 255, 0) 24%)', + 'background: -webkit-radial-gradient(50% 26%, #fff, rgba(255, 255, 255, 0) 24%)' ); test( - 'radial: should correctly account with prefix "-webkit" (1)', - processCSS, - 'background: -webkit-radial-gradient(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)', - 'background: -webkit-radial-gradient(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)' + 'radial: should correctly account with prefix "-webkit" (4)', + processCSS, + 'background: -webkit-radial-gradient(white 50%, black 40%)', + 'background: -webkit-radial-gradient(white 50%, black 0)' ); +test( + 'radial: should correctly account with prefix "-webkit" (4) (uppercase)', + processCSS, + 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50%, BLACK 40%)', + 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50%, BLACK 0)' +); test( - 'radial: should correctly account with prefix "-webkit" (1) (uppercase)', - processCSS, - 'background: -WEBKIT-RADIAL-GRADIENT(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)', - 'background: -WEBKIT-RADIAL-GRADIENT(50% 26%, circle, #fff, rgba(255, 255, 255, 0) 24%)' + 'radial: should correctly account with prefix "-webkit" (4) with px (uppercase)', + processCSS, + 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50px, BLACK 400PX)', + 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50px, BLACK 400PX)' ); test( - 'radial: should correctly account with prefix "-webkit" (1) with px', - processCSS, - 'background: -webkit-radial-gradient(50% 26px, circle, #fff, rgba(255, 255, 255, 0) 24%)', - 'background: -webkit-radial-gradient(50% 26px, circle, #fff, rgba(255, 255, 255, 0) 24%)' + 'radial: should correctly account with prefix "-webkit" (5)', + processCSS, + 'background: -webkit-radial-gradient(white calc(30%), black calc(50%))', + 'background: -webkit-radial-gradient(white calc(30%), black calc(50%))' ); test( - 'radial: should correctly account with prefix "-webkit" (1) with px (uppercase)', - processCSS, - 'background: -webkit-radial-gradient(50% 26PX, circle, #fff, rgba(255, 255, 255, 0) 24%)', - 'background: -webkit-radial-gradient(50% 26PX, circle, #fff, rgba(255, 255, 255, 0) 24%)' + 'radial: should correctly account with prefix "-webkit" (5) (calc uppercase)', + processCSS, + 'background: -webkit-radial-gradient(white CALC(30%), black calc(50%))', + 'background: -webkit-radial-gradient(white CALC(30%), black calc(50%))' ); test( - 'radial: should correctly account with prefix "-webkit" (2)', - processCSS, - 'background: -webkit-radial-gradient(center, 30% 30%, white 20%, black 10%)', - 'background: -webkit-radial-gradient(center, 30% 30%, white 20%, black 0)' + 'should not mangle floating point numbers', + processCSS, + 'background:linear-gradient(#fff,#fff 2em,#ccc 2em,#ccc 2.1em,#fff 2.1em)', + 'background:linear-gradient(#fff,#fff 2em,#ccc 0,#ccc 2.1em,#fff 0)' ); test( - 'radial: should correctly account with prefix "-webkit" (2) (uppercase)', - processCSS, - 'background: -WEBKIT-RADIAL-GRADIENT(CENTER, 30% 30%, WHITE 20%, BLACK 10%)', - 'background: -WEBKIT-RADIAL-GRADIENT(CENTER, 30% 30%, WHITE 20%, BLACK 0)' + 'should not mangle floating point numbers (uppercase)', + processCSS, + 'background:LINEAR-GRADIENT(#FFF,#FFF 2EM,#CCC 2EM,#CCC 2.1EM,#FFF 2.1EM)', + 'background:LINEAR-GRADIENT(#FFF,#FFF 2EM,#CCC 0,#CCC 2.1EM,#FFF 0)' ); test( - 'radial: should correctly account with prefix "-webkit" (3)', - processCSS, - 'background: -webkit-radial-gradient(50% 26%, #fff, rgba(255, 255, 255, 0) 24%)', - 'background: -webkit-radial-gradient(50% 26%, #fff, rgba(255, 255, 255, 0) 24%)' + 'should not mangle floating point numbers 1 (uppercase)', + processCSS, + 'background:lInEaR-gRaDiEnT(#fFf,#fFf 2Em,#cCc 2eM,#cCc 2.1eM,#fFf 2.1EM)', + 'background:lInEaR-gRaDiEnT(#fFf,#fFf 2Em,#cCc 0,#cCc 2.1eM,#fFf 0)' ); test( - 'radial: should correctly account with prefix "-webkit" (4)', - processCSS, - 'background: -webkit-radial-gradient(white 50%, black 40%)', - 'background: -webkit-radial-gradient(white 50%, black 0)' + 'should not remove the trailing zero if it is the last stop', + passthroughCSS, + 'background: linear-gradient(90deg,transparent,#00aeef 0)' ); test( - 'radial: should correctly account with prefix "-webkit" (4) (uppercase)', - processCSS, - 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50%, BLACK 40%)', - 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50%, BLACK 0)' + 'should not remove point number if it its different type from a previous one', + passthroughCSS, + 'background: linear-gradient(to left bottom,transparent calc(50% - 2px),#a7a7a8 0,#a7a7a8 calc(50% + 2px),transparent 0)' ); test( - 'radial: should correctly account with prefix "-webkit" (4) with px (uppercase)', - processCSS, - 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50px, BLACK 400PX)', - 'background: -WEBKIT-RADIAL-GRADIENT(WHITE 50px, BLACK 400PX)' + 'should not throw on empty linear gradients', + passthroughCSS, + 'background: linear-gradient()' ); test( - 'radial: should correctly account with prefix "-webkit" (5)', - processCSS, - 'background: -webkit-radial-gradient(white calc(30%), black calc(50%))', - 'background: -webkit-radial-gradient(white calc(30%), black calc(50%))' + 'should not throw on empty radial gradients', + passthroughCSS, + 'background: radial-gradient()' ); test( - 'radial: should correctly account with prefix "-webkit" (5) (calc uppercase)', - processCSS, - 'background: -webkit-radial-gradient(white CALC(30%), black calc(50%))', - 'background: -webkit-radial-gradient(white CALC(30%), black calc(50%))' + 'should pass through custom property references', + passthroughCSS, + 'background-image:var(--bg),linear-gradient(red,blue)' ); test( - 'should not mangle floating point numbers', - processCSS, - 'background:linear-gradient(#fff,#fff 2em,#ccc 2em,#ccc 2.1em,#fff 2.1em)', - 'background:linear-gradient(#fff,#fff 2em,#ccc 0,#ccc 2.1em,#fff 0)' + 'should pass through custom property references #2', + passthroughCSS, + 'background:linear-gradient(to var(--var), transparent, black) 0% 50% no-repeat' ); test( - 'should not mangle floating point numbers (uppercase)', - processCSS, - 'background:LINEAR-GRADIENT(#FFF,#FFF 2EM,#CCC 2EM,#CCC 2.1EM,#FFF 2.1EM)', - 'background:LINEAR-GRADIENT(#FFF,#FFF 2EM,#CCC 0,#CCC 2.1EM,#FFF 0)' + 'should pass through custom property references #3', + passthroughCSS, + 'background:linear-gradient(var(--var), transparent, black) 0% 50% no-repeat' ); test( - 'should not mangle floating point numbers 1 (uppercase)', - processCSS, - 'background:lInEaR-gRaDiEnT(#fFf,#fFf 2Em,#cCc 2eM,#cCc 2.1eM,#fFf 2.1EM)', - 'background:lInEaR-gRaDiEnT(#fFf,#fFf 2Em,#cCc 0,#cCc 2.1eM,#fFf 0)' + 'should pass through custom property references #4', + passthroughCSS, + 'background:linear-gradient(var(--var), black) 0% 50% no-repeat' ); test( - 'should not remove the trailing zero if it is the last stop', - passthroughCSS, - 'background: linear-gradient(90deg,transparent,#00aeef 0)' + 'should pass through custom property references #5', + passthroughCSS, + 'background:linear-gradient(var(--var)) 0% 50% no-repeat' ); test( - 'should not remove point number if it its different type from a previous one', - passthroughCSS, - 'background: linear-gradient(to left bottom,transparent calc(50% - 2px),#a7a7a8 0,#a7a7a8 calc(50% + 2px),transparent 0)' + 'should pass through custom property references #6', + passthroughCSS, + 'background:linear-gradient(var(--var), rgba(255,0,0,0) 70.71%)' ); test( - 'should not throw on empty linear gradients', - passthroughCSS, - 'background: linear-gradient()' + 'should pass through custom property references #7', + passthroughCSS, + 'background:linear-gradient(to env(--var), transparent, black) 0% 50% no-repeat' ); test( - 'should not throw on empty radial gradients', - passthroughCSS, - 'background: radial-gradient()', + 'should pass through custom property references #8', + passthroughCSS, + 'background:linear-gradient(var(--var))' ); test( - 'should pass through custom property references', - passthroughCSS, - 'background-image:var(--bg),linear-gradient(red,blue)' + 'should pass through custom property references #9', + passthroughCSS, + 'background:linear-gradient(var(--foo), var(--bar), var(--baz))' ); test( - 'should not operate on declarations without gradients', - passthroughCSS, - 'background:red' + 'should pass through env property references', + passthroughCSS, + 'background:linear-gradient(env(--var))' ); +test('should not throw error on broken syntax', passthroughCSS, 'background:'); + test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + 'should not operate on declarations without gradients', + passthroughCSS, + 'background:red' ); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-minify-gradients/src/index.js b/packages/postcss-minify-gradients/src/index.js index 43cef8ed7..5f9d66cd0 100644 --- a/packages/postcss-minify-gradients/src/index.js +++ b/packages/postcss-minify-gradients/src/index.js @@ -1,173 +1,197 @@ import postcss from 'postcss'; -import valueParser, {unit, stringify} from 'postcss-value-parser'; +import valueParser, { unit, stringify } from 'postcss-value-parser'; import getArguments from 'lerna:cssnano-util-get-arguments'; import isColorStop from 'is-color-stop'; const angles = { - top: '0deg', - right: '90deg', - bottom: '180deg', - left: '270deg', + top: '0deg', + right: '90deg', + bottom: '180deg', + left: '270deg', }; -function isLessThan (a, b) { - return a.unit.toLowerCase() === b.unit.toLowerCase() && parseFloat(a.number) >= parseFloat(b.number); +function isLessThan(a, b) { + return ( + a.unit.toLowerCase() === b.unit.toLowerCase() && + parseFloat(a.number) >= parseFloat(b.number) + ); } -function optimise (decl) { - const value = decl.value; +function optimise(decl) { + const value = decl.value; - if (!~value.toLowerCase().indexOf('gradient')) { - return; - } + if (!value) { + return; + } - decl.value = valueParser(value).walk(node => { - if (node.type !== 'function' || !node.nodes.length) { - return false; - } + const normalizedValue = value.toLowerCase(); + + if (normalizedValue.includes('var(') || normalizedValue.includes('env(')) { + return; + } + + if (!normalizedValue.includes('gradient')) { + return; + } + + decl.value = valueParser(value) + .walk((node) => { + if (node.type !== 'function' || !node.nodes.length) { + return false; + } + + const lowerCasedValue = node.value.toLowerCase(); - const lowerCasedValue = node.value.toLowerCase(); + if ( + lowerCasedValue === 'linear-gradient' || + lowerCasedValue === 'repeating-linear-gradient' || + lowerCasedValue === '-webkit-linear-gradient' || + lowerCasedValue === '-webkit-repeating-linear-gradient' + ) { + let args = getArguments(node); if ( - lowerCasedValue === 'linear-gradient' || - lowerCasedValue === 'repeating-linear-gradient' || - lowerCasedValue === '-webkit-linear-gradient' || - lowerCasedValue === '-webkit-repeating-linear-gradient' + node.nodes[0].value.toLowerCase() === 'to' && + args[0].length === 3 ) { - let args = getArguments(node); + node.nodes = node.nodes.slice(2); + node.nodes[0].value = angles[node.nodes[0].value.toLowerCase()]; + } - if (node.nodes[0].value.toLowerCase() === 'to' && args[0].length === 3) { - node.nodes = node.nodes.slice(2); - node.nodes[0].value = angles[node.nodes[0].value.toLowerCase()]; - } + let lastStop = null; - let lastStop = null; + args.forEach((arg, index) => { + if (!arg[2]) { + return; + } - args.forEach((arg, index) => { - if (!arg[2]) { - return; - } + let isFinalStop = index === args.length - 1; + let thisStop = unit(arg[2].value); - let isFinalStop = index === args.length - 1; - let thisStop = unit(arg[2].value); + if (lastStop === null) { + lastStop = thisStop; - if (lastStop === null) { - lastStop = thisStop; + if ( + !isFinalStop && + lastStop && + lastStop.number === '0' && + lastStop.unit.toLowerCase() !== 'deg' + ) { + arg[1].value = arg[2].value = ''; + } - if (!isFinalStop && lastStop && lastStop.number === '0' && lastStop.unit.toLowerCase() !== 'deg') { - arg[1].value = arg[2].value = ''; - } + return; + } - return; - } + if (lastStop && thisStop && isLessThan(lastStop, thisStop)) { + arg[2].value = 0; + } - if (lastStop && thisStop && isLessThan(lastStop, thisStop)) { - arg[2].value = 0; - } + lastStop = thisStop; - lastStop = thisStop; + if (isFinalStop && arg[2].value === '100%') { + arg[1].value = arg[2].value = ''; + } + }); - if (isFinalStop && arg[2].value === '100%') { - arg[1].value = arg[2].value = ''; - } - }); + return false; + } - return false; - } + if ( + lowerCasedValue === 'radial-gradient' || + lowerCasedValue === 'repeating-radial-gradient' + ) { + let args = getArguments(node); + let lastStop; - if ( - lowerCasedValue === 'radial-gradient' || - lowerCasedValue === 'repeating-radial-gradient' - ) { - let args = getArguments(node); - let lastStop; - - const hasAt = args[0].find(n => n.value.toLowerCase() === 'at'); + const hasAt = args[0].find((n) => n.value.toLowerCase() === 'at'); - args.forEach((arg, index) => { - if (!arg[2] || !index && hasAt) { - return; - } + args.forEach((arg, index) => { + if (!arg[2] || (!index && hasAt)) { + return; + } - let thisStop = unit(arg[2].value); + let thisStop = unit(arg[2].value); - if (!lastStop) { - lastStop = thisStop; + if (!lastStop) { + lastStop = thisStop; - return; - } + return; + } - if (lastStop && thisStop && isLessThan(lastStop, thisStop)) { - arg[2].value = 0; - } + if (lastStop && thisStop && isLessThan(lastStop, thisStop)) { + arg[2].value = 0; + } - lastStop = thisStop; - }); + lastStop = thisStop; + }); - return false; - } + return false; + } - if ( - lowerCasedValue === '-webkit-radial-gradient' || - lowerCasedValue === '-webkit-repeating-radial-gradient' - ) { - let args = getArguments(node); - let lastStop; + if ( + lowerCasedValue === '-webkit-radial-gradient' || + lowerCasedValue === '-webkit-repeating-radial-gradient' + ) { + let args = getArguments(node); + let lastStop; - args.forEach((arg) => { - let color; - let stop; + args.forEach((arg) => { + let color; + let stop; - if (arg[2] !== undefined) { - if (arg[0].type === 'function') { - color = `${arg[0].value}(${stringify(arg[0].nodes)})`; - } else { - color = arg[0].value; - } + if (arg[2] !== undefined) { + if (arg[0].type === 'function') { + color = `${arg[0].value}(${stringify(arg[0].nodes)})`; + } else { + color = arg[0].value; + } - if (arg[2].type === 'function') { - stop = `${arg[2].value}(${stringify(arg[2].nodes)})`; - } else { - stop = arg[2].value; - } - } else { - if (arg[0].type === 'function') { - color = `${arg[0].value}(${stringify(arg[0].nodes)})`; - } + if (arg[2].type === 'function') { + stop = `${arg[2].value}(${stringify(arg[2].nodes)})`; + } else { + stop = arg[2].value; + } + } else { + if (arg[0].type === 'function') { + color = `${arg[0].value}(${stringify(arg[0].nodes)})`; + } - color = arg[0].value; - } + color = arg[0].value; + } - color = color.toLowerCase(); + color = color.toLowerCase(); - const colorStop = stop || stop === 0 ? - isColorStop(color, stop.toLowerCase()) : - isColorStop(color); + const colorStop = + stop || stop === 0 + ? isColorStop(color, stop.toLowerCase()) + : isColorStop(color); - if (!colorStop || !arg[2]) { - return; - } + if (!colorStop || !arg[2]) { + return; + } - let thisStop = unit(arg[2].value); + let thisStop = unit(arg[2].value); - if (!lastStop) { - lastStop = thisStop; + if (!lastStop) { + lastStop = thisStop; - return; - } + return; + } - if (lastStop && thisStop && isLessThan(lastStop, thisStop)) { - arg[2].value = 0; - } + if (lastStop && thisStop && isLessThan(lastStop, thisStop)) { + arg[2].value = 0; + } - lastStop = thisStop; - }); + lastStop = thisStop; + }); - return false; - } - }).toString(); + return false; + } + }) + .toString(); } export default postcss.plugin('postcss-minify-gradients', () => { - return css => css.walkDecls(optimise); + return (css) => css.walkDecls(optimise); }); diff --git a/packages/postcss-minify-params/src/__tests__/index.js b/packages/postcss-minify-params/src/__tests__/index.js index b25a2ca11..944352d02 100644 --- a/packages/postcss-minify-params/src/__tests__/index.js +++ b/packages/postcss-minify-params/src/__tests__/index.js @@ -1,293 +1,272 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); test( - 'should normalise @media queries', - processCSS, - '@media SCREEN ,\tprint {h1{color:red}}@media print,screen{h2{color:blue}}', - '@media print,SCREEN {h1{color:red}}@media print,screen{h2{color:blue}}' + 'should normalise @media queries', + processCSS, + '@media SCREEN ,\tprint {h1{color:red}}@media print,screen{h2{color:blue}}', + '@media print,SCREEN {h1{color:red}}@media print,screen{h2{color:blue}}' ); test( - 'should normalise @media queries (uppercase)', - processCSS, - '@MEDIA SCREEN ,\tPRINT {h1{color:red}}@MEDIA PRINT,SCREEN{h2{color:blue}}', - '@MEDIA PRINT,SCREEN {h1{color:red}}@MEDIA PRINT,SCREEN{h2{color:blue}}' + 'should normalise @media queries (uppercase)', + processCSS, + '@MEDIA SCREEN ,\tPRINT {h1{color:red}}@MEDIA PRINT,SCREEN{h2{color:blue}}', + '@MEDIA PRINT,SCREEN {h1{color:red}}@MEDIA PRINT,SCREEN{h2{color:blue}}' ); test( - 'should normalise @media queries (2)', - processCSS, - '@media only screen \n and ( min-width: 400px, min-height: 500px ){h1{color:blue}}', - '@media only screen and (min-width:400px,min-height:500px){h1{color:blue}}' + 'should normalise @media queries (2)', + processCSS, + '@media only screen \n and ( min-width: 400px, min-height: 500px ){h1{color:blue}}', + '@media only screen and (min-width:400px,min-height:500px){h1{color:blue}}' ); test( - 'should normalise @media queries (3)', - processCSS, - '@media (min-height: 680px),(min-height: 680px){h1{color:red}}', - '@media (min-height:680px){h1{color:red}}' + 'should normalise @media queries (3)', + processCSS, + '@media (min-height: 680px),(min-height: 680px){h1{color:red}}', + '@media (min-height:680px){h1{color:red}}' ); test.skip( - 'should normalise @media queries (3) (lowercase and uppercase)', - processCSS, - '@media (min-height: 680px),(MIN-HEIGHT: 680PX){h1{color:red}}', - '@media (min-height:680px){h1{color:red}}' + 'should normalise @media queries (3) (lowercase and uppercase)', + processCSS, + '@media (min-height: 680px),(MIN-HEIGHT: 680PX){h1{color:red}}', + '@media (min-height:680px){h1{color:red}}' ); test( - 'should normalise "all" in @media queries', - processCSS, - '@media all{h1{color:blue}}', - '@media{h1{color:blue}}', - {env: 'chrome58'} + 'should normalise "all" in @media queries', + processCSS, + '@media all{h1{color:blue}}', + '@media{h1{color:blue}}', + { env: 'chrome58' } ); test( - 'should normalise "all" in @media queries (uppercase)', - processCSS, - '@MEDIA ALL{h1{color:blue}}', - '@MEDIA{h1{color:blue}}', - {env: 'chrome58'} + 'should normalise "all" in @media queries (uppercase)', + processCSS, + '@MEDIA ALL{h1{color:blue}}', + '@MEDIA{h1{color:blue}}', + { env: 'chrome58' } ); test( - 'should not normalise "all" in @media queries', - processCSS, - '@media all{h1{color:blue}}', - '@media all{h1{color:blue}}', - {env: 'ie11'} + 'should not normalise "all" in @media queries', + processCSS, + '@media all{h1{color:blue}}', + '@media all{h1{color:blue}}', + { env: 'ie11' } ); test( - 'should normalise "all and" in @media queries', - processCSS, - '@media all and (min-width:500px){h1{color:blue}}', - '@media (min-width:500px){h1{color:blue}}' + 'should normalise "all and" in @media queries', + processCSS, + '@media all and (min-width:500px){h1{color:blue}}', + '@media (min-width:500px){h1{color:blue}}' ); test( - 'should normalise "all and" in @media queries (uppercase)', - processCSS, - '@media ALL AND (min-width:500px){h1{color:blue}}', - '@media (min-width:500px){h1{color:blue}}' + 'should normalise "all and" in @media queries (uppercase)', + processCSS, + '@media ALL AND (min-width:500px){h1{color:blue}}', + '@media (min-width:500px){h1{color:blue}}' ); test( - 'should not normalise "not all and" in @media queries', - processCSS, - '@media not all and (min-width: 768px){h1{color:blue}}', - '@media not all and (min-width:768px){h1{color:blue}}' + 'should not normalise "not all and" in @media queries', + processCSS, + '@media not all and (min-width: 768px){h1{color:blue}}', + '@media not all and (min-width:768px){h1{color:blue}}' ); test( - 'should not remove "all" from other at-rules', - passthroughCSS, - '@foo all;' + 'should not remove "all" from other at-rules', + passthroughCSS, + '@foo all;' ); test( - 'should not mangle @keyframe from & 100% in other values', - passthroughCSS, - '@keyframes test{x-from-tag{color:red}5100%{color:blue}}' + 'should not mangle @keyframe from & 100% in other values', + passthroughCSS, + '@keyframes test{x-from-tag{color:red}5100%{color:blue}}' ); test( - 'should not parse at rules without params', - passthroughCSS, - '@font-face{font-family:test;src:local(test)}' + 'should not parse at rules without params', + passthroughCSS, + '@font-face{font-family:test;src:local(test)}' ); test( - 'should reduce min-aspect-ratio', - processCSS, - '@media (min-aspect-ratio: 32/18){h1{color:blue}}', - '@media (min-aspect-ratio:16/9){h1{color:blue}}' + 'should reduce min-aspect-ratio', + processCSS, + '@media (min-aspect-ratio: 32/18){h1{color:blue}}', + '@media (min-aspect-ratio:16/9){h1{color:blue}}' ); test( - 'should reduce min-aspect-ratio (uppercase)', - processCSS, - '@media (MIN-ASPECT-RATIO: 32/18){h1{color:blue}}', - '@media (MIN-ASPECT-RATIO:16/9){h1{color:blue}}' + 'should reduce min-aspect-ratio (uppercase)', + processCSS, + '@media (MIN-ASPECT-RATIO: 32/18){h1{color:blue}}', + '@media (MIN-ASPECT-RATIO:16/9){h1{color:blue}}' ); test( - 'should reduce max-aspect-ratio', - processCSS, - '@media (max-aspect-ratio: 48000000/32000000){h1{color:blue}}', - '@media (max-aspect-ratio:3/2){h1{color:blue}}' + 'should reduce max-aspect-ratio', + processCSS, + '@media (max-aspect-ratio: 48000000/32000000){h1{color:blue}}', + '@media (max-aspect-ratio:3/2){h1{color:blue}}' ); test( - 'should multiply aspect ratio', - processCSS, - '@media (max-aspect-ratio: 1.5/1){h1{color:blue}}', - '@media (max-aspect-ratio:3/2){h1{color:blue}}' + 'should multiply aspect ratio', + processCSS, + '@media (max-aspect-ratio: 1.5/1){h1{color:blue}}', + '@media (max-aspect-ratio:3/2){h1{color:blue}}' ); test( - 'should multiply aspect ratio (2)', - processCSS, - '@media (max-aspect-ratio: .5 / 1){h1{color:blue}}', - '@media (max-aspect-ratio:1/2){h1{color:blue}}' + 'should multiply aspect ratio (2)', + processCSS, + '@media (max-aspect-ratio: .5 / 1){h1{color:blue}}', + '@media (max-aspect-ratio:1/2){h1{color:blue}}' ); test( - 'should normalise @supports queries', - processCSS, - '@supports (display: grid) {}', - '@supports (display:grid) {}' + 'should normalise @supports queries', + processCSS, + '@supports (display: grid) {}', + '@supports (display:grid) {}' ); test( - 'should normalise @supports with not', - processCSS, - '@supports not (display: grid) {}', - '@supports not (display:grid) {}' + 'should normalise @supports with not', + processCSS, + '@supports not (display: grid) {}', + '@supports not (display:grid) {}' ); test( - 'should normalise @supports with multiple conditions', - processCSS, - '@supports ((text-align-last: justify) or (-moz-text-align-last: justify)) {}', - '@supports ((text-align-last:justify) or (-moz-text-align-last:justify)) {}' + 'should normalise @supports with multiple conditions', + processCSS, + '@supports ((text-align-last: justify) or (-moz-text-align-last: justify)) {}', + '@supports ((text-align-last:justify) or (-moz-text-align-last:justify)) {}' ); test( - 'should normalise @supports with var', - processCSS, - '@supports (--foo: green) {}', - '@supports (--foo:green) {}' + 'should normalise @supports with var', + processCSS, + '@supports (--foo: green) {}', + '@supports (--foo:green) {}' ); test( - 'should normalise @supports with :is', - processCSS, - '@supports not selector(:is(a, b)) {}', - '@supports not selector(:is(a,b)) {}' + 'should normalise @supports with :is', + processCSS, + '@supports not selector(:is(a, b)) {}', + '@supports not selector(:is(a,b)) {}' ); test( - 'should not throw on empty parentheses', - passthroughCSS, - '@media (){h1{color:blue}}' + 'should not throw on empty parentheses', + passthroughCSS, + '@media (){h1{color:blue}}' ); test( - 'should not mangle @value', - passthroughCSS, - `@value vertical, center from './Flex.mod.css';` + 'should not mangle @value', + passthroughCSS, + `@value vertical, center from './Flex.mod.css';` ); test( - 'should not mangle @value (uppercase)', - passthroughCSS, - `@VALUE vertical, center from './Flex.mod.css';` + 'should not mangle @value (uppercase)', + passthroughCSS, + `@VALUE vertical, center from './Flex.mod.css';` ); -test( - 'should not mangle @page', - passthroughCSS, - '@page :first { margin: 0; }' -); +test('should not mangle @page', passthroughCSS, '@page :first { margin: 0; }'); test( - 'should not mangle @page (uppercase)', - passthroughCSS, - '@PAGE :first { margin: 0; }' + 'should not mangle @page (uppercase)', + passthroughCSS, + '@PAGE :first { margin: 0; }' ); -test( - 'should not mangle @charset', - passthroughCSS, - '@charset "utf-8";' -); +test('should not mangle @charset', passthroughCSS, '@charset "utf-8";'); test( - 'should not mangle @charset (uppercase)', - passthroughCSS, - '@CHARSET "utf-8";' + 'should not mangle @charset (uppercase)', + passthroughCSS, + '@CHARSET "utf-8";' ); test( - 'should not mangle @import', - passthroughCSS, - '@import url("fineprint.css") print;' + 'should not mangle @import', + passthroughCSS, + '@import url("fineprint.css") print;' ); test( - 'should not mangle @import (uppercase)', - passthroughCSS, - '@IMPORT url("fineprint.css") print;' + 'should not mangle @import (uppercase)', + passthroughCSS, + '@IMPORT url("fineprint.css") print;' ); test( - 'should not mangle @namespace', - passthroughCSS, - '@namespace svg url(http://www.w3.org/2000/svg);' + 'should not mangle @namespace', + passthroughCSS, + '@namespace svg url(http://www.w3.org/2000/svg);' ); test( - 'should not mangle @namespace (uppercase)', - passthroughCSS, - '@NAMESPACE svg url(http://www.w3.org/2000/svg);' + 'should not mangle @namespace (uppercase)', + passthroughCSS, + '@NAMESPACE svg url(http://www.w3.org/2000/svg);' ); -test( - 'should not mangle @font-face', - passthroughCSS, - '@font-face {}' -); +test('should not mangle @font-face', passthroughCSS, '@font-face {}'); test( - 'should not mangle @font-face (uppercase)', - passthroughCSS, - '@FONT-FACE {}' + 'should not mangle @font-face (uppercase)', + passthroughCSS, + '@FONT-FACE {}' ); -test( - 'should not mangle @viewport', - passthroughCSS, - '@viewport {}' -); +test('should not mangle @viewport', passthroughCSS, '@viewport {}'); -test( - 'should not mangle @viewport (uppercase)', - passthroughCSS, - '@VIEWPORT {}' -); +test('should not mangle @viewport (uppercase)', passthroughCSS, '@VIEWPORT {}'); test( - 'should not mangle @counter-style', - passthroughCSS, - '@counter-style thumbs {}' + 'should not mangle @counter-style', + passthroughCSS, + '@counter-style thumbs {}' ); test( - 'should not mangle @counter-style (uppercase)', - passthroughCSS, - '@COUNTER-STYLE thumbs {}' + 'should not mangle @counter-style (uppercase)', + passthroughCSS, + '@COUNTER-STYLE thumbs {}' ); test( - 'should not mangle @font-feature-values', - passthroughCSS, - '@font-feature-values Font One {}' + 'should not mangle @font-feature-values', + passthroughCSS, + '@font-feature-values Font One {}' ); test( - 'should not mangle @font-feature-values (uppercase)', - passthroughCSS, - '@FONT-FEATURE-VALUES Font One {}' + 'should not mangle @font-feature-values (uppercase)', + passthroughCSS, + '@FONT-FEATURE-VALUES Font One {}' ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-minify-params/src/index.js b/packages/postcss-minify-params/src/index.js index 50e62825f..94dcc20f9 100644 --- a/packages/postcss-minify-params/src/index.js +++ b/packages/postcss-minify-params/src/index.js @@ -1,6 +1,6 @@ import browserslist from 'browserslist'; import postcss from 'postcss'; -import valueParser, {stringify} from 'postcss-value-parser'; +import valueParser, { stringify } from 'postcss-value-parser'; import sort from 'alphanum-sort'; import uniqs from 'uniqs'; import getArguments from 'lerna:cssnano-util-get-arguments'; @@ -10,102 +10,99 @@ import getArguments from 'lerna:cssnano-util-get-arguments'; * of two numbers. */ -function gcd (a, b) { - return b ? gcd(b, a % b) : a; +function gcd(a, b) { + return b ? gcd(b, a % b) : a; } -function aspectRatio (a, b) { - const divisor = gcd(a, b); +function aspectRatio(a, b) { + const divisor = gcd(a, b); - return [a / divisor, b / divisor]; + return [a / divisor, b / divisor]; } -function split (args) { - return args.map(arg => stringify(arg)).join(''); +function split(args) { + return args.map((arg) => stringify(arg)).join(''); } -function removeNode (node) { - node.value = ''; - node.type = 'word'; +function removeNode(node) { + node.value = ''; + node.type = 'word'; } -function transform (legacy, rule) { - const ruleName = rule.name.toLowerCase(); +function transform(legacy, rule) { + const ruleName = rule.name.toLowerCase(); + + // We should re-arrange parameters only for `@media` and `@supports` at-rules + if (!rule.params || !['media', 'supports'].includes(ruleName)) { + return; + } + + const params = valueParser(rule.params); + + params.walk((node, index) => { + if (node.type === 'div' || node.type === 'function') { + node.before = node.after = ''; + + if ( + node.type === 'function' && + node.nodes[4] && + node.nodes[0].value.toLowerCase().indexOf('-aspect-ratio') === 3 + ) { + const [a, b] = aspectRatio(node.nodes[2].value, node.nodes[4].value); + + node.nodes[2].value = a; + node.nodes[4].value = b; + } + } else if (node.type === 'space') { + node.value = ' '; + } else { + const prevWord = params.nodes[index - 2]; + + if ( + node.value.toLowerCase() === 'all' && + rule.name.toLowerCase() === 'media' && + !prevWord + ) { + const nextWord = params.nodes[index + 2]; + + if (!legacy || nextWord) { + removeNode(node); + } - // We should re-arrange parameters only for `@media` and `@supports` at-rules - if (!rule.params || !["media", "supports"].includes(ruleName)) { - return; - } + if (nextWord && nextWord.value.toLowerCase() === 'and') { + const nextSpace = params.nodes[index + 1]; + const secondSpace = params.nodes[index + 3]; - const params = valueParser(rule.params); - - params.walk((node, index) => { - if (node.type === 'div' || node.type === 'function') { - node.before = node.after = ''; - - if ( - node.type === 'function' && - node.nodes[4] && - node.nodes[0].value.toLowerCase().indexOf('-aspect-ratio') === 3 - ) { - const [a, b] = aspectRatio( - node.nodes[2].value, - node.nodes[4].value - ); - - node.nodes[2].value = a; - node.nodes[4].value = b; - } - } else if (node.type === 'space') { - node.value = ' '; - } else { - const prevWord = params.nodes[index - 2]; - - if ( - node.value.toLowerCase() === 'all' && - rule.name.toLowerCase() === 'media' && - !prevWord - ) { - const nextWord = params.nodes[index + 2]; - - if (!legacy || nextWord) { - removeNode(node); - } - - if (nextWord && nextWord.value.toLowerCase() === 'and') { - const nextSpace = params.nodes[index + 1]; - const secondSpace = params.nodes[index + 3]; - - removeNode(nextWord); - removeNode(nextSpace); - removeNode(secondSpace); - } - } + removeNode(nextWord); + removeNode(nextSpace); + removeNode(secondSpace); } - }, true); + } + } + }, true); - rule.params = sort(uniqs(getArguments(params).map(split)), { - insensitive: true, - }).join(); + rule.params = sort(uniqs(getArguments(params).map(split)), { + insensitive: true, + }).join(); - if (!rule.params.length) { - rule.raws.afterName = ''; - } + if (!rule.params.length) { + rule.raws.afterName = ''; + } } -function hasAllBug (browser) { - return ~['ie 10', 'ie 11'].indexOf(browser); +function hasAllBug(browser) { + return ~['ie 10', 'ie 11'].indexOf(browser); } export default postcss.plugin('postcss-minify-params', () => { - return (css, result) => { - const resultOpts = result.opts || {}; - const browsers = browserslist(null, { - stats: resultOpts.stats, - path: __dirname, - env: resultOpts.env, - }); - - return css.walkAtRules(transform.bind(null, browsers.some(hasAllBug))); - }; + return (css, result) => { + const resultOpts = result.opts || {}; + const browsers = browserslist(null, { + stats: resultOpts.stats, + path: __dirname, + env: resultOpts.env, + }); + + return css.walkAtRules(transform.bind(null, browsers.some(hasAllBug))); + }; }); diff --git a/packages/postcss-minify-selectors/src/__tests__/index.js b/packages/postcss-minify-selectors/src/__tests__/index.js index ab85e95c7..ffd725811 100644 --- a/packages/postcss-minify-selectors/src/__tests__/index.js +++ b/packages/postcss-minify-selectors/src/__tests__/index.js @@ -2,509 +2,513 @@ import test from 'ava'; import postcss from 'postcss'; import magician from 'postcss-font-magician'; import plugin from '../'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); test( - 'should trim spaces in simple selectors', - processCSS, - 'h1, h2, h3{color:blue}', - 'h1,h2,h3{color:blue}' + 'should trim spaces in simple selectors', + processCSS, + 'h1, h2, h3{color:blue}', + 'h1,h2,h3{color:blue}' ); test( - 'should trim spaces around combinators', - processCSS, - 'h1 + p, h1 > p, h1 ~ p{color:blue}', - 'h1+p,h1>p,h1~p{color:blue}' + 'should trim spaces around combinators', + processCSS, + 'h1 + p, h1 > p, h1 ~ p{color:blue}', + 'h1+p,h1>p,h1~p{color:blue}' ); test( - 'should not trim meaningful spaces', - passthroughCSS, - 'h1 p,H2 p{color:blue}' + 'should not trim meaningful spaces', + passthroughCSS, + 'h1 p,H2 p{color:blue}' ); test( - 'should reduce meaningful spaces', - processCSS, - 'h1 p,h2 p{color:blue}', - 'h1 p,h2 p{color:blue}' + 'should reduce meaningful spaces', + processCSS, + 'h1 p,h2 p{color:blue}', + 'h1 p,h2 p{color:blue}' ); test( - 'should remove qualified universal selectors', - processCSS, - '*#id,*.test,*:not(.green),*[href]{color:blue}', - '#id,.test,:not(.green),[href]{color:blue}' + 'should remove qualified universal selectors', + processCSS, + '*#id,*.test,*:not(.green),*[href]{color:blue}', + '#id,.test,:not(.green),[href]{color:blue}' ); test( - 'should remove complex qualified universal selectors', - processCSS, - '[class] + *[href] *:not(*.green){color:blue}', - '[class]+[href] :not(.green){color:blue}' + 'should remove complex qualified universal selectors', + processCSS, + '[class] + *[href] *:not(*.green){color:blue}', + '[class]+[href] :not(.green){color:blue}' ); test( - 'should remove complex qualified universal selectors (2)', - processCSS, - '*:not(*.green) ~ *{color:blue}', - ':not(.green)~*{color:blue}' + 'should remove complex qualified universal selectors (2)', + processCSS, + '*:not(*.green) ~ *{color:blue}', + ':not(.green)~*{color:blue}' ); test( - 'should not remove meaningful universal selectors', - processCSS, - '* + *, * > *, * h1, * ~ *{color:blue}', - '*+*,*>*,* h1,*~*{color:blue}' + 'should not remove meaningful universal selectors', + processCSS, + '* + *, * > *, * h1, * ~ *{color:blue}', + '*+*,*>*,* h1,*~*{color:blue}' ); test( - 'should preserve the universal selector between comments', - passthroughCSS, - '/*comment*/*/*comment*/{color:blue}' + 'should preserve the universal selector between comments', + passthroughCSS, + '/*comment*/*/*comment*/{color:blue}' ); test( - 'should preserve the universal selector in attribute selectors', - processCSS, - 'h1[class=" *.js "] + *.js{color:blue}', - 'h1[class=" *.js "]+.js{color:blue}' + 'should preserve the universal selector in attribute selectors', + processCSS, + 'h1[class=" *.js "] + *.js{color:blue}', + 'h1[class=" *.js "]+.js{color:blue}' ); test( - 'should preserve the universal selector in filenames', - passthroughCSS, - '[filename="*.js"]{color:blue}' + 'should preserve the universal selector in filenames', + passthroughCSS, + '[filename="*.js"]{color:blue}' ); test( - 'should preserve the universal selector in file globs', - passthroughCSS, - '[glob="/**/*.js"]{color:blue}' + 'should preserve the universal selector in file globs', + passthroughCSS, + '[glob="/**/*.js"]{color:blue}' ); test( - 'should preserve escaped zero plus sequences', - passthroughCSS, - '.\\31 0\\+,.\\31 5\\+,.\\32 0\\+{color:blue}' + 'should preserve escaped zero plus sequences', + passthroughCSS, + '.\\31 0\\+,.\\31 5\\+,.\\32 0\\+{color:blue}' ); test( - 'should handle deep combinators', - passthroughCSS, - 'body /deep/ .theme-element{color:blue}' + 'should handle deep combinators', + passthroughCSS, + 'body /deep/ .theme-element{color:blue}' ); test( - 'should sort using natural sort', - processCSS, - '.item1, .item10, .item11, .item2{color:blue}', - '.item1,.item2,.item10,.item11{color:blue}' + 'should sort using natural sort', + processCSS, + '.item1, .item10, .item11, .item2{color:blue}', + '.item1,.item2,.item10,.item11{color:blue}' ); test( - 'should dedupe selectors', - processCSS, - 'h1,h2,h3,h4,h5,h5,h6{color:blue}', - 'h1,h2,h3,h4,h5,h6{color:blue}' + 'should dedupe selectors', + processCSS, + 'h1,h2,h3,h4,h5,h5,h6{color:blue}', + 'h1,h2,h3,h4,h5,h6{color:blue}' ); test( - 'should trim spaces in :not()', - processCSS, - 'h1:not(.article, .comments){color:blue}', - 'h1:not(.article,.comments){color:blue}' + 'should trim spaces in :not()', + processCSS, + 'h1:not(.article, .comments){color:blue}', + 'h1:not(.article,.comments){color:blue}' ); test( - 'should trim spaces in :not() (2)', - processCSS, - 'h1:not(.article, .comments), h2:not(.lead, .recommendation){color:blue}', - 'h1:not(.article,.comments),h2:not(.lead,.recommendation){color:blue}' + 'should trim spaces in :not() (2)', + processCSS, + 'h1:not(.article, .comments), h2:not(.lead, .recommendation){color:blue}', + 'h1:not(.article,.comments),h2:not(.lead,.recommendation){color:blue}' ); test( - 'should dedupe simple selectors inside :not()', - processCSS, - 'h1:not(h2, h3, h4, h5, h5, h6){color:blue}', - 'h1:not(h2,h3,h4,h5,h6){color:blue}' + 'should dedupe simple selectors inside :not()', + processCSS, + 'h1:not(h2, h3, h4, h5, h5, h6){color:blue}', + 'h1:not(h2,h3,h4,h5,h6){color:blue}' ); test( - 'should normalise attribute selectors', - processCSS, - 'a[ color= "blue" ]{color:blue}', - 'a[color=blue]{color:blue}' + 'should normalise attribute selectors', + processCSS, + 'a[ color= "blue" ]{color:blue}', + 'a[color=blue]{color:blue}' ); test( - 'should normalise attribute selectors (2)', - passthroughCSS, - 'a[class^="options["]:after{color:blue}' + 'should normalise attribute selectors (2)', + passthroughCSS, + 'a[class^="options["]:after{color:blue}' ); test( - 'should normalise attribute selectors (3)', - processCSS, - 'a[class="woop_woop_woop"]{color:blue}', - 'a[class=woop_woop_woop]{color:blue}' + 'should normalise attribute selectors (3)', + processCSS, + 'a[class="woop_woop_woop"]{color:blue}', + 'a[class=woop_woop_woop]{color:blue}' ); test( - 'should normalise attribute selectors (4)', - processCSS, - 'a[class="woop \\\nwoop woop"]{color:blue}', - 'a[class="woop woop woop"]{color:blue}' + 'should normalise attribute selectors (4)', + processCSS, + 'a[class="woop \\\nwoop woop"]{color:blue}', + 'a[class="woop woop woop"]{color:blue}' ); test( - 'should normalise attribute selectors (5)', - processCSS, - 'a[ color = "blue" ]{color:blue}', - 'a[color=blue]{color:blue}' + 'should normalise attribute selectors (5)', + processCSS, + 'a[ color = "blue" ]{color:blue}', + 'a[color=blue]{color:blue}' ); test( - 'should normalise attribute selectors (6)', - processCSS, - 'a[color="blue" i ]{color:blue}', - 'a[color=blue i]{color:blue}' + 'should normalise attribute selectors (6)', + processCSS, + 'a[color="blue" i ]{color:blue}', + 'a[color=blue i]{color:blue}' ); test( - 'should normalise attribute selectors (6)', - processCSS, - 'a[ target ]{color:blue}', - 'a[target]{color:blue}' + 'should normalise attribute selectors (6)', + processCSS, + 'a[ target ]{color:blue}', + 'a[target]{color:blue}' ); test( - 'should convert @keyframe from & 100%', - processCSS, - '@keyframes test{from{color:red}100%{color:blue}}', - '@keyframes test{0%{color:red}to{color:blue}}' + 'should convert @keyframe from & 100%', + processCSS, + '@keyframes test{from{color:red}100%{color:blue}}', + '@keyframes test{0%{color:red}to{color:blue}}' ); test( - 'should convert @keyframe from & 100% (2)', - processCSS, - '@keyframes test{FROM{color:red}100%{color:blue}}', - '@keyframes test{0%{color:red}to{color:blue}}' + 'should convert @keyframe from & 100% (2)', + processCSS, + '@keyframes test{FROM{color:red}100%{color:blue}}', + '@keyframes test{0%{color:red}to{color:blue}}' ); test( - 'should not mangle @keyframe from & 100% in other values', - passthroughCSS, - '@keyframes test{x-from-tag{color:red}5100%{color:blue}}' + 'should not mangle @keyframe from & 100% in other values', + passthroughCSS, + '@keyframes test{x-from-tag{color:red}5100%{color:blue}}' ); test( - 'should not be responsible for normalising comments', - processCSS, - 'h1 /*!test comment*/, h2{color:blue}', - 'h1 /*!test comment*/,h2{color:blue}' + 'should not be responsible for normalising comments', + processCSS, + 'h1 /*!test comment*/, h2{color:blue}', + 'h1 /*!test comment*/,h2{color:blue}' ); test( - 'should not be responsible for normalising coments (2)', - processCSS, - '/*!test comment*/h1, h2{color:blue}', - '/*!test comment*/h1,h2{color:blue}' + 'should not be responsible for normalising coments (2)', + processCSS, + '/*!test comment*/h1, h2{color:blue}', + '/*!test comment*/h1,h2{color:blue}' ); test( - 'should transform ::before to :before', - processCSS, - 'h1::before{color:blue}', - 'h1:before{color:blue}' + 'should transform ::before to :before', + processCSS, + 'h1::before{color:blue}', + 'h1:before{color:blue}' ); test( - 'should transform ::before to :before (2)', - processCSS, - 'h1::BEFORE{color:blue}', - 'h1:BEFORE{color:blue}' + 'should transform ::before to :before (2)', + processCSS, + 'h1::BEFORE{color:blue}', + 'h1:BEFORE{color:blue}' ); test( - 'should transform ::after to :after', - processCSS, - 'h1::after{color:blue}', - 'h1:after{color:blue}' + 'should transform ::after to :after', + processCSS, + 'h1::after{color:blue}', + 'h1:after{color:blue}' ); test( - 'should transform ::first-letter to :first-letter', - processCSS, - 'h1::first-letter{color:blue}', - 'h1:first-letter{color:blue}' + 'should transform ::first-letter to :first-letter', + processCSS, + 'h1::first-letter{color:blue}', + 'h1:first-letter{color:blue}' ); test( - 'should transform ::first-line to :first-line', - processCSS, - 'h1::first-line{color:blue}', - 'h1:first-line{color:blue}' + 'should transform ::first-line to :first-line', + processCSS, + 'h1::first-line{color:blue}', + 'h1:first-line{color:blue}' ); test( - 'should not change strings', - passthroughCSS, - ':not([attr=" h1 a + b /* not a comment */ end of :not from 100% "]){color:blue}' + 'should not change strings', + passthroughCSS, + ':not([attr=" h1 a + b /* not a comment */ end of :not from 100% "]){color:blue}' ); test( - 'should not change strings (2)', - passthroughCSS, - ':not([attr=" h1 a + b /* not a comment */ not end of `:not`: ) from 100% "]){color:blue}' + 'should not change strings (2)', + passthroughCSS, + ':not([attr=" h1 a + b /* not a comment */ not end of `:not`: ) from 100% "]){color:blue}' ); test( - 'should not change strings (3)', - passthroughCSS, - '[a=":not( *.b, h1, h1 )"]{color:blue}' + 'should not change strings (3)', + passthroughCSS, + '[a=":not( *.b, h1, h1 )"]{color:blue}' ); test( - 'should not change strings (4)', - passthroughCSS, - '[a="escaped quotes \\" h1, h1, h1 \\" h1, h1, h1"]{color:blue}' + 'should not change strings (4)', + passthroughCSS, + '[a="escaped quotes \\" h1, h1, h1 \\" h1, h1, h1"]{color:blue}' ); test( - 'should not change strings (5)', - passthroughCSS, - "[a='escaped quotes \\' h1, h1, h1 \\' h1, h1, h1']{color:blue}" + 'should not change strings (5)', + passthroughCSS, + "[a='escaped quotes \\' h1, h1, h1 \\' h1, h1, h1']{color:blue}" ); test( - 'should transform qualified attribute selector inside not', - processCSS, - ':not( *[href="foo"] ){color:blue}', - ':not([href=foo]){color:blue}' + 'should transform qualified attribute selector inside not', + processCSS, + ':not( *[href="foo"] ){color:blue}', + ':not([href=foo]){color:blue}' ); test( - 'should not mangle attribute selectors', - processCSS, - '[class*=" icon-"]+.label, [class^="icon-"]+.label{color:blue}', - '[class*=" icon-"]+.label,[class^=icon-]+.label{color:blue}' + 'should not mangle attribute selectors', + processCSS, + '[class*=" icon-"]+.label, [class^="icon-"]+.label{color:blue}', + '[class*=" icon-"]+.label,[class^=icon-]+.label{color:blue}' ); test( - 'should not mangle attribute selectors (2)', - processCSS, - '.control-group-inline>input[type="radio"]{color:blue}', - '.control-group-inline>input[type=radio]{color:blue}' + 'should not mangle attribute selectors (2)', + processCSS, + '.control-group-inline>input[type="radio"]{color:blue}', + '.control-group-inline>input[type=radio]{color:blue}' ); test( - 'should not mangle quoted attribute selectors that contain =', - passthroughCSS, - '.parent>.child[data-attr~="key1=1"]{color:blue}' + 'should not mangle quoted attribute selectors that contain =', + passthroughCSS, + '.parent>.child[data-attr~="key1=1"]{color:blue}' ); test( - 'should not mangle .from/#from etc', - passthroughCSS, - '#from,.from{color:blue}' + 'should not mangle .from/#from etc', + passthroughCSS, + '#from,.from{color:blue}' ); test( - 'should not mangle pseudo classes', - passthroughCSS, - '.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){color:blue}' + 'should not mangle pseudo classes', + passthroughCSS, + '.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){color:blue}' ); test( - 'should not mangle pseudo classes (2)', - passthroughCSS, - '.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{color:blue}' + 'should not mangle pseudo classes (2)', + passthroughCSS, + '.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{color:blue}' ); test( - 'should not throw on polymer mixins', - passthroughCSS, - '--my-toolbar-theme:{color:blue};' + 'should not throw on polymer mixins', + passthroughCSS, + '--my-toolbar-theme:{color:blue};' ); test( - 'should not throw on polymer mixins (2)', - passthroughCSS, - 'paper-button{--paper-button-ink-color:#009688}' + 'should not throw on polymer mixins (2)', + passthroughCSS, + 'paper-button{--paper-button-ink-color:#009688}' ); test( - 'should not unquote a single hyphen as an attribute value', - passthroughCSS, - '[title="-"]{color:blue}' + 'should not unquote a single hyphen as an attribute value', + passthroughCSS, + '[title="-"]{color:blue}' ); test( - 'should handle case insensitive attribute selectors with extra spaces', - processCSS, - '[title="foo" i ]{color:blue}', - '[title=foo i]{color:blue}' + 'should handle case insensitive attribute selectors with extra spaces', + processCSS, + '[title="foo" i ]{color:blue}', + '[title=foo i]{color:blue}' ); test( - 'should not remove quotes around an empty attribute selector', - passthroughCSS, - '[title=""]{color:blue}' + 'should not remove quotes around an empty attribute selector', + passthroughCSS, + '[title=""]{color:blue}' ); test( - 'should convert :nth-child(1) to :first-child', - processCSS, - 'p:nth-child(1){color:blue}', - 'p:first-child{color:blue}' + 'should convert :nth-child(1) to :first-child', + processCSS, + 'p:nth-child(1){color:blue}', + 'p:first-child{color:blue}' ); test( - 'should convert :nth-child(1) to :first-child (2)', - processCSS, - 'p:NTH-CHILD(1){color:blue}', - 'p:first-child{color:blue}' + 'should convert :nth-child(1) to :first-child (2)', + processCSS, + 'p:NTH-CHILD(1){color:blue}', + 'p:first-child{color:blue}' ); test( - 'should convert :nth-child(2n + 1) to :nth-child(odd)', - processCSS, - 'p:nth-child(2n + 1){color:blue}', - 'p:nth-child(odd){color:blue}' + 'should convert :nth-child(2n + 1) to :nth-child(odd)', + processCSS, + 'p:nth-child(2n + 1){color:blue}', + 'p:nth-child(odd){color:blue}' ); test( - 'should convert :nth-child(even) to :nth-child(2n)', - processCSS, - 'p:nth-child(even){color:blue}', - 'p:nth-child(2n){color:blue}' + 'should convert :nth-child(even) to :nth-child(2n)', + processCSS, + 'p:nth-child(even){color:blue}', + 'p:nth-child(2n){color:blue}' ); test( - 'should convert :nth-child(even) to :nth-child(2n) (2)', - processCSS, - 'p:nth-child(EVEN){color:blue}', - 'p:nth-child(2n){color:blue}' + 'should convert :nth-child(even) to :nth-child(2n) (2)', + processCSS, + 'p:nth-child(EVEN){color:blue}', + 'p:nth-child(2n){color:blue}' ); test( - 'should convert :nth-of-type(1) to :first-of-type', - processCSS, - 'p:nth-of-type(1){color:blue}', - 'p:first-of-type{color:blue}' + 'should convert :nth-of-type(1) to :first-of-type', + processCSS, + 'p:nth-of-type(1){color:blue}', + 'p:first-of-type{color:blue}' ); test( - 'should convert :nth-of-type(2n + 1) to :nth-of-type(odd)', - processCSS, - 'p:nth-of-type(2n + 1){color:blue}', - 'p:nth-of-type(odd){color:blue}' + 'should convert :nth-of-type(2n + 1) to :nth-of-type(odd)', + processCSS, + 'p:nth-of-type(2n + 1){color:blue}', + 'p:nth-of-type(odd){color:blue}' ); test( - 'should convert :nth-of-type(2n + 1) to :nth-of-type(odd) (2)', - processCSS, - 'p:nth-of-type(2N + 1){color:blue}', - 'p:nth-of-type(odd){color:blue}' + 'should convert :nth-of-type(2n + 1) to :nth-of-type(odd) (2)', + processCSS, + 'p:nth-of-type(2N + 1){color:blue}', + 'p:nth-of-type(odd){color:blue}' ); test( - 'should convert :nth-of-type(even) to :nth-of-type(2n)', - processCSS, - 'p:nth-of-type(even){color:blue}', - 'p:nth-of-type(2n){color:blue}' + 'should convert :nth-of-type(even) to :nth-of-type(2n)', + processCSS, + 'p:nth-of-type(even){color:blue}', + 'p:nth-of-type(2n){color:blue}' ); test( - 'should convert :nth-last-child(1) to :last-child', - processCSS, - 'p:nth-last-child(1){color:blue}', - 'p:last-child{color:blue}' + 'should convert :nth-last-child(1) to :last-child', + processCSS, + 'p:nth-last-child(1){color:blue}', + 'p:last-child{color:blue}' ); test( - 'should convert :nth-last-child(2n + 1) to :nth-last-child(odd)', - processCSS, - 'p:nth-last-child(2n + 1){color:blue}', - 'p:nth-last-child(odd){color:blue}' + 'should convert :nth-last-child(2n + 1) to :nth-last-child(odd)', + processCSS, + 'p:nth-last-child(2n + 1){color:blue}', + 'p:nth-last-child(odd){color:blue}' ); test( - 'should convert :nth-last-child(even) to :nth-last-child(2n)', - processCSS, - 'p:nth-last-child(even){color:blue}', - 'p:nth-last-child(2n){color:blue}' + 'should convert :nth-last-child(even) to :nth-last-child(2n)', + processCSS, + 'p:nth-last-child(even){color:blue}', + 'p:nth-last-child(2n){color:blue}' ); test( - 'should convert :nth-last-of-type(1) to :last-of-type', - processCSS, - 'p:nth-last-of-type(1){color:blue}', - 'p:last-of-type{color:blue}' + 'should convert :nth-last-of-type(1) to :last-of-type', + processCSS, + 'p:nth-last-of-type(1){color:blue}', + 'p:last-of-type{color:blue}' ); test( - 'should convert :nth-last-of-type(2n + 1) to :nth-last-of-type(odd)', - processCSS, - 'p:nth-last-of-type(2n + 1){color:blue}', - 'p:nth-last-of-type(odd){color:blue}' + 'should convert :nth-last-of-type(2n + 1) to :nth-last-of-type(odd)', + processCSS, + 'p:nth-last-of-type(2n + 1){color:blue}', + 'p:nth-last-of-type(odd){color:blue}' ); test( - 'should handle :nth-last-of-type(2n + 2)', - processCSS, - 'p:nth-last-of-type(2n + 2){color:blue}', - 'p:nth-last-of-type(2n+2){color:blue}' + 'should handle :nth-last-of-type(2n + 2)', + processCSS, + 'p:nth-last-of-type(2n + 2){color:blue}', + 'p:nth-last-of-type(2n+2){color:blue}' ); test( - 'should convert :nth-last-of-type(even) to :nth-last-of-type(2n)', - processCSS, - 'p:nth-last-of-type(even){color:blue}', - 'p:nth-last-of-type(2n){color:blue}' + 'should convert :nth-last-of-type(even) to :nth-last-of-type(2n)', + processCSS, + 'p:nth-last-of-type(even){color:blue}', + 'p:nth-last-of-type(2n){color:blue}' ); test( - 'should handle first/last of type without parameters', - passthroughCSS, - 'body>h2:not(:first-of-type):not(:last-of-type){color:blue}' + 'should handle first/last of type without parameters', + passthroughCSS, + 'body>h2:not(:first-of-type):not(:last-of-type){color:blue}' ); -test('cssnano issue 39', t => { - const css = 'body{font:100%/1.25 "Open Sans", sans-serif;background:#F6F5F4;overflow-x:hidden}'; - t.notThrows(() => postcss([ magician(), plugin() ]).process(css).css); +test('cssnano issue 39', (t) => { + const css = + 'body{font:100%/1.25 "Open Sans", sans-serif;background:#F6F5F4;overflow-x:hidden}'; + t.notThrows(() => postcss([magician(), plugin()]).process(css).css); }); /* * Reference: https://github.com/tivac/modular-css/issues/228 */ -test('should handle selectors from other plugins', t => { - function encode (str) { - let result = ""; - for (let i = 0; i < str.length; i++) { - result += str.charCodeAt(i).toString(16); - } - - return result; +test('should handle selectors from other plugins', (t) => { + function encode(str) { + let result = ''; + for (let i = 0; i < str.length; i++) { + result += str.charCodeAt(i).toString(16); } - const toModules = postcss.plugin('toModules', () => { - return css => { - css.walkRules(rule => { - rule.selectors = rule.selectors.map(selector => { - const slice = selector.slice(1); - return `.${encode(slice).slice(0, 7)}__${slice}`; - }); - }); - }; - }); - - const css = `.test, /* comment #1 - this comment breaks stuff */ + return result; + } + + const toModules = postcss.plugin('toModules', () => { + return (css) => { + css.walkRules((rule) => { + rule.selectors = rule.selectors.map((selector) => { + const slice = selector.slice(1); + return `.${encode(slice).slice(0, 7)}__${slice}`; + }); + }); + }; + }); + + const css = `.test, /* comment #1 - this comment breaks stuff */ .test:hover { /* comment #2 - ...but this comment is fine */ position: absolute; } @@ -512,19 +516,15 @@ test('should handle selectors from other plugins', t => { .ok { padding: 4px; }`; - const expected = `.7465737__test,.7465737__test:hover { /* comment #2 - ...but this comment is fine */ + const expected = `.7465737__test,.7465737__test:hover { /* comment #2 - ...but this comment is fine */ position: absolute; } .6f6b__ok { padding: 4px; }`; - const res = postcss([toModules, plugin]).process(css).css; - t.deepEqual(res, expected); + const res = postcss([toModules, plugin]).process(css).css; + t.deepEqual(res, expected); }); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-minify-selectors/src/index.js b/packages/postcss-minify-selectors/src/index.js index c5f68649a..5b5d8cc7d 100644 --- a/packages/postcss-minify-selectors/src/index.js +++ b/packages/postcss-minify-selectors/src/index.js @@ -1,220 +1,220 @@ -import {plugin} from "postcss"; -import sort from "alphanum-sort"; -import has from "has"; -import parser from "postcss-selector-parser"; -import unquote from "./lib/unquote"; -import canUnquote from "./lib/canUnquote"; +import { plugin } from 'postcss'; +import sort from 'alphanum-sort'; +import has from 'has'; +import parser from 'postcss-selector-parser'; +import unquote from './lib/unquote'; +import canUnquote from './lib/canUnquote'; const pseudoElements = [ - "::before", - "::after", - "::first-letter", - "::first-line", + '::before', + '::after', + '::first-letter', + '::first-line', ]; -function getParsed (selectors, callback) { - return parser(callback).processSync(selectors); +function getParsed(selectors, callback) { + return parser(callback).processSync(selectors); } -function attribute (selector) { - if (selector.value) { - // Join selectors that are split over new lines - selector.value = selector.value.replace(/\\\n/g, "").trim(); +function attribute(selector) { + if (selector.value) { + // Join selectors that are split over new lines + selector.value = selector.value.replace(/\\\n/g, '').trim(); - if (canUnquote(selector.value)) { - selector.value = unquote(selector.value); - } - - selector.operator = selector.operator.trim(); + if (canUnquote(selector.value)) { + selector.value = unquote(selector.value); } - if (!selector.raws) { - selector.raws = {}; - } + selector.operator = selector.operator.trim(); + } - if (!selector.raws.spaces) { - selector.raws.spaces = {}; - } + if (!selector.raws) { + selector.raws = {}; + } - selector.raws.spaces.attribute = { - before: "", - after: "", - }; + if (!selector.raws.spaces) { + selector.raws.spaces = {}; + } - selector.raws.spaces.operator = { - before: "", - after: "", - }; + selector.raws.spaces.attribute = { + before: '', + after: '', + }; - selector.raws.spaces.value = { - before: "", - after: selector.insensitive ? " " : "", - }; + selector.raws.spaces.operator = { + before: '', + after: '', + }; - if (selector.insensitive) { - selector.raws.spaces.insensitive = { - before: "", - after: "", - }; - } + selector.raws.spaces.value = { + before: '', + after: selector.insensitive ? ' ' : '', + }; + + if (selector.insensitive) { + selector.raws.spaces.insensitive = { + before: '', + after: '', + }; + } - selector.attribute = selector.attribute.trim(); + selector.attribute = selector.attribute.trim(); } -function combinator (selector) { - const value = selector.value.trim(); +function combinator(selector) { + const value = selector.value.trim(); - selector.value = value.length ? value : " "; + selector.value = value.length ? value : ' '; } const pseudoReplacements = { - ":nth-child": ":first-child", - ":nth-of-type": ":first-of-type", - ":nth-last-child": ":last-child", - ":nth-last-of-type": ":last-of-type", + ':nth-child': ':first-child', + ':nth-of-type': ':first-of-type', + ':nth-last-child': ':last-child', + ':nth-last-of-type': ':last-of-type', }; -function pseudo (selector) { - const value = selector.value.toLowerCase(); - - if (selector.nodes.length === 1 && pseudoReplacements[value]) { - const first = selector.at(0); - const one = first.at(0); - - if (first.length === 1) { - if (one.value === "1") { - selector.replaceWith( - parser.pseudo({ - value: pseudoReplacements[value], - }) - ); - } - - if (one.value.toLowerCase() === "even") { - one.value = "2n"; - } - } - - if (first.length === 3) { - const two = first.at(1); - const three = first.at(2); +function pseudo(selector) { + const value = selector.value.toLowerCase(); + + if (selector.nodes.length === 1 && pseudoReplacements[value]) { + const first = selector.at(0); + const one = first.at(0); + + if (first.length === 1) { + if (one.value === '1') { + selector.replaceWith( + parser.pseudo({ + value: pseudoReplacements[value], + }) + ); + } + + if (one.value.toLowerCase() === 'even') { + one.value = '2n'; + } + } - if ( - one.value.toLowerCase() === "2n" && - two.value === "+" && - three.value === "1" - ) { - one.value = "odd"; + if (first.length === 3) { + const two = first.at(1); + const three = first.at(2); - two.remove(); - three.remove(); - } - } + if ( + one.value.toLowerCase() === '2n' && + two.value === '+' && + three.value === '1' + ) { + one.value = 'odd'; - return; + two.remove(); + three.remove(); + } } - const uniques = []; + return; + } - selector.walk(child => { - if (child.type === "selector") { - const childStr = String(child); + const uniques = []; - if (!~uniques.indexOf(childStr)) { - uniques.push(childStr); - } else { - child.remove(); - } - } - }); + selector.walk((child) => { + if (child.type === 'selector') { + const childStr = String(child); - if (~pseudoElements.indexOf(value)) { - selector.value = selector.value.slice(1); + if (!~uniques.indexOf(childStr)) { + uniques.push(childStr); + } else { + child.remove(); + } } + }); + + if (~pseudoElements.indexOf(value)) { + selector.value = selector.value.slice(1); + } } const tagReplacements = { - from: "0%", - "100%": "to", + from: '0%', + '100%': 'to', }; -function tag (selector) { - const value = selector.value.toLowerCase(); +function tag(selector) { + const value = selector.value.toLowerCase(); - if (has(tagReplacements, value)) { - selector.value = tagReplacements[value]; - } + if (has(tagReplacements, value)) { + selector.value = tagReplacements[value]; + } } -function universal (selector) { - const next = selector.next(); +function universal(selector) { + const next = selector.next(); - if (next && next.type !== "combinator") { - selector.remove(); - } + if (next && next.type !== 'combinator') { + selector.remove(); + } } const reducers = { - attribute, - combinator, - pseudo, - tag, - universal, + attribute, + combinator, + pseudo, + tag, + universal, }; -export default plugin("postcss-minify-selectors", () => { - return css => { - const cache = {}; +export default plugin('postcss-minify-selectors', () => { + return (css) => { + const cache = {}; - css.walkRules(rule => { - const selector = - rule.raws.selector && rule.raws.selector.value === rule.selector - ? rule.raws.selector.raw - : rule.selector; - - // If the selector ends with a ':' it is likely a part of a custom mixin, - // so just pass through. - if (selector[selector.length - 1] === ":") { - return; - } + css.walkRules((rule) => { + const selector = + rule.raws.selector && rule.raws.selector.value === rule.selector + ? rule.raws.selector.raw + : rule.selector; - if (cache[selector]) { - rule.selector = cache[selector]; + // If the selector ends with a ':' it is likely a part of a custom mixin, + // so just pass through. + if (selector[selector.length - 1] === ':') { + return; + } - return; - } + if (cache[selector]) { + rule.selector = cache[selector]; - const optimizedSelector = getParsed(selector, selectors => { - selectors.nodes = sort(selectors.nodes, {insensitive: true}); + return; + } - const uniqueSelectors = []; + const optimizedSelector = getParsed(selector, (selectors) => { + selectors.nodes = sort(selectors.nodes, { insensitive: true }); - selectors.walk(sel => { - const {type} = sel; + const uniqueSelectors = []; - // Trim whitespace around the value - sel.spaces.before = sel.spaces.after = ""; + selectors.walk((sel) => { + const { type } = sel; - if (has(reducers, type)) { - reducers[type](sel); + // Trim whitespace around the value + sel.spaces.before = sel.spaces.after = ''; - return; - } + if (has(reducers, type)) { + reducers[type](sel); - const toString = String(sel); + return; + } - if (type === "selector" && sel.parent.type !== "pseudo") { - if (!~uniqueSelectors.indexOf(toString)) { - uniqueSelectors.push(toString); - } else { - sel.remove(); - } - } - }); - }); + const toString = String(sel); - rule.selector = optimizedSelector; - cache[selector] = optimizedSelector; + if (type === 'selector' && sel.parent.type !== 'pseudo') { + if (!~uniqueSelectors.indexOf(toString)) { + uniqueSelectors.push(toString); + } else { + sel.remove(); + } + } }); - }; + }); + + rule.selector = optimizedSelector; + cache[selector] = optimizedSelector; + }); + }; }); diff --git a/packages/postcss-minify-selectors/src/lib/canUnquote.js b/packages/postcss-minify-selectors/src/lib/canUnquote.js index dd54cbed6..b6adac79b 100644 --- a/packages/postcss-minify-selectors/src/lib/canUnquote.js +++ b/packages/postcss-minify-selectors/src/lib/canUnquote.js @@ -6,13 +6,17 @@ import unquote from './unquote'; * https://github.com/mathiasbynens/mothereff.in */ const escapes = /\\([0-9A-Fa-f]{1,6})[ \t\n\f\r]?/g; +// eslint-disable-next-line no-control-regex const range = /[\u0000-\u002c\u002e\u002f\u003A-\u0040\u005B-\u005E\u0060\u007B-\u009f]/; -export default function canUnquote (value) { - value = unquote(value); - if (value === '-' || value === '') { - return false; - } - value = value.replace(escapes, 'a').replace(/\\./g, 'a'); - return !(range.test(value) || /^(?:-?\d|--)/.test(value)); +export default function canUnquote(value) { + value = unquote(value); + + if (value === '-' || value === '') { + return false; + } + + value = value.replace(escapes, 'a').replace(/\\./g, 'a'); + + return !(range.test(value) || /^(?:-?\d|--)/.test(value)); } diff --git a/packages/postcss-minify-selectors/src/lib/unquote.js b/packages/postcss-minify-selectors/src/lib/unquote.js index 588807eaa..1420aacd7 100644 --- a/packages/postcss-minify-selectors/src/lib/unquote.js +++ b/packages/postcss-minify-selectors/src/lib/unquote.js @@ -1 +1 @@ -export default string => string.replace(/["']/g, ''); +export default (string) => string.replace(/["']/g, ''); diff --git a/packages/postcss-normalize-charset/src/__tests__/index.js b/packages/postcss-normalize-charset/src/__tests__/index.js index 290601ba6..001a09b75 100644 --- a/packages/postcss-normalize-charset/src/__tests__/index.js +++ b/packages/postcss-normalize-charset/src/__tests__/index.js @@ -2,91 +2,95 @@ import test from 'ava'; import devtools from 'postcss-devtools'; import postcss from 'postcss'; import plugin from '../'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); -function sourceTest (t, origin) { - return postcss.plugin('source-test', () => { - return function (css) { - let node = css.first; - let source; - if (node.name === 'charset') { - source = node.source; - source = source.input.css.slice(source.start.column - 1, source.end.column); - } - t.deepEqual(source, origin, 'should correctly set source code'); - }; - }); +function sourceTest(t, origin) { + return postcss.plugin('source-test', () => { + return function(css) { + let node = css.first; + let source; + if (node.name === 'charset') { + source = node.source; + source = source.input.css.slice( + source.start.column - 1, + source.end.column + ); + } + t.deepEqual(source, origin, 'should correctly set source code'); + }; + }); } -function processCssWithSource (t, fixture, expected, source) { - const {processCSS: withSource} = processCSSFactory([plugin(), sourceTest(t, source)]); - return withSource(t, fixture, expected); +function processCssWithSource(t, fixture, expected, source) { + const { processCSS: withSource } = processCSSFactory([ + plugin(), + sourceTest(t, source), + ]); + return withSource(t, fixture, expected); } -function processCssBenchmark (t, fixture, expected, options) { - const {processCSS: benchmark} = processCSSFactory([devtools(), plugin(options)]); - return benchmark(t, fixture, expected); +function processCssBenchmark(t, fixture, expected, options) { + const { processCSS: benchmark } = processCSSFactory([ + devtools(), + plugin(options), + ]); + return benchmark(t, fixture, expected); } let copyright = 'a{content:"©"}'; test( - 'should add a charset if a file contains non-ascii', - processCssWithSource, - copyright, - '@charset "utf-8";\n' + copyright, - copyright + 'should add a charset if a file contains non-ascii', + processCssWithSource, + copyright, + '@charset "utf-8";\n' + copyright, + copyright ); test( - 'should move up first existing charset', - processCssWithSource, - 'b{жизнь:калька}@charset "windows-1251";' + copyright, - '@charset "windows-1251";b{жизнь:калька}' + copyright, - 'b{жизнь:калька}' + 'should move up first existing charset', + processCssWithSource, + 'b{жизнь:калька}@charset "windows-1251";' + copyright, + '@charset "windows-1251";b{жизнь:калька}' + copyright, + 'b{жизнь:калька}' ); test( - 'should remove extra charset rules', - processCssWithSource, - copyright + '@charset "utf-8";@charset "windows-1251";', - '@charset "utf-8";\n' + copyright, - copyright + 'should remove extra charset rules', + processCssWithSource, + copyright + '@charset "utf-8";@charset "windows-1251";', + '@charset "utf-8";\n' + copyright, + copyright ); test( - 'should remove all charset rules if a file doesn\'t contain non-ascii', - processCSS, - 'a{content:"c"}@charset "utf-8";@charset "windows-1251";', - 'a{content:"c"}' + "should remove all charset rules if a file doesn't contain non-ascii", + processCSS, + 'a{content:"c"}@charset "utf-8";@charset "windows-1251";', + 'a{content:"c"}' ); test( - 'should not add a charset with add set to false', - passthroughCSS, - copyright, - {add: false} + 'should not add a charset with add set to false', + passthroughCSS, + copyright, + { add: false } ); test( - 'benchmark (add on)', - processCssBenchmark, - copyright, - '@charset "utf-8";\n' + copyright + 'benchmark (add on)', + processCssBenchmark, + copyright, + '@charset "utf-8";\n' + copyright ); -test( - 'benchmark (add off)', - processCssBenchmark, - copyright, - copyright, - {add: false} -); +test('benchmark (add off)', processCssBenchmark, copyright, copyright, { + add: false, +}); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-charset/src/index.js b/packages/postcss-normalize-charset/src/index.js index a3db44b47..907aca256 100644 --- a/packages/postcss-normalize-charset/src/index.js +++ b/packages/postcss-normalize-charset/src/index.js @@ -3,33 +3,34 @@ import postcss from 'postcss'; let charset = 'charset'; export default postcss.plugin('postcss-normalize-' + charset, (opts = {}) => { - return css => { - let charsetRule; - let nonAsciiNode; - let nonAscii = /[^\x00-\x7F]/; + return (css) => { + let charsetRule; + let nonAsciiNode; + // eslint-disable-next-line no-control-regex + let nonAscii = /[^\x00-\x7F]/; - css.walk(node => { - if (node.type === 'atrule' && node.name === charset) { - if (!charsetRule) { - charsetRule = node; - } - node.remove(); - } else if (!nonAsciiNode && node.parent === css && nonAscii.test(node)) { - nonAsciiNode = node; - } - }); - - if (nonAsciiNode) { - if (!charsetRule && opts.add !== false) { - charsetRule = postcss.atRule({ - name: charset, - params: '"utf-8"', - }); - } - if (charsetRule) { - charsetRule.source = nonAsciiNode.source; - css.prepend(charsetRule); - } + css.walk((node) => { + if (node.type === 'atrule' && node.name === charset) { + if (!charsetRule) { + charsetRule = node; } - }; + node.remove(); + } else if (!nonAsciiNode && node.parent === css && nonAscii.test(node)) { + nonAsciiNode = node; + } + }); + + if (nonAsciiNode) { + if (!charsetRule && opts.add !== false) { + charsetRule = postcss.atRule({ + name: charset, + params: '"utf-8"', + }); + } + if (charsetRule) { + charsetRule.source = nonAsciiNode.source; + css.prepend(charsetRule); + } + } + }; }); diff --git a/packages/postcss-normalize-display-values/src/__tests__/index.js b/packages/postcss-normalize-display-values/src/__tests__/index.js index 8ec9c0a73..f2b703d40 100644 --- a/packages/postcss-normalize-display-values/src/__tests__/index.js +++ b/packages/postcss-normalize-display-values/src/__tests__/index.js @@ -2,44 +2,43 @@ import test from 'ava'; import mappings from '../lib/map'; import plugin from '..'; import getData from '../../../../util/getData'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); const data = getData(mappings); -test( - 'should pass through "block ruby"', - passthroughCSS, - 'display:block ruby;' -); +test('should pass through "block ruby"', passthroughCSS, 'display:block ruby;'); -test( - 'should pass through single values', - passthroughCSS, - 'display:block;' -); +test('should pass through single values', passthroughCSS, 'display:block;'); -Object.keys(data).forEach(key => { - const actual = data[key]; - const expected = key; +Object.keys(data).forEach((key) => { + const actual = data[key]; + const expected = key; - test( - `display: ${actual} => display: ${expected}`, - processCSS, - `display:${actual}`, - `display:${expected}` - ); + test( + `display: ${actual} => display: ${expected}`, + processCSS, + `display:${actual}`, + `display:${expected}` + ); }); test( - `display: block flow => display: block (uppercase property and values)`, - processCSS, - `DISPLAY:BLOCK FLOW`, - `DISPLAY:block` + `display: block flow => display: block (uppercase property and values)`, + processCSS, + `DISPLAY:BLOCK FLOW`, + `DISPLAY:block` ); +test(`should pass through variables`, passthroughCSS, `display:var(--foo)`); + test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + `should pass through variables`, + passthroughCSS, + `display:var(--foo) var(--bar)` ); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-display-values/src/index.js b/packages/postcss-normalize-display-values/src/index.js index 21f56aa78..eaac663a5 100644 --- a/packages/postcss-normalize-display-values/src/index.js +++ b/packages/postcss-normalize-display-values/src/index.js @@ -1,49 +1,54 @@ -import postcss from "postcss"; -import valueParser from "postcss-value-parser"; -import getMatchFactory from "lerna:cssnano-util-get-match"; -import mappings from "./lib/map"; +import postcss from 'postcss'; +import valueParser from 'postcss-value-parser'; +import getMatchFactory from 'lerna:cssnano-util-get-match'; +import mappings from './lib/map'; -const getMatch = getMatchFactory(mappings); +export default postcss.plugin('postcss-normalize-display-values', () => { + return (css) => { + const cache = {}; -function evenValues (list, index) { - return index % 2 === 0; -} + css.walkDecls(/display/i, (decl) => { + const value = decl.value; -export default postcss.plugin("postcss-normalize-display-values", () => { - return css => { - const cache = {}; + if (cache[value]) { + decl.value = cache[value]; - css.walkDecls(/display/i, decl => { - const value = decl.value; + return; + } - if (cache[value]) { - decl.value = cache[value]; + const { nodes } = valueParser(value); - return; - } + if (nodes.length === 1) { + cache[value] = value; - const {nodes} = valueParser(value); + return; + } - if (nodes.length === 1) { - cache[value] = value; + const values = nodes + .filter((list, index) => { + return index % 2 === 0; + }) + .filter((node) => { + return node.type === 'word'; + }) + .map((n) => n.value.toLowerCase()); - return; - } + if (values.length === 0) { + return; + } - const match = getMatch( - nodes.filter(evenValues).map(n => n.value.toLowerCase()) - ); + const match = getMatchFactory(mappings)(values); - if (!match) { - cache[value] = value; + if (!match) { + cache[value] = value; - return; - } + return; + } - const result = match; + const result = match; - decl.value = result; - cache[value] = result; - }); - }; + decl.value = result; + cache[value] = result; + }); + }; }); diff --git a/packages/postcss-normalize-display-values/src/lib/map.js b/packages/postcss-normalize-display-values/src/lib/map.js index 32bf3750f..c296f3347 100644 --- a/packages/postcss-normalize-display-values/src/lib/map.js +++ b/packages/postcss-normalize-display-values/src/lib/map.js @@ -22,23 +22,23 @@ const tableCaption = 'table-caption'; */ export default [ - [block, [block, flow]], - [flowRoot, [block, flowRoot]], - [inline, [inline, flow]], - [inlineBlock, [inline, flowRoot]], - [runIn, [runIn, flow]], - [listItem, [listItem, block, flow]], - [inline + ' ' + listItem, [inline, flow, listItem]], - [flex, [block, flex]], - [inlineFlex, [inline, flex]], - [grid, [block, grid]], - [inlineGrid, [inline, grid]], - [ruby, [inline, ruby]], - // `block ruby` is same - [table, [block, table]], - [inlineTable, [inline, table]], - [tableCell, [tableCell, flow]], - [tableCaption, [tableCaption, flow]], - [rubyBase, [rubyBase, flow]], - [rubyText, [rubyText, flow]], + [block, [block, flow]], + [flowRoot, [block, flowRoot]], + [inline, [inline, flow]], + [inlineBlock, [inline, flowRoot]], + [runIn, [runIn, flow]], + [listItem, [listItem, block, flow]], + [inline + ' ' + listItem, [inline, flow, listItem]], + [flex, [block, flex]], + [inlineFlex, [inline, flex]], + [grid, [block, grid]], + [inlineGrid, [inline, grid]], + [ruby, [inline, ruby]], + // `block ruby` is same + [table, [block, table]], + [inlineTable, [inline, table]], + [tableCell, [tableCell, flow]], + [tableCaption, [tableCaption, flow]], + [rubyBase, [rubyBase, flow]], + [rubyText, [rubyText, flow]], ]; diff --git a/packages/postcss-normalize-positions/package.json b/packages/postcss-normalize-positions/package.json index 85d2f5263..e691c5229 100644 --- a/packages/postcss-normalize-positions/package.json +++ b/packages/postcss-normalize-positions/package.json @@ -28,7 +28,6 @@ }, "repository": "cssnano/cssnano", "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" diff --git a/packages/postcss-normalize-positions/src/__tests__/index.js b/packages/postcss-normalize-positions/src/__tests__/index.js index a668f2735..547a90f32 100644 --- a/packages/postcss-normalize-positions/src/__tests__/index.js +++ b/packages/postcss-normalize-positions/src/__tests__/index.js @@ -1,200 +1,324 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); const directions = ['top', 'right', 'bottom', 'left', 'center']; const horizontal = { - right: '100%', - left: '0', + right: '100%', + left: '0', }; const vertical = { - bottom: '100%', - top: '0', + bottom: '100%', + top: '0', }; const hkeys = Object.keys(horizontal); const vkeys = Object.keys(vertical); -function suite (t, property, additional = '', tail = '') { - const tests = []; - const push = (...examples) => { - examples.forEach(({fixture, expected}) => { - tests.push( - processCSS( - t, - `${property}${additional}${fixture}${tail}`, - `${property}${additional}${expected}${tail}` - ), - processCSS( - t, - `${property}${additional}${fixture}${tail},${fixture}${tail}`, - `${property}${additional}${expected}${tail},${expected}${tail}` - ), - ); - }); - }; - - if (property === 'background:') { - push({ - message: 'should convert center/50% 50% to /50% 50%', - fixture: '30% center/50% 50%', - expected: '30%/50% 50%', - }); +function suite(t, property, additional = '', tail = '') { + const tests = []; + const push = (...examples) => { + examples.forEach(({ fixture, expected }) => { + tests.push( + processCSS( + t, + `${property}${additional}${fixture}${tail}`, + `${property}${additional}${expected}${tail}` + ), + processCSS( + t, + `${property}${additional}${fixture}${tail},${fixture}${tail}`, + `${property}${additional}${expected}${tail},${expected}${tail}` + ) + ); + }); + }; + + if (property === 'background:') { + push({ + message: + 'should convert center/50% 50% to /50% 50%', + fixture: '30% center/50% 50%', + expected: '30%/50% 50%', + }); + } + push( + { + message: 'should convert center to ', + fixture: `30% center`, + expected: `30%`, + }, + { + message: 'should not convert ', + fixture: `45% 60%`, + expected: `45% 60%`, + } + ); + + directions.forEach((direction) => { + let conversion = horizontal[direction] || direction; + + if (direction === 'center') { + conversion = '50%'; + } + + if ( + direction === 'right' || + direction === 'left' || + direction === 'center' + ) { + push({ + message: `should convert "${direction}" to "${conversion}"`, + fixture: `${direction}`, + expected: `${conversion}`, + }); + } + + push({ + message: `should convert "${direction} center" to "${conversion}"`, + fixture: `${direction} center`, + expected: `${conversion}`, + }); + + if (direction === 'center') { + return; } + push({ - message: 'should convert center to ', - fixture: `30% center`, - expected: `30%`, - }, { - message: 'should not convert ', - fixture: `45% 60%`, - expected: `45% 60%`, + message: `should convert "center ${direction}" to "${conversion}"`, + fixture: `center ${direction}`, + expected: `${conversion}`, }); - directions.forEach(direction => { - let conversion = horizontal[direction] || direction; - if (direction === 'center') { - conversion = '50%'; + + directions + .slice(0, -1) + .filter((d) => { + if ( + d === direction || + (~hkeys.indexOf(d) && ~hkeys.indexOf(direction)) || + (~vkeys.indexOf(d) && ~vkeys.indexOf(direction)) + ) { + return false; } - if (direction === 'right' || direction === 'left' || direction === 'center') { - push({ - message: `should convert "${direction}" to "${conversion}"`, - fixture: `${direction}`, - expected: `${conversion}`, - }); + + return true; + }) + .forEach((other) => { + let result; + + if (~Object.keys(horizontal).indexOf(direction)) { + result = horizontal[direction] + ' ' + vertical[other]; + } else { + result = horizontal[other] + ' ' + vertical[direction]; } - push({ - message: `should convert "${direction} center" to "${conversion}"`, - fixture: `${direction} center`, - expected: `${conversion}`, - }); - if (direction === 'center') { - return; + + push( + { + message: `should convert "${direction} ${other}" to "${result}"`, + fixture: `${direction} ${other}`, + expected: `${result}`, + }, + { + message: `should not convert the three value syntax "${direction} ${other} 60px"`, + fixture: `${direction} ${other} 60px`, + expected: `${direction} ${other} 60px`, + } + ); + + if (property === 'background:') { + push({ + message: `should convert "${direction} ${other}"/50% 50% to "${result}/50% 50%"`, + fixture: `${direction} ${other}/50% 50%`, + expected: `${result}/50% 50%`, + }); } - push({ - message: `should convert "center ${direction}" to "${conversion}"`, - fixture: `center ${direction}`, - expected: `${conversion}`, - }); - directions.slice(0, -1).filter(d => { - if ( - d === direction || - (~hkeys.indexOf(d) && ~hkeys.indexOf(direction)) || - (~vkeys.indexOf(d) && ~vkeys.indexOf(direction)) - ) { - return false; - } - return true; - }).forEach(other => { - let result; - if (~Object.keys(horizontal).indexOf(direction)) { - result = horizontal[direction] + ' ' + vertical[other]; - } else { - result = horizontal[other] + ' ' + vertical[direction]; - } - push({ - message: `should convert "${direction} ${other}" to "${result}"`, - fixture: `${direction} ${other}`, - expected: `${result}`, - }, { - message: `should not convert the three value syntax "${direction} ${other} 60px"`, - fixture: `${direction} ${other} 60px`, - expected: `${direction} ${other} 60px`, - }); - if (property === 'background:') { - push({ - message: `should convert "${direction} ${other}"/50% 50% to "${result}/50% 50%"`, - fixture: `${direction} ${other}/50% 50%`, - expected: `${result}/50% 50%`, - }); - } - }); - }); + }); + }); - return Promise.all(tests); + return Promise.all(tests); } test( - suite, - 'background:', - 'url(http://example.com/testing/test.png) no-repeat ', - ' #fff' + suite, + 'background:', + 'url(http://example.com/testing/test.png) no-repeat ', + ' #fff' +); + +test(suite, 'background-position:'); + +test(suite, 'background:', '#000 url(cat.jpg) '); + +test(suite, 'perspective-origin:'); + +test(suite, '-webkit-perspective-origin:'); + +test( + 'should pass through when there are no position values', + passthroughCSS, + 'background:url(cat.jpg)' +); + +test( + 'should pass through with calc function', + passthroughCSS, + 'background-position: center right calc(0.375em + 0.1875rem)' +); + +test( + 'should pass through with calc function (uppercase)', + passthroughCSS, + 'background-position: center right CALC(0.375em + 0.1875rem)' +); + +test( + 'should pass through with min function', + passthroughCSS, + 'background-position: center right min(10 * (1vw + 1vh) / 2, 12px)' +); + +test( + 'should pass through with max function', + passthroughCSS, + 'background-position: center right max(10 * (1vw + 1vh) / 2, 12px)' +); + +test( + 'should pass through with clamp function', + passthroughCSS, + 'background-position: center right clamp(12px, 10 * (1vw + 1vh) / 2, 100px)' +); + +test( + 'should pass through with var', + passthroughCSS, + 'background-position: var(--foo)' +); + +test( + 'should pass through with var #1', + passthroughCSS, + 'background-position: center var(--foo)' +); + +test( + 'should pass through with var #2', + passthroughCSS, + 'background-position: right 100px var(--test)' +); + +test( + 'should pass through with var #3', + passthroughCSS, + 'background: var(--foo)' +); + +test( + 'should pass through with var #4', + passthroughCSS, + 'background: url("../../media/examples/star.png") center var(--foo);' +); + +test( + 'should pass through with env', + passthroughCSS, + 'background-position: env(--foo)' ); test( - suite, - 'background-position:' + 'should normalize when property in uppercase', + processCSS, + 'BACKGROUND-POSITION: center', + 'BACKGROUND-POSITION: 50%' ); test( - suite, - 'background:', - '#000 url(cat.jpg) ' + 'should normalize when value in uppercase', + processCSS, + 'BACKGROUND-POSITION: CENTER', + 'BACKGROUND-POSITION: 50%' ); test( - suite, - 'perspective-origin:' + 'should normalize when value in uppercase (2)', + processCSS, + 'BACKGROUND-POSITION: CENTER, CENTER', + 'BACKGROUND-POSITION: 50%, 50%' ); test( - suite, - '-webkit-perspective-origin:' + 'should normalize when value in uppercase (3)', + processCSS, + 'BACKGROUND-POSITION: LEFT BOTTOM, LEFT BOTTOM', + 'BACKGROUND-POSITION: 0 100%, 0 100%' ); test( - 'should pass through when there are no position values', - passthroughCSS, - 'background:url(cat.jpg)' + 'should normalize when value in uppercase (4)', + processCSS, + 'BACKGROUND-POSITION: BOTTOM LEFT, BOTTOM LEFT', + 'BACKGROUND-POSITION: 0 100%, 0 100%' ); test( - 'should normalize when property in uppercase', - processCSS, - 'BACKGROUND-POSITION: center', - 'BACKGROUND-POSITION: 50%' + 'should normalize when value in uppercase (5)', + processCSS, + 'BACKGROUND-POSITION: CENTER LEFT, CENTER LEFT', + 'BACKGROUND-POSITION: 0, 0' ); test( - 'should normalize when value in uppercase', - processCSS, - 'BACKGROUND-POSITION: CENTER', - 'BACKGROUND-POSITION: 50%' + 'should normalize with background size', + processCSS, + 'background: url(/media/examples/hand.jpg) center center / 200px 100px', + 'background: url(/media/examples/hand.jpg) 50% / 200px 100px' ); test( - 'should normalize when value in uppercase (2)', - processCSS, - 'BACKGROUND-POSITION: CENTER, CENTER', - 'BACKGROUND-POSITION: 50%, 50%' + 'should normalize with multiple background positions', + processCSS, + 'background: url("/media/examples/lizard.png") center center no-repeat, url("/media/examples/lizard.png") center center no-repeat', + 'background: url("/media/examples/lizard.png") 50% no-repeat, url("/media/examples/lizard.png") 50% no-repeat' ); test( - 'should normalize when value in uppercase (3)', - processCSS, - 'BACKGROUND-POSITION: LEFT BOTTOM, LEFT BOTTOM', - 'BACKGROUND-POSITION: 0 100%, 0 100%' + 'should normalize background position with var and multiple background', + processCSS, + 'background: url("/media/examples/lizard.png") center center no-repeat, url("/media/examples/lizard.png") var(--foo)', + 'background: url("/media/examples/lizard.png") 50% no-repeat, url("/media/examples/lizard.png") var(--foo)' ); +test( + 'should normalize background position with var and multiple background #1', + processCSS, + 'background: url("/media/examples/lizard.png") var(--foo), url("/media/examples/lizard.png") center center no-repeat', + 'background: url("/media/examples/lizard.png") var(--foo), url("/media/examples/lizard.png") 50% no-repeat' +); test( - 'should normalize when value in uppercase (4)', - processCSS, - 'BACKGROUND-POSITION: BOTTOM LEFT, BOTTOM LEFT', - 'BACKGROUND-POSITION: 0 100%, 0 100%' + 'should normalize background position with var and multiple background #2', + processCSS, + 'background: url("/media/examples/lizard.png") center center no-repeat, url("/media/examples/lizard.png") center var(--foo)', + 'background: url("/media/examples/lizard.png") 50% no-repeat, url("/media/examples/lizard.png") center var(--foo)' ); test( - 'should normalize when value in uppercase (5)', - processCSS, - 'BACKGROUND-POSITION: CENTER LEFT, CENTER LEFT', - 'BACKGROUND-POSITION: 0, 0' + 'should normalize background position with var and multiple background #3', + processCSS, + 'background: url("/media/examples/lizard.png") center var(--foo), url("/media/examples/lizard.png") center center no-repeat', + 'background: url("/media/examples/lizard.png") center var(--foo), url("/media/examples/lizard.png") 50% no-repeat' ); test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + 'should handle 0 in background positions', + passthroughCSS, + 'background-position: url("../../media/examples/star.png") 0 0 repeat-x' ); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-positions/src/index.js b/packages/postcss-normalize-positions/src/index.js index 46ed071b1..eded0cb5a 100644 --- a/packages/postcss-normalize-positions/src/index.js +++ b/packages/postcss-normalize-positions/src/index.js @@ -1,6 +1,5 @@ -import {plugin} from 'postcss'; -import valueParser, {unit} from 'postcss-value-parser'; -import getArguments from 'lerna:cssnano-util-get-arguments'; +import { plugin } from 'postcss'; +import valueParser, { unit } from 'postcss-value-parser'; import has from 'has'; const directions = ['top', 'right', 'bottom', 'left', 'center']; @@ -8,126 +7,209 @@ const directions = ['top', 'right', 'bottom', 'left', 'center']; const center = '50%'; const horizontal = { - right: '100%', - left: '0', + right: '100%', + left: '0', }; const vertical = { - bottom: '100%', - top: '0', + bottom: '100%', + top: '0', }; -function transform (value) { - const parsed = valueParser(value); - const args = getArguments(parsed); - const relevant = []; - - args.forEach(arg => { - relevant.push({ - start: null, - end: null, - }); - - arg.forEach((part, index) => { - const isPosition = ~directions.indexOf(part.value.toLowerCase()) || unit(part.value); - const len = relevant.length - 1; - - if (relevant[len].start === null && isPosition) { - relevant[len].start = index; - relevant[len].end = index; - - return; - } - - if (relevant[len].start !== null) { - if (part.type === 'space') { - return; - } else if (isPosition) { - relevant[len].end = index; - - return; - } - - return; - } - }); - }); - - relevant.forEach((range, index) => { - if (range.start === null) { - return; - } +function isCommaNode(node) { + return node.type === 'div' && node.value === ','; +} - const position = args[index].slice(range.start, range.end + 1); +function isVariableFunctionNode(node) { + if (node.type !== 'function') { + return false; + } - if (position.length > 3) { - return; - } + return ['var', 'env'].includes(node.value.toLowerCase()); +} - const firstValue = position[0].value.toLowerCase(); - const secondValue = position[2] && position[2].value - ? position[2].value.toLowerCase() - : null; +function isMathFunctionNode(node) { + if (node.type !== 'function') { + return false; + } - if (position.length === 1 || secondValue === 'center') { - if (secondValue) { - position[2].value = position[1].value = ''; - } + return ['calc', 'min', 'max', 'clamp'].includes(node.value.toLowerCase()); +} - const map = Object.assign({}, horizontal, { - center, - }); +function isNumberNode(node) { + if (node.type !== 'word') { + return false; + } - if (has(map, firstValue)) { - position[0].value = map[firstValue]; - } + const value = parseFloat(node.value); - return; - } + return !isNaN(value); +} - if (firstValue === 'center' && ~directions.indexOf(secondValue)) { - position[0].value = position[1].value = ''; +function isDimensionNode(node) { + if (node.type !== 'word') { + return false; + } - if (has(horizontal, secondValue)) { - position[2].value = horizontal[secondValue]; - } + const parsed = unit(node.value); - return; - } + if (!parsed) { + return false; + } - if (has(horizontal, firstValue) && has(vertical, secondValue)) { - position[0].value = horizontal[firstValue]; - position[2].value = vertical[secondValue]; + return parsed.unit !== ''; +} - return; - } else if (has(vertical, firstValue) && has(horizontal, secondValue)) { - position[0].value = horizontal[secondValue]; - position[2].value = vertical[firstValue]; +function transform(value) { + const parsed = valueParser(value); + const ranges = []; + let backgroundIndex = 0; + let shouldContinue = true; + + parsed.nodes.forEach((node, index) => { + // After comma (`,`) follows next background + if (isCommaNode(node)) { + backgroundIndex += 1; + shouldContinue = true; + + return; + } + + if (!shouldContinue) { + return; + } + + // After separator (`/`) follows `background-size` values + // Avoid their + if (node.type === 'div' && node.value === '/') { + shouldContinue = false; + + return; + } + + if (!ranges[backgroundIndex]) { + ranges[backgroundIndex] = { + start: null, + end: null, + }; + } + + // Do not try to be processed `var and `env` function inside background + if (isVariableFunctionNode(node)) { + shouldContinue = false; + ranges[backgroundIndex].start = null; + ranges[backgroundIndex].end = null; + + return; + } + + const isPosition = + (node.type === 'word' && directions.includes(node.value.toLowerCase())) || + isDimensionNode(node) || + isNumberNode(node) || + isMathFunctionNode(node); + + if (ranges[backgroundIndex].start === null && isPosition) { + ranges[backgroundIndex].start = index; + ranges[backgroundIndex].end = index; + + return; + } + + if (ranges[backgroundIndex].start !== null) { + if (node.type === 'space') { + return; + } else if (isPosition) { + ranges[backgroundIndex].end = index; + + return; + } + + return; + } + }); + + ranges.forEach((range) => { + if (range.start === null) { + return; + } + + const nodes = parsed.nodes.slice(range.start, range.end + 1); + + if (nodes.length > 3) { + return; + } + + const firstNode = nodes[0].value.toLowerCase(); + const secondNode = + nodes[2] && nodes[2].value ? nodes[2].value.toLowerCase() : null; + + if (nodes.length === 1 || secondNode === 'center') { + if (secondNode) { + nodes[2].value = nodes[1].value = ''; + } + + const map = Object.assign({}, horizontal, { + center, + }); + + if (has(map, firstNode)) { + nodes[0].value = map[firstNode]; + } + + return; + } + + if (firstNode === 'center' && directions.includes(secondNode)) { + nodes[0].value = nodes[1].value = ''; + + if (has(horizontal, secondNode)) { + nodes[2].value = horizontal[secondNode]; + } + + return; + } - return; - } - }); + if (has(horizontal, firstNode) && has(vertical, secondNode)) { + nodes[0].value = horizontal[firstNode]; + nodes[2].value = vertical[secondNode]; + + return; + } else if (has(vertical, firstNode) && has(horizontal, secondNode)) { + nodes[0].value = horizontal[secondNode]; + nodes[2].value = vertical[firstNode]; + + return; + } + }); - return parsed.toString(); + return parsed.toString(); } export default plugin('postcss-normalize-positions', () => { - return css => { - const cache = {}; + return (css) => { + const cache = {}; - css.walkDecls(/^(background(-position)?|(-webkit-)?perspective-origin)$/i, (decl) => { - const value = decl.value; + css.walkDecls( + /^(background(-position)?|(-\w+-)?perspective-origin)$/i, + (decl) => { + const value = decl.value; - if (cache[value]) { - decl.value = cache[value]; + if (!value) { + return; + } + + if (cache[value]) { + decl.value = cache[value]; - return; - } + return; + } - const result = transform(value); + const result = transform(value); - decl.value = result; - cache[value] = result; - }); - }; + decl.value = result; + cache[value] = result; + } + ); + }; }); diff --git a/packages/postcss-normalize-positions/yarn.lock b/packages/postcss-normalize-positions/yarn.lock index 1cdb0b741..8f34fbdbf 100644 --- a/packages/postcss-normalize-positions/yarn.lock +++ b/packages/postcss-normalize-positions/yarn.lock @@ -5,28 +5,34 @@ abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" @@ -34,10 +40,12 @@ anymatch@^1.3.0: aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -45,24 +53,54 @@ are-we-there-yet@~1.1.2: arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== babel-cli@^6.0.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + integrity sha1-UCq1SHTX24itALiHoGODzgPQAvE= dependencies: babel-core "^6.26.0" babel-polyfill "^6.26.0" @@ -84,6 +122,7 @@ babel-cli@^6.0.0: babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -92,6 +131,7 @@ babel-code-frame@^6.26.0: babel-core@^6.26.0: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -116,6 +156,7 @@ babel-core@^6.26.0: babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -129,6 +170,7 @@ babel-generator@^6.26.0: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -136,12 +178,14 @@ babel-helpers@^6.24.1: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= dependencies: babel-runtime "^6.22.0" babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" @@ -150,6 +194,7 @@ babel-polyfill@^6.26.0: babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -162,6 +207,7 @@ babel-register@^6.26.0: babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -169,6 +215,7 @@ babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -179,6 +226,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -193,6 +241,7 @@ babel-traverse@^6.26.0: babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -202,18 +251,35 @@ babel-types@^6.26.0: babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -221,14 +287,47 @@ brace-expansion@^1.1.7: braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -236,9 +335,10 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -247,6 +347,7 @@ chalk@^2.4.1: chokidar@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -259,51 +360,92 @@ chokidar@^1.6.1: optionalDependencies: fsevents "^1.0.0" -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" color-convert@^1.9.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "1.1.1" + color-name "1.1.3" -color-name@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= commander@^2.11.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= convert-source-map@^1.5.0, convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^2.4.0, core-js@^2.5.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cross-env@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" + integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== dependencies: cross-spawn "^6.0.5" is-windows "^1.0.0" @@ -311,6 +453,7 @@ cross-env@^5.0.0: cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -318,63 +461,151 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -debug@^2.1.2, debug@^2.6.8, debug@^2.6.9: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= dependencies: repeating "^2.0.0" detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -382,44 +613,69 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -for-in@^1.0.1: +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: minipass "^2.2.1" fs-readdir-recursive@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" + nan "^2.12.1" + node-pre-gyp "^0.12.0" function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -430,9 +686,15 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -440,12 +702,14 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" -glob@^7.0.5, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -457,53 +721,94 @@ glob@^7.0.5, glob@^7.1.2: globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== -graceful-fs@^4.1.2, graceful-fs@^4.1.4: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@^4.1.11, graceful-fs@^4.1.4: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" has@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" iconv-lite@^0.4.4: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: minimatch "^3.0.4" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -511,142 +816,273 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= -is-windows@^1.0.0: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" -js-tokens@^3.0.0, js-tokens@^3.0.2: +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= -kind-of@^3.0.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" -kind-of@^6.0.0: +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== lodash@^4.17.4: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: - js-tokens "^3.0.0" + object-visit "^1.0.0" math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -662,70 +1098,130 @@ micromatch@^2.1.5: parse-glob "^3.0.4" regex-cache "^0.4.2" -minimatch@^3.0.2, minimatch@^3.0.4: +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== dependencies: minipass "^2.2.1" +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -needle@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" - dependencies: - debug "^2.1.2" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +nan@^2.12.1: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" + integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg== + dependencies: + debug "^4.1.0" iconv-lite "^0.4.4" sax "^1.2.4" nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-pre-gyp@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" - needle "^2.2.0" + needle "^2.2.1" nopt "^4.0.1" npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" tar "^4" @@ -733,6 +1229,7 @@ node-pre-gyp@^0.10.0: nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" @@ -740,16 +1237,19 @@ nopt@^4.0.1: normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -757,6 +1257,7 @@ npm-packlist@^1.1.6: npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -766,35 +1267,65 @@ npmlog@^4.0.2: number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -802,6 +1333,7 @@ osenv@^0.1.4: output-file-sync@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= dependencies: graceful-fs "^4.1.4" mkdirp "^0.5.1" @@ -810,55 +1342,75 @@ output-file-sync@^1.1.2: parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-value-parser@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== postcss@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.2.tgz#7b5a109de356804e27f95a960bef0e4d5bc9bb18" + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== dependencies: - chalk "^2.4.1" + chalk "^2.4.2" source-map "^0.6.1" - supports-color "^5.4.0" + supports-color "^6.1.0" preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== randomatic@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: is-number "^4.0.0" kind-of "^6.0.0" math-random "^1.0.1" -rc@^1.1.7: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -868,6 +1420,7 @@ rc@^1.1.7: readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -878,111 +1431,234 @@ readable-stream@^2.0.2, readable-stream@^2.0.6: util-deprecate "~1.0.1" readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - glob "^7.0.5" + glob "^7.1.3" safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -991,6 +1667,7 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2": version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -998,43 +1675,57 @@ string-width@^1.0.1: string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" tar@^4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== dependencies: - chownr "^1.0.1" + chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" + minipass "^2.3.4" + minizlib "^1.1.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" yallist "^3.0.2" @@ -1042,41 +1733,103 @@ tar@^4: to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= dependencies: user-home "^1.1.1" which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: string-width "^1.0.2 || 2" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== diff --git a/packages/postcss-normalize-repeat-style/src/__tests__/index.js b/packages/postcss-normalize-repeat-style/src/__tests__/index.js index fcdf829b0..bba260d31 100644 --- a/packages/postcss-normalize-repeat-style/src/__tests__/index.js +++ b/packages/postcss-normalize-repeat-style/src/__tests__/index.js @@ -2,79 +2,73 @@ import test from 'ava'; import mappings from '../lib/map'; import plugin from '..'; import getData from '../../../../util/getData'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); const data = getData(mappings); test( - 'should pass through two value syntax', - passthroughCSS, - 'background:space round' + 'should pass through two value syntax', + passthroughCSS, + 'background:space round' ); -function suite (t, fixture, expected) { - return Promise.all([ - processCSS( - t, - `background:#000 url(cat.jpg) ${fixture} 50%`, - `background:#000 url(cat.jpg) ${expected} 50%` - ), - processCSS( - t, - `background-repeat:${fixture}`, - `background-repeat:${expected}` - ), - processCSS( - t, - `background-repeat:#000 url(cat.jpg) ${fixture} 50%,#000 url(cat.jpg) ${fixture} 50%`, - `background-repeat:#000 url(cat.jpg) ${expected} 50%,#000 url(cat.jpg) ${expected} 50%` - ), - processCSS( - t, - `background-repeat:${fixture},${fixture}`, - `background-repeat:${expected},${expected}` - ), - ]); +function suite(t, fixture, expected) { + return Promise.all([ + processCSS( + t, + `background:#000 url(cat.jpg) ${fixture} 50%`, + `background:#000 url(cat.jpg) ${expected} 50%` + ), + processCSS( + t, + `background-repeat:${fixture}`, + `background-repeat:${expected}` + ), + processCSS( + t, + `background-repeat:#000 url(cat.jpg) ${fixture} 50%,#000 url(cat.jpg) ${fixture} 50%`, + `background-repeat:#000 url(cat.jpg) ${expected} 50%,#000 url(cat.jpg) ${expected} 50%` + ), + processCSS( + t, + `background-repeat:${fixture},${fixture}`, + `background-repeat:${expected},${expected}` + ), + ]); } -Object.keys(data).forEach(conversion => { - const fixture = data[conversion]; - test( - suite, - fixture, - conversion - ); +Object.keys(data).forEach((conversion) => { + const fixture = data[conversion]; + test(suite, fixture, conversion); }); - test( - 'should normalize uppercase property and value', - processCSS, - 'BACKGROUND:#000 url(cat.jpg) REPEAT NO-REPEAT 50%', - 'BACKGROUND:#000 url(cat.jpg) repeat-x 50%' + 'should normalize uppercase property and value', + processCSS, + 'BACKGROUND:#000 url(cat.jpg) REPEAT NO-REPEAT 50%', + 'BACKGROUND:#000 url(cat.jpg) repeat-x 50%' ); test( - 'should pass through when there are no repeat values', - passthroughCSS, - 'background:url(cat.jpg)' + 'should pass through when there are no repeat values', + passthroughCSS, + 'background:url(cat.jpg)' ); test( - 'should pass through when there are no repeat values (2)', - passthroughCSS, - 'background:#000 url(cat.jpg)' + 'should pass through when there are no repeat values (2)', + passthroughCSS, + 'background:#000 url(cat.jpg)' ); test( - 'should pass through the single value syntax', - passthroughCSS, - 'background:#000 url(cat.jpg) repeat' + 'should pass through the single value syntax', + passthroughCSS, + 'background:#000 url(cat.jpg) repeat' ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-repeat-style/src/index.js b/packages/postcss-normalize-repeat-style/src/index.js index f2b967663..e507c862a 100644 --- a/packages/postcss-normalize-repeat-style/src/index.js +++ b/packages/postcss-normalize-repeat-style/src/index.js @@ -4,8 +4,8 @@ import getArguments from 'lerna:cssnano-util-get-arguments'; import getMatchFactory from 'lerna:cssnano-util-get-match'; import mappings from './lib/map'; -function evenValues (list, index) { - return index % 2 === 0; +function evenValues(list, index) { + return index % 2 === 0; } const repeatKeywords = mappings.map((mapping) => mapping[0]); @@ -13,88 +13,86 @@ const repeatKeywords = mappings.map((mapping) => mapping[0]); const getMatch = getMatchFactory(mappings); export default postcss.plugin('postcss-normalize-repeat-style', () => { - return css => { - const cache = {}; + return (css) => { + const cache = {}; - css.walkDecls(/background(-repeat)?|(-webkit-)?mask-repeat/i, (decl) => { - const value = decl.value; + css.walkDecls(/background(-repeat)?|(-webkit-)?mask-repeat/i, (decl) => { + const value = decl.value; - if (cache[value]) { - decl.value = cache[value]; + if (cache[value]) { + decl.value = cache[value]; - return; - } + return; + } - const parsed = valueParser(value); + const parsed = valueParser(value); - if (parsed.nodes.length === 1) { - cache[value] = value; + if (parsed.nodes.length === 1) { + cache[value] = value; - return; - } + return; + } - const args = getArguments(parsed); - const relevant = []; + const args = getArguments(parsed); + const relevant = []; - args.forEach(arg => { - relevant.push({ - start: null, - end: null, - }); + args.forEach((arg) => { + relevant.push({ + start: null, + end: null, + }); - arg.forEach((part, index) => { - const isRepeat = ~repeatKeywords.indexOf( - part.value.toLowerCase() - ); - const len = relevant.length - 1; + arg.forEach((part, index) => { + const isRepeat = ~repeatKeywords.indexOf(part.value.toLowerCase()); + const len = relevant.length - 1; - if (relevant[len].start === null && isRepeat) { - relevant[len].start = index; - relevant[len].end = index; + if (relevant[len].start === null && isRepeat) { + relevant[len].start = index; + relevant[len].end = index; - return; - } + return; + } - if (relevant[len].start !== null) { - if (part.type === 'space') { - return; - } else if (isRepeat) { - relevant[len].end = index; + if (relevant[len].start !== null) { + if (part.type === 'space') { + return; + } else if (isRepeat) { + relevant[len].end = index; - return; - } + return; + } - return; - } - }); - }); + return; + } + }); + }); - relevant.forEach((range, index) => { - if (range.start === null) { - return; - } + relevant.forEach((range, index) => { + if (range.start === null) { + return; + } - const val = args[index].slice(range.start, range.end + 1); + const val = args[index].slice(range.start, range.end + 1); - if (val.length !== 3) { - return; - } + if (val.length !== 3) { + return; + } - const match = getMatch( - val.filter(evenValues).map(n => n.value.toLowerCase()) - ); + const match = getMatch( + val.filter(evenValues).map((n) => n.value.toLowerCase()) + ); - if (match) { - args[index][range.start].value = match; - args[index][range.start + 1].value = ''; - args[index][range.end].value = ''; - } - }); + if (match) { + args[index][range.start].value = match; + args[index][range.start + 1].value = ''; + args[index][range.end].value = ''; + } + }); - const result = parsed.toString(); + const result = parsed.toString(); - decl.value = result; - cache[value] = result; - }); - }; + decl.value = result; + cache[value] = result; + }); + }; }); diff --git a/packages/postcss-normalize-repeat-style/src/lib/map.js b/packages/postcss-normalize-repeat-style/src/lib/map.js index 2190319b6..87a242d40 100644 --- a/packages/postcss-normalize-repeat-style/src/lib/map.js +++ b/packages/postcss-normalize-repeat-style/src/lib/map.js @@ -1,8 +1,8 @@ export default [ - ['repeat-x', ['repeat', 'no-repeat']], - ['repeat-y', ['no-repeat', 'repeat']], - ['repeat', ['repeat', 'repeat']], - ['space', ['space', 'space']], - ['round', ['round', 'round']], - ['no-repeat', ['no-repeat', 'no-repeat']], + ['repeat-x', ['repeat', 'no-repeat']], + ['repeat-y', ['no-repeat', 'repeat']], + ['repeat', ['repeat', 'repeat']], + ['space', ['space', 'space']], + ['round', ['round', 'round']], + ['no-repeat', ['no-repeat', 'no-repeat']], ]; diff --git a/packages/postcss-normalize-string/src/__tests__/index.js b/packages/postcss-normalize-string/src/__tests__/index.js index 2d658cf06..c4f1ab53a 100644 --- a/packages/postcss-normalize-string/src/__tests__/index.js +++ b/packages/postcss-normalize-string/src/__tests__/index.js @@ -1,87 +1,90 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); test( - 'should prefer double quotes by default', - passthroughCSS, - `p:after{content:""}` + 'should prefer double quotes by default', + passthroughCSS, + `p:after{content:""}` ); test( - 'should transform single quotes to double quotes by default', - processCSS, - `p:after{content:''}`, - `p:after{content:""}` + 'should transform single quotes to double quotes by default', + processCSS, + `p:after{content:''}`, + `p:after{content:""}` ); test( - 'should transform double quotes to single quotes via an option', - processCSS, - `p:after{content:""}`, - `p:after{content:''}`, - {preferredQuote: 'single'} + 'should transform double quotes to single quotes via an option', + processCSS, + `p:after{content:""}`, + `p:after{content:''}`, + { preferredQuote: 'single' } ); test( - 'should keep single quotes inside a double quoted string intact', - passthroughCSS, - `p:after{content:"'string' is intact"}` + 'should keep single quotes inside a double quoted string intact', + passthroughCSS, + `p:after{content:"'string' is intact"}` ); test( - 'should keep double quotes inside a single quoted string intact', - passthroughCSS, - `p:after{content:'"string" is intact'}` + 'should keep double quotes inside a single quoted string intact', + passthroughCSS, + `p:after{content:'"string" is intact'}` ); test( - 'should transform escaped single quotation marks if possible', - processCSS, - `p:after{content:'\\'string\\' is intact'}`, - `p:after{content:"'string' is intact"}` + 'should transform escaped single quotation marks if possible', + processCSS, + `p:after{content:'\\'string\\' is intact'}`, + `p:after{content:"'string' is intact"}` ); test( - 'should transform escaped double quotation marks if possible', - processCSS, - `p:after{content:"\\"string\\" is intact"}`, - `p:after{content:'"string" is intact'}` + 'should transform escaped double quotation marks if possible', + processCSS, + `p:after{content:"\\"string\\" is intact"}`, + `p:after{content:'"string" is intact'}` ); test( - 'should not transform quotation marks when mixed', - passthroughCSS, - `p:after{content:"\\"string\\" is 'intact'"}` + 'should not transform quotation marks when mixed', + passthroughCSS, + `p:after{content:"\\"string\\" is 'intact'"}` ); test( - 'should not transform quotation marks when mixed (2)', - passthroughCSS, - `p:after{content:'"string" is \\'intact\\''}` + 'should not transform quotation marks when mixed (2)', + passthroughCSS, + `p:after{content:'"string" is \\'intact\\''}` ); test( - 'should transform escaped single quotation marks when mixed', - processCSS, - `p:after{content:'\\'string\\' is \\"intact\\"'}`, - `p:after{content:'\\'string\\' is "intact"'}` + 'should transform escaped single quotation marks when mixed', + processCSS, + `p:after{content:'\\'string\\' is \\"intact\\"'}`, + `p:after{content:'\\'string\\' is "intact"'}` ); test( - 'should transform escaped double quotation marks when mixed', - processCSS, - `p:after{content:"\\'string\\' is \\"intact\\""}`, - `p:after{content:"'string' is \\"intact\\""}` + 'should transform escaped double quotation marks when mixed', + processCSS, + `p:after{content:"\\'string\\' is \\"intact\\""}`, + `p:after{content:"'string' is \\"intact\\""}` ); test( - 'should work with the attr function', - processCSS, - `p:after{content:'(' attr(href) ')'}`, - `p:after{content:"(" attr(href) ")"}` + 'should work with the attr function', + processCSS, + `p:after{content:'(' attr(href) ')'}`, + `p:after{content:"(" attr(href) ")"}` ); /* @@ -90,138 +93,134 @@ test( */ test( - 'should join multiple line strings', - processCSS, - `p:after{content:" > this is some really\\ + 'should join multiple line strings', + processCSS, + `p:after{content:" > this is some really\\ long text which is broken\\ over several lines."}`, - `p:after{content:" > this is some really long text which is broken over several lines."}` + `p:after{content:" > this is some really long text which is broken over several lines."}` ); test( - 'should work with quotes', - processCSS, - `q{quotes:'«' "»"}`, - `q{quotes:"«" "»"}` + 'should work with quotes', + processCSS, + `q{quotes:'«' "»"}`, + `q{quotes:"«" "»"}` ); test( - 'should work with language overrides', - processCSS, - `p{font-language-override:'DAN'}`, - `p{font-language-override:"DAN"}` + 'should work with language overrides', + processCSS, + `p{font-language-override:'DAN'}`, + `p{font-language-override:"DAN"}` ); test( - 'should work with css grids', - processCSS, - `p{grid-template:'a a a' "b b b"}`, - `p{grid-template:"a a a" "b b b"}` + 'should work with css grids', + processCSS, + `p{grid-template:'a a a' "b b b"}`, + `p{grid-template:"a a a" "b b b"}` ); test( - 'should work with css grids (2)', - processCSS, - `p{grid-template-areas:'a a a' "b b b"}`, - `p{grid-template-areas:"a a a" "b b b"}` + 'should work with css grids (2)', + processCSS, + `p{grid-template-areas:'a a a' "b b b"}`, + `p{grid-template-areas:"a a a" "b b b"}` ); test( - 'should work with list styles', - processCSS, - `ul{list-style-type:'-'}`, - `ul{list-style-type:"-"}` + 'should work with list styles', + processCSS, + `ul{list-style-type:'-'}`, + `ul{list-style-type:"-"}` ); test( - 'should work with text emphasis styles', - processCSS, - `p{text-emphasis-style:'\\25B2'}`, - `p{text-emphasis-style:"\\25B2"}` + 'should work with text emphasis styles', + processCSS, + `p{text-emphasis-style:'\\25B2'}`, + `p{text-emphasis-style:"\\25B2"}` ); test( - 'should work with text overflow', - processCSS, - `p{text-overflow:'…' '…'}`, - `p{text-overflow:"…" "…"}` + 'should work with text overflow', + processCSS, + `p{text-overflow:'…' '…'}`, + `p{text-overflow:"…" "…"}` ); test( - 'should work with font', - processCSS, - `p{font:1em/1.5 'slab serif'}`, - `p{font:1em/1.5 "slab serif"}` + 'should work with font', + processCSS, + `p{font:1em/1.5 'slab serif'}`, + `p{font:1em/1.5 "slab serif"}` ); test( - 'should work with font family', - processCSS, - `p{font-family:'slab serif'}`, - `p{font-family:"slab serif"}` + 'should work with font family', + processCSS, + `p{font-family:'slab serif'}`, + `p{font-family:"slab serif"}` ); test( - 'should work with font feature settings', - processCSS, - `p{font-feature-settings:'frac'}`, - `p{font-feature-settings:"frac"}` + 'should work with font feature settings', + processCSS, + `p{font-feature-settings:'frac'}`, + `p{font-feature-settings:"frac"}` ); test( - 'should work with web fonts', - processCSS, - `@font-face{font-family:'slab serif';src:local('slab serif'),url(slab.ttf) format('truetype')}`, - `@font-face{font-family:"slab serif";src:local("slab serif"),url(slab.ttf) format("truetype")}`, - // {discardUnused: false} + 'should work with web fonts', + processCSS, + `@font-face{font-family:'slab serif';src:local('slab serif'),url(slab.ttf) format('truetype')}`, + `@font-face{font-family:"slab serif";src:local("slab serif"),url(slab.ttf) format("truetype")}` + // {discardUnused: false} ); test( - 'should remove unnecessary backslashes in urls', - processCSS, - `p{background:url('http://example.com/foo\\\'bar.jpg')}`, - `p{background:url("http://example.com/foo\'bar.jpg")}` - // {normalizeUrl: false} + 'should remove unnecessary backslashes in urls', + processCSS, + `p{background:url('http://example.com/foo\\'bar.jpg')}`, + `p{background:url("http://example.com/foo'bar.jpg")}` + // {normalizeUrl: false} ); test( - 'should remove unnecessary backslashes in urls', - processCSS, - `p{background:url("http://example.com/foo\\\"bar.jpg")}`, - `p{background:url('http://example.com/foo\"bar.jpg')}` - // {normalizeUrl: false} + 'should remove unnecessary backslashes in urls', + processCSS, + `p{background:url("http://example.com/foo\\"bar.jpg")}`, + `p{background:url('http://example.com/foo"bar.jpg')}` + // {normalizeUrl: false} ); test( - 'should work in attribute selectors', - processCSS, - `[rel='external link']{color:#00f}`, - `[rel="external link"]{color:#00f}`, + 'should work in attribute selectors', + processCSS, + `[rel='external link']{color:#00f}`, + `[rel="external link"]{color:#00f}` ); test( - 'should change strings (1)', - processCSS, - `[a="escaped quotes \\" h1, h1, h1 \\" h1, h1, h1"]{color:#00f}`, - `[a='escaped quotes " h1, h1, h1 " h1, h1, h1']{color:#00f}`, + 'should change strings (1)', + processCSS, + `[a="escaped quotes \\" h1, h1, h1 \\" h1, h1, h1"]{color:#00f}`, + `[a='escaped quotes " h1, h1, h1 " h1, h1, h1']{color:#00f}` ); test( - 'should change strings (2)', - processCSS, - `[a='escaped quotes \\' h1, h1, h1 \\' h1, h1, h1']{color:#00f}`, - `[a="escaped quotes ' h1, h1, h1 ' h1, h1, h1"]{color:#00f}`, + 'should change strings (2)', + processCSS, + `[a='escaped quotes \\' h1, h1, h1 \\' h1, h1, h1']{color:#00f}`, + `[a="escaped quotes ' h1, h1, h1 ' h1, h1, h1"]{color:#00f}` ); test( - 'should work for @import', - processCSS, - `@import url('foo.css')`, - `@import url("foo.css")` + 'should work for @import', + processCSS, + `@import url('foo.css')`, + `@import url("foo.css")` ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-string/src/index.js b/packages/postcss-normalize-string/src/index.js index 70eeb4b50..e539c3b8b 100644 --- a/packages/postcss-normalize-string/src/index.js +++ b/packages/postcss-normalize-string/src/index.js @@ -6,14 +6,14 @@ import has from 'has'; * Constants (parser usage) */ -const SINGLE_QUOTE = '\''.charCodeAt(0); +const SINGLE_QUOTE = "'".charCodeAt(0); const DOUBLE_QUOTE = '"'.charCodeAt(0); -const BACKSLASH = '\\'.charCodeAt(0); -const NEWLINE = '\n'.charCodeAt(0); -const SPACE = ' '.charCodeAt(0); -const FEED = '\f'.charCodeAt(0); -const TAB = '\t'.charCodeAt(0); -const CR = '\r'.charCodeAt(0); +const BACKSLASH = '\\'.charCodeAt(0); +const NEWLINE = '\n'.charCodeAt(0); +const SPACE = ' '.charCodeAt(0); +const FEED = '\f'.charCodeAt(0); +const TAB = '\t'.charCodeAt(0); +const CR = '\r'.charCodeAt(0); const WORD_END = /[ \n\t\r\f'"\\]/g; @@ -41,215 +41,229 @@ const L_NEWLINE = `\\\n`; * Parser nodes */ -const T_ESCAPED_SINGLE_QUOTE = {type: C_ESCAPED_SINGLE_QUOTE, value: `\\'`}; -const T_ESCAPED_DOUBLE_QUOTE = {type: C_ESCAPED_DOUBLE_QUOTE, value: `\\"`}; -const T_SINGLE_QUOTE = {type: C_SINGLE_QUOTE, value: L_SINGLE_QUOTE}; -const T_DOUBLE_QUOTE = {type: C_DOUBLE_QUOTE, value: L_DOUBLE_QUOTE}; -const T_NEWLINE = {type: C_NEWLINE, value: L_NEWLINE}; - -function stringify (ast) { - return ast.nodes.reduce((str, {value}) => { - // Collapse multiple line strings automatically - if (value === L_NEWLINE) { - return str; - } +const T_ESCAPED_SINGLE_QUOTE = { type: C_ESCAPED_SINGLE_QUOTE, value: `\\'` }; +const T_ESCAPED_DOUBLE_QUOTE = { type: C_ESCAPED_DOUBLE_QUOTE, value: `\\"` }; +const T_SINGLE_QUOTE = { type: C_SINGLE_QUOTE, value: L_SINGLE_QUOTE }; +const T_DOUBLE_QUOTE = { type: C_DOUBLE_QUOTE, value: L_DOUBLE_QUOTE }; +const T_NEWLINE = { type: C_NEWLINE, value: L_NEWLINE }; + +function stringify(ast) { + return ast.nodes.reduce((str, { value }) => { + // Collapse multiple line strings automatically + if (value === L_NEWLINE) { + return str; + } - return str + value; - }, ''); + return str + value; + }, ''); } -function parse (str) { - let code, next, value; - let pos = 0; - let len = str.length; - - const ast = { - nodes: [], - types: { - escapedSingleQuote: 0, - escapedDoubleQuote: 0, - singleQuote: 0, - doubleQuote: 0, - }, - quotes: false, - }; - - while (pos < len) { - code = str.charCodeAt(pos); - - switch (code) { - case SPACE: - case TAB: - case CR: - case FEED: - next = pos; - - do { - next += 1; - code = str.charCodeAt(next); - } while (code === SPACE || - code === NEWLINE || - code === TAB || - code === CR || - code === FEED); - - ast.nodes.push({ - type: 'space', - value: str.slice(pos, next), - }); - pos = next - 1; - break; - case SINGLE_QUOTE: - ast.nodes.push(T_SINGLE_QUOTE); - ast.types[C_SINGLE_QUOTE]++; - ast.quotes = true; - break; - case DOUBLE_QUOTE: - ast.nodes.push(T_DOUBLE_QUOTE); - ast.types[C_DOUBLE_QUOTE]++; - ast.quotes = true; - break; - case BACKSLASH: - next = pos + 1; - - if (str.charCodeAt(next) === SINGLE_QUOTE) { - ast.nodes.push(T_ESCAPED_SINGLE_QUOTE); - ast.types[C_ESCAPED_SINGLE_QUOTE]++; - ast.quotes = true; - pos = next; - break; - } else if (str.charCodeAt(next) === DOUBLE_QUOTE) { - ast.nodes.push(T_ESCAPED_DOUBLE_QUOTE); - ast.types[C_ESCAPED_DOUBLE_QUOTE]++; - ast.quotes = true; - pos = next; - break; - } else if (str.charCodeAt(next) === NEWLINE) { - ast.nodes.push(T_NEWLINE); - pos = next; - break; - } - /* - * We need to fall through here to handle the token as - * a whole word. The missing 'break' is intentional. - */ - default: - WORD_END.lastIndex = pos + 1; - WORD_END.test(str); - - if (WORD_END.lastIndex === 0) { - next = len - 1; - } else { - next = WORD_END.lastIndex - 2; - } - - value = str.slice(pos, next + 1); - - ast.nodes.push({ - type: C_STRING, - value, - }); - - pos = next; +function parse(str) { + let code, next, value; + let pos = 0; + let len = str.length; + + const ast = { + nodes: [], + types: { + escapedSingleQuote: 0, + escapedDoubleQuote: 0, + singleQuote: 0, + doubleQuote: 0, + }, + quotes: false, + }; + + while (pos < len) { + code = str.charCodeAt(pos); + + switch (code) { + case SPACE: + case TAB: + case CR: + case FEED: + next = pos; + + do { + next += 1; + code = str.charCodeAt(next); + } while ( + code === SPACE || + code === NEWLINE || + code === TAB || + code === CR || + code === FEED + ); + + ast.nodes.push({ + type: 'space', + value: str.slice(pos, next), + }); + pos = next - 1; + break; + case SINGLE_QUOTE: + ast.nodes.push(T_SINGLE_QUOTE); + ast.types[C_SINGLE_QUOTE]++; + ast.quotes = true; + break; + case DOUBLE_QUOTE: + ast.nodes.push(T_DOUBLE_QUOTE); + ast.types[C_DOUBLE_QUOTE]++; + ast.quotes = true; + break; + case BACKSLASH: + next = pos + 1; + + if (str.charCodeAt(next) === SINGLE_QUOTE) { + ast.nodes.push(T_ESCAPED_SINGLE_QUOTE); + ast.types[C_ESCAPED_SINGLE_QUOTE]++; + ast.quotes = true; + pos = next; + break; + } else if (str.charCodeAt(next) === DOUBLE_QUOTE) { + ast.nodes.push(T_ESCAPED_DOUBLE_QUOTE); + ast.types[C_ESCAPED_DOUBLE_QUOTE]++; + ast.quotes = true; + pos = next; + break; + } else if (str.charCodeAt(next) === NEWLINE) { + ast.nodes.push(T_NEWLINE); + pos = next; + break; + } + /* + * We need to fall through here to handle the token as + * a whole word. The missing 'break' is intentional. + */ + default: + WORD_END.lastIndex = pos + 1; + WORD_END.test(str); + + if (WORD_END.lastIndex === 0) { + next = len - 1; + } else { + next = WORD_END.lastIndex - 2; } - pos ++; - } - return ast; -} + value = str.slice(pos, next + 1); -function changeWrappingQuotes (node, ast) { - const {types} = ast; + ast.nodes.push({ + type: C_STRING, + value, + }); - if (types[C_SINGLE_QUOTE] || types[C_DOUBLE_QUOTE]) { - return; + pos = next; } + pos++; + } + + return ast; +} +function changeWrappingQuotes(node, ast) { + const { types } = ast; + + if (types[C_SINGLE_QUOTE] || types[C_DOUBLE_QUOTE]) { + return; + } + + if ( + node.quote === L_SINGLE_QUOTE && + types[C_ESCAPED_SINGLE_QUOTE] > 0 && + !types[C_ESCAPED_DOUBLE_QUOTE] + ) { + node.quote = L_DOUBLE_QUOTE; + } + + if ( + node.quote === L_DOUBLE_QUOTE && + types[C_ESCAPED_DOUBLE_QUOTE] > 0 && + !types[C_ESCAPED_SINGLE_QUOTE] + ) { + node.quote = L_SINGLE_QUOTE; + } + + ast.nodes = ast.nodes.reduce((newAst, child) => { if ( - node.quote === L_SINGLE_QUOTE && - types[C_ESCAPED_SINGLE_QUOTE] > 0 && - !types[C_ESCAPED_DOUBLE_QUOTE] + child.type === C_ESCAPED_DOUBLE_QUOTE && + node.quote === L_SINGLE_QUOTE ) { - node.quote = L_DOUBLE_QUOTE; + return [...newAst, T_DOUBLE_QUOTE]; } if ( - node.quote === L_DOUBLE_QUOTE && - types[C_ESCAPED_DOUBLE_QUOTE] > 0 && - !types[C_ESCAPED_SINGLE_QUOTE] + child.type === C_ESCAPED_SINGLE_QUOTE && + node.quote === L_DOUBLE_QUOTE ) { - node.quote = L_SINGLE_QUOTE; + return [...newAst, T_SINGLE_QUOTE]; } - ast.nodes = ast.nodes.reduce((newAst, child) => { - if (child.type === C_ESCAPED_DOUBLE_QUOTE && node.quote === L_SINGLE_QUOTE) { - return [...newAst, T_DOUBLE_QUOTE]; - } - - if (child.type === C_ESCAPED_SINGLE_QUOTE && node.quote === L_DOUBLE_QUOTE) { - return [...newAst, T_SINGLE_QUOTE]; - } - - return [...newAst, child]; - }, []); + return [...newAst, child]; + }, []); } -function normalize (value, preferredQuote) { - if (!value || !value.length) { - return value; - } +function normalize(value, preferredQuote) { + if (!value || !value.length) { + return value; + } - return valueParser(value).walk(child => { - if (child.type !== C_STRING) { - return; - } + return valueParser(value) + .walk((child) => { + if (child.type !== C_STRING) { + return; + } - const ast = parse(child.value); + const ast = parse(child.value); - if (ast.quotes) { - changeWrappingQuotes(child, ast); - } else if (preferredQuote === C_SINGLE) { - child.quote = L_SINGLE_QUOTE; - } else { - child.quote = L_DOUBLE_QUOTE; - } + if (ast.quotes) { + changeWrappingQuotes(child, ast); + } else if (preferredQuote === C_SINGLE) { + child.quote = L_SINGLE_QUOTE; + } else { + child.quote = L_DOUBLE_QUOTE; + } - child.value = stringify(ast); - }).toString(); + child.value = stringify(ast); + }) + .toString(); } const params = { - rule: 'selector', - decl: 'value', - atrule: 'params', + rule: 'selector', + decl: 'value', + atrule: 'params', }; -export default postcss.plugin('postcss-normalize-string', opts => { - const {preferredQuote} = Object.assign({}, { - preferredQuote: 'double', - }, opts); +export default postcss.plugin('postcss-normalize-string', (opts) => { + const { preferredQuote } = Object.assign( + {}, + { + preferredQuote: 'double', + }, + opts + ); - return css => { - const cache = {}; + return (css) => { + const cache = {}; - css.walk(node => { - const {type} = node; + css.walk((node) => { + const { type } = node; - if (has(params, type)) { - const param = params[type]; - const key = node[param] + '|' + preferredQuote; + if (has(params, type)) { + const param = params[type]; + const key = node[param] + '|' + preferredQuote; - if (cache[key]) { - node[param] = cache[key]; + if (cache[key]) { + node[param] = cache[key]; - return; - } + return; + } - const result = normalize(node[param], preferredQuote); + const result = normalize(node[param], preferredQuote); - node[param] = result; - cache[key] = result; - } - }); - }; + node[param] = result; + cache[key] = result; + } + }); + }; }); diff --git a/packages/postcss-normalize-timing-functions/src/__tests__/index.js b/packages/postcss-normalize-timing-functions/src/__tests__/index.js index cc2a034d8..1a9207f31 100644 --- a/packages/postcss-normalize-timing-functions/src/__tests__/index.js +++ b/packages/postcss-normalize-timing-functions/src/__tests__/index.js @@ -1,127 +1,129 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; - -const {processCSS} = processCSSFactory(plugin); - -function testTimingFunction (t, fixture, expected) { - return Promise.all([ - processCSS(t, `animation:fade 3s ${fixture}`, `animation:fade 3s ${expected}`), - processCSS(t, `animation-timing-function:${fixture}`, `animation-timing-function:${expected}`), - processCSS(t, `transition:color 3s ${fixture}`, `transition:color 3s ${expected}`), - processCSS(t, `transition-timing-function:${fixture}`, `transition-timing-function:${expected}`), - ]); +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; + +const { processCSS, passthroughCSS } = processCSSFactory(plugin); + +function testTimingFunction(t, fixture, expected) { + return Promise.all([ + processCSS( + t, + `animation:fade 3s ${fixture}`, + `animation:fade 3s ${expected}` + ), + processCSS( + t, + `animation-timing-function:${fixture}`, + `animation-timing-function:${expected}` + ), + processCSS( + t, + `transition:color 3s ${fixture}`, + `transition:color 3s ${expected}` + ), + processCSS( + t, + `transition-timing-function:${fixture}`, + `transition-timing-function:${expected}` + ), + ]); } -function testPassthrough (t, fixture) { - return testTimingFunction(t, fixture, fixture); +function testPassthrough(t, fixture) { + return testTimingFunction(t, fixture, fixture); } -test( - testTimingFunction, - 'cubic-bezier(0.25, 0.1, 0.25, 1)', - 'ease' -); +test(testTimingFunction, 'cubic-bezier(0.25, 0.1, 0.25, 1)', 'ease'); test( - 'should support uppercase property ', - processCSS, - 'h1{animation: cubic-bezier(0.25, 0.1, 0.25, 1)}', - 'h1{animation: ease}' + 'should support uppercase property', + processCSS, + 'h1{animation: cubic-bezier(0.25, 0.1, 0.25, 1)}', + 'h1{animation: ease}' ); test( - testTimingFunction, - 'CUBIC-BEZIER(0.25, 0.1, 0.25, 1)', - 'ease' + 'should support uppercase property #1', + processCSS, + 'h1{animation: cubic-bezier(0.250, 0.10, 0.250, 1)}', + 'h1{animation: ease}' ); test( - testTimingFunction, - 'cubic-bezier(0, 0, 1, 1)', - 'linear' + 'should support uppercase property #2', + processCSS, + 'h1{animation: cubic-bezier(0.250, 1e-1px, 0.250, 1)}', + 'h1{animation: ease}' ); -test( - testTimingFunction, - 'cubic-bezier(0.42, 0, 1, 1)', - 'ease-in' -); +test(testTimingFunction, 'CUBIC-BEZIER(0.25, 0.1, 0.25, 1)', 'ease'); -test( - testTimingFunction, - 'cubic-bezier(0, 0, 0.58, 1)', - 'ease-out' -); +test(testTimingFunction, 'cubic-bezier(0, 0, 1, 1)', 'linear'); -test( - testTimingFunction, - 'cubic-bezier(0.42, 0, 0.58, 1)', - 'ease-in-out' -); +test(testTimingFunction, 'cubic-bezier(0.42, 0, 1, 1)', 'ease-in'); -test( - testTimingFunction, - 'steps(1, start)', - 'step-start' -); +test(testTimingFunction, 'cubic-bezier(0, 0, 0.58, 1)', 'ease-out'); -test( - testTimingFunction, - 'steps(1, START)', - 'step-start' -); +test(testTimingFunction, 'cubic-bezier(0.42, 0, 0.58, 1)', 'ease-in-out'); -test( - testTimingFunction, - 'STEPS(1, start)', - 'step-start' -); +test(testTimingFunction, 'steps(1, start)', 'step-start'); -test( - testPassthrough, - 'steps(1)' -); +test(testTimingFunction, 'steps(1, start)', 'step-start'); -test( - testPassthrough, - 'STEPS(1)' -); +test(testTimingFunction, 'steps(1, START)', 'step-start'); -test( - testPassthrough, - 'steps(5,start)' -); +test(testTimingFunction, 'STEPS(1, start)', 'step-start'); -test( - testTimingFunction, - 'steps(10, end)', - 'steps(10)' -); +test(testPassthrough, 'steps(1)'); + +test(testPassthrough, 'STEPS(1)'); + +test(testPassthrough, 'steps(5,start)'); + +test(testTimingFunction, 'steps(10, end)', 'steps(10)'); + +test(testTimingFunction, 'steps(10, END)', 'steps(10)'); + +test(testPassthrough, 'steps(15)'); + +test(testPassthrough, 'var(--anim1)'); + +test(testPassthrough, 'VAR(--anim1)'); + +test(testPassthrough, 'cubic-bezier(0.25, var(--foo), 0.25, 1)'); test( - testTimingFunction, - 'steps(10, END)', - 'steps(10)' + testPassthrough, + 'cubic-bezier(var(--foo), var(--bar), var(--baz), var(--foz))' ); +test('should pass through broken syntax', passthroughCSS, 'h1{animation:}'); + test( - testPassthrough, - 'steps(15)' + 'should pass through broken syntax #1', + passthroughCSS, + 'h1{animation: cubic-bezier()}' ); test( - testPassthrough, - 'var(--anim1)' + 'should pass through broken syntax #2', + passthroughCSS, + 'h1{animation: cubic-bezier(0, 0, 1, 1, 1, 1)}' ); test( - testPassthrough, - 'VAR(--anim1)' + 'should pass through broken syntax #3', + passthroughCSS, + 'h1{animation: fade 3s steps(10, end())}' ); test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + 'should pass through broken syntax #4', + passthroughCSS, + 'h1{animation: fade 3s steps(1, start())}' ); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-timing-functions/src/index.js b/packages/postcss-normalize-timing-functions/src/index.js index c8f5e2f37..d721bafe9 100644 --- a/packages/postcss-normalize-timing-functions/src/index.js +++ b/packages/postcss-normalize-timing-functions/src/index.js @@ -1,79 +1,101 @@ -import {plugin} from 'postcss'; +import { plugin } from 'postcss'; import valueParser from 'postcss-value-parser'; import getMatchFactory from 'lerna:cssnano-util-get-match'; -import mappings from './lib/map'; -const getMatch = getMatchFactory(mappings); const getValue = (node) => parseFloat(node.value); -function evenValues (list, index) { - return index % 2 === 0; -} - -function reduce (node) { - if (node.type !== 'function') { - return false; +function reduce(node) { + if (node.type !== 'function') { + return false; + } + + if (!node.value) { + return; + } + + const lowerCasedValue = node.value.toLowerCase(); + + if (lowerCasedValue === 'steps') { + // Don't bother checking the step-end case as it has the same length + // as steps(1) + if ( + node.nodes[0].type === 'word' && + getValue(node.nodes[0]) === 1 && + node.nodes[2] && + node.nodes[2].type === 'word' && + node.nodes[2].value.toLowerCase() === 'start' + ) { + node.type = 'word'; + node.value = 'step-start'; + + delete node.nodes; + + return; } - const lowerCasedValue = node.value.toLowerCase(); - - if (lowerCasedValue === 'steps') { - // Don't bother checking the step-end case as it has the same length - // as steps(1) - if ( - getValue(node.nodes[0]) === 1 && - node.nodes[2] && - node.nodes[2].value.toLowerCase() === 'start' - ) { - node.type = 'word'; - node.value = 'step-start'; + // The end case is actually the browser default, so it isn't required. + if ( + node.nodes[2] && + node.nodes[2].type === 'word' && + node.nodes[2].value.toLowerCase() === 'end' + ) { + node.nodes = [node.nodes[0]]; - delete node.nodes; - - return; - } + return; + } - // The end case is actually the browser default, so it isn't required. - if (node.nodes[2] && node.nodes[2].value.toLowerCase() === 'end') { - node.nodes = [node.nodes[0]]; + return false; + } - return; - } + if (lowerCasedValue === 'cubic-bezier') { + const values = node.nodes + .filter((list, index) => { + return index % 2 === 0; + }) + .map(getValue); - return false; + if (values.length !== 4) { + return; } - if (lowerCasedValue === 'cubic-bezier') { - const match = getMatch(node.nodes.filter(evenValues).map(getValue)); + const match = getMatchFactory([ + ['ease', [0.25, 0.1, 0.25, 1]], + ['linear', [0, 0, 1, 1]], + ['ease-in', [0.42, 0, 1, 1]], + ['ease-out', [0, 0, 0.58, 1]], + ['ease-in-out', [0.42, 0, 0.58, 1]], + ])(values); - if (match) { - node.type = 'word'; - node.value = match; + if (match) { + node.type = 'word'; + node.value = match; - delete node.nodes; + delete node.nodes; - return; - } + return; } + } } export default plugin('postcss-normalize-timing-functions', () => { - return css => { - const cache = {}; + return (css) => { + const cache = {}; - css.walkDecls(/(animation|transition)(-timing-function|$)/i, decl => { - const value = decl.value; + css.walkDecls(/(animation|transition)(-timing-function|$)/i, (decl) => { + const value = decl.value; - if (cache[value]) { - decl.value = cache[value]; + if (cache[value]) { + decl.value = cache[value]; - return; - } + return; + } - const result = valueParser(value).walk(reduce).toString(); + const result = valueParser(value) + .walk(reduce) + .toString(); - decl.value = result; - cache[value] = result; - }); - }; + decl.value = result; + cache[value] = result; + }); + }; }); diff --git a/packages/postcss-normalize-timing-functions/src/lib/map.js b/packages/postcss-normalize-timing-functions/src/lib/map.js deleted file mode 100644 index 3bd35d5c6..000000000 --- a/packages/postcss-normalize-timing-functions/src/lib/map.js +++ /dev/null @@ -1,7 +0,0 @@ -export default [ - ['ease', [0.25, 0.1, 0.25, 1]], - ['linear', [0, 0, 1, 1]], - ['ease-in', [0.42, 0, 1, 1]], - ['ease-out', [0, 0, 0.58, 1]], - ['ease-in-out', [0.42, 0, 0.58, 1]], -]; diff --git a/packages/postcss-normalize-unicode/src/__tests__/index.js b/packages/postcss-normalize-unicode/src/__tests__/index.js index fc93d0228..2b8828dff 100644 --- a/packages/postcss-normalize-unicode/src/__tests__/index.js +++ b/packages/postcss-normalize-unicode/src/__tests__/index.js @@ -1,119 +1,114 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {passthroughCSS, processCSS} = processCSSFactory(plugin); +const { passthroughCSS, processCSS } = processCSSFactory(plugin); -function fixture (range) { - return `@font-face{font-family:test;unicode-range:${range}}*{font-family:test}`; +function fixture(range) { + return `@font-face{font-family:test;unicode-range:${range}}*{font-family:test}`; } test( - 'should convert a unicode range to a wildcard range', - processCSS, - fixture('u+2b00-2bff'), // Miscellaneous Symbols and Arrows - fixture('u+2b??'), - {env: 'not ie'} + 'should convert a unicode range to a wildcard range', + processCSS, + fixture('u+2b00-2bff'), // Miscellaneous Symbols and Arrows + fixture('u+2b??'), + { env: 'not ie' } ); test( - 'should convert a unicode range to a wildcard range (2)', - processCSS, - fixture('u+1e00-1eff'), // Latin Extended Additional - fixture('u+1e??'), - {env: 'not ie'} + 'should convert a unicode range to a wildcard range (2)', + processCSS, + fixture('u+1e00-1eff'), // Latin Extended Additional + fixture('u+1e??'), + { env: 'not ie' } ); test( - 'should convert a unicode range to a wildcard range (3)', - processCSS, - fixture('u+2120-212f'), - fixture('u+212?'), - {env: 'not ie'} + 'should convert a unicode range to a wildcard range (3)', + processCSS, + fixture('u+2120-212f'), + fixture('u+212?'), + { env: 'not ie' } ); test( - 'should convert a unicode range to a wildcard range (4)', - processCSS, - fixture('u+2100-21ff'), - fixture('u+21??'), - {env: 'not ie'} + 'should convert a unicode range to a wildcard range (4)', + processCSS, + fixture('u+2100-21ff'), + fixture('u+21??'), + { env: 'not ie' } ); test( - 'should convert a unicode range to a wildcard range (5)', - processCSS, - fixture('u+2000-2fff'), - fixture('u+2???'), - {env: 'not ie'} + 'should convert a unicode range to a wildcard range (5)', + processCSS, + fixture('u+2000-2fff'), + fixture('u+2???'), + { env: 'not ie' } ); test( - 'should pass through a unicode range that cannot be reduced', - passthroughCSS, - fixture('u+0-7f'), // Basic Latin - {env: 'not ie'} + 'should pass through a unicode range that cannot be reduced', + passthroughCSS, + fixture('u+0-7f'), // Basic Latin + { env: 'not ie' } ); test( - 'should pass through a unicode range that cannot be reduced (2)', - passthroughCSS, - fixture('u+2125-2128'), - {env: 'not ie'} + 'should pass through a unicode range that cannot be reduced (2)', + passthroughCSS, + fixture('u+2125-2128'), + { env: 'not ie' } ); test( - 'should pass through a unicode range that cannot be reduced (3)', - passthroughCSS, - fixture('u+2012-2f12'), - {env: 'not ie'} + 'should pass through a unicode range that cannot be reduced (3)', + passthroughCSS, + fixture('u+2012-2f12'), + { env: 'not ie' } ); test( - 'should pass through a unicode range that cannot be reduced (4)', - passthroughCSS, - fixture('u+2002-2ff2'), - {env: 'not ie'} + 'should pass through a unicode range that cannot be reduced (4)', + passthroughCSS, + fixture('u+2002-2ff2'), + { env: 'not ie' } ); test( - 'should pass through css variables', - passthroughCSS, - fixture('var(--caseInsensitive)') + 'should pass through css variables', + passthroughCSS, + fixture('var(--caseInsensitive)') ); -test( - 'should pass through initial', - passthroughCSS, - fixture('initial') -); +test('should pass through initial', passthroughCSS, fixture('initial')); test( - 'should downcase the unicode-range property/value pair', - processCSS, - '@font-face{font-family:test;UNICODE-RANGE:U+07-F}*{font-family:test}', - '@font-face{font-family:test;UNICODE-RANGE:u+07-f}*{font-family:test}', - {env: 'not ie'} + 'should downcase the unicode-range property/value pair', + processCSS, + '@font-face{font-family:test;UNICODE-RANGE:U+07-F}*{font-family:test}', + '@font-face{font-family:test;UNICODE-RANGE:u+07-f}*{font-family:test}', + { env: 'not ie' } ); test( - 'should upcase the "u" prefix (IE)', - processCSS, - fixture('u+2002-2ff2'), - fixture('U+2002-2ff2'), - {env: 'ie9'} + 'should upcase the "u" prefix (IE)', + processCSS, + fixture('u+2002-2ff2'), + fixture('U+2002-2ff2'), + { env: 'ie9' } ); test( - 'should upcase the "u" prefix (Edge 15)', - processCSS, - fixture('u+2002-2ff2'), - fixture('U+2002-2ff2'), - {env: 'edge15'} + 'should upcase the "u" prefix (Edge 15)', + processCSS, + fixture('u+2002-2ff2'), + fixture('U+2002-2ff2'), + { env: 'edge15' } ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-unicode/src/index.js b/packages/postcss-normalize-unicode/src/index.js index 797a13c26..224f9af87 100644 --- a/packages/postcss-normalize-unicode/src/index.js +++ b/packages/postcss-normalize-unicode/src/index.js @@ -4,43 +4,45 @@ import valueParser from 'postcss-value-parser'; const regexLowerCaseUPrefix = /^u(?=\+)/; -function unicode (range) { - const values = range.slice(2).split('-'); - if (values.length < 2) { - return range; +function unicode(range) { + const values = range.slice(2).split('-'); + + if (values.length < 2) { + return range; + } + + const left = values[0].split(''); + const right = values[1].split(''); + + if (left.length !== right.length) { + return range; + } + + let questionCounter = 0; + + const merged = left.reduce((group, value, index) => { + if (group === false) { + return false; } - const left = values[0].split(''); - const right = values[1].split(''); - if (left.length !== right.length) { - return range; + if (value === right[index] && !questionCounter) { + return group + value; } - let questionCounter = 0; - - const merged = left.reduce((group, value, index) => { - if (group === false) { - return false; - } - if (value === right[index] && !questionCounter) { - return group + value; - } - if (value === '0' && right[index] === 'f') { - questionCounter ++; - return group + '?'; - } - return false; - }, 'u+'); - - /* - * The maximum number of wildcard characters (?) for ranges is 5. - */ - - if (merged && questionCounter < 6) { - return merged; + if (value === '0' && right[index] === 'f') { + questionCounter++; + return group + '?'; } - return range; + return false; + }, 'u+'); + + // The maximum number of wildcard characters (?) for ranges is 5. + if (merged && questionCounter < 6) { + return merged; + } + + return range; } /* @@ -49,28 +51,36 @@ function unicode (range) { * https://caniuse.com/#search=unicode-range */ -function hasLowerCaseUPrefixBug (browser) { - return ~browserslist('ie <=11, edge <= 15').indexOf(browser); +function hasLowerCaseUPrefixBug(browser) { + return ~browserslist('ie <=11, edge <= 15').indexOf(browser); } -function transform (legacy = false, node) { - node.value = valueParser(node.value).walk(child => { - if (child.type === 'word') { - const transformed = unicode(child.value.toLowerCase()); - child.value = legacy ? transformed.replace(regexLowerCaseUPrefix, 'U') : transformed; - } - return false; - }).toString(); +function transform(legacy = false, node) { + node.value = valueParser(node.value) + .walk((child) => { + if (child.type === 'word') { + const transformed = unicode(child.value.toLowerCase()); + child.value = legacy + ? transformed.replace(regexLowerCaseUPrefix, 'U') + : transformed; + } + return false; + }) + .toString(); } export default postcss.plugin('postcss-normalize-unicode', () => { - return (css, result) => { - const resultOpts = result.opts || {}; - const browsers = browserslist(null, { - stats: resultOpts.stats, - path: __dirname, - env: resultOpts.env, - }); - css.walkDecls(/^unicode-range$/i, transform.bind(null, browsers.some(hasLowerCaseUPrefixBug))); - }; + return (css, result) => { + const resultOpts = result.opts || {}; + const browsers = browserslist(null, { + stats: resultOpts.stats, + path: __dirname, + env: resultOpts.env, + }); + + css.walkDecls( + /^unicode-range$/i, + transform.bind(null, browsers.some(hasLowerCaseUPrefixBug)) + ); + }; }); diff --git a/packages/postcss-normalize-url/src/__tests__/index.js b/packages/postcss-normalize-url/src/__tests__/index.js index 5b4225fa0..88799039b 100644 --- a/packages/postcss-normalize-url/src/__tests__/index.js +++ b/packages/postcss-normalize-url/src/__tests__/index.js @@ -1,289 +1,284 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); test( - 'should strip double quotes', - processCSS, - 'h1{background:url("cat.jpg")}', - 'h1{background:url(cat.jpg)}' + 'should strip double quotes', + processCSS, + 'h1{background:url("cat.jpg")}', + 'h1{background:url(cat.jpg)}' ); test( - 'should strip single quotes', - processCSS, - 'h1{background:url(\'cat.jpg\')}', - 'h1{background:url(cat.jpg)}' + 'should strip single quotes', + processCSS, + "h1{background:url('cat.jpg')}", + 'h1{background:url(cat.jpg)}' ); test( - 'should strip double quotes uppercase URL', - processCSS, - 'h1{background:URL("cat.jpg")}', - 'h1{background:URL(cat.jpg)}' + 'should strip double quotes uppercase URL', + processCSS, + 'h1{background:URL("cat.jpg")}', + 'h1{background:URL(cat.jpg)}' ); test( - 'should escape special characters', - processCSS, - 'h1{background:url("http://website.com/assets)_test.png")}', - 'h1{background:url(http://website.com/assets\\)_test.png)}' + 'should escape special characters', + processCSS, + 'h1{background:url("http://website.com/assets)_test.png")}', + 'h1{background:url(http://website.com/assets\\)_test.png)}' ); test( - 'should not escape more than one special character', - passthroughCSS, - 'h1{background:url("http://website.com/assets_(test).png")}' + 'should not escape more than one special character', + passthroughCSS, + 'h1{background:url("http://website.com/assets_(test).png")}' ); test( - 'should remove the default port', - processCSS, - 'h1{background:url(http://website.com:80/image.png)}', - 'h1{background:url(http://website.com/image.png)}' + 'should remove the default port', + processCSS, + 'h1{background:url(http://website.com:80/image.png)}', + 'h1{background:url(http://website.com/image.png)}' ); test( - 'should not remove the fragment', - passthroughCSS, - 'h1{background:url(test.svg#icon)}' + 'should not remove the fragment', + passthroughCSS, + 'h1{background:url(test.svg#icon)}' ); test( - 'should not remove the fragment in absolute urls', - passthroughCSS, - 'h1{background:url(http://website.com/test.svg#icon)}' + 'should not remove the fragment in absolute urls', + passthroughCSS, + 'h1{background:url(http://website.com/test.svg#icon)}' ); test( - 'should normalize directory traversal', - processCSS, - 'h1{background:url(http://website.com/assets/css/../font/t.eot)}', - 'h1{background:url(http://website.com/assets/font/t.eot)}' + 'should normalize directory traversal', + processCSS, + 'h1{background:url(http://website.com/assets/css/../font/t.eot)}', + 'h1{background:url(http://website.com/assets/font/t.eot)}' ); test( - 'should normalize directory traversal in relative urls', - processCSS, - 'h1{background:url(css/../font/t.eot)}', - 'h1{background:url(font/t.eot)}' + 'should normalize directory traversal in relative urls', + processCSS, + 'h1{background:url(css/../font/t.eot)}', + 'h1{background:url(font/t.eot)}' ); test( - 'should trim current directory indicator in relative urls', - processCSS, - 'h1{background:url(./images/cat.png)}', - 'h1{background:url(images/cat.png)}' + 'should trim current directory indicator in relative urls', + processCSS, + 'h1{background:url(./images/cat.png)}', + 'h1{background:url(images/cat.png)}' ); test( - 'should do the above tests, stripping quotes', - processCSS, - 'h1{background:url("./css/../font/t.eot")}', - 'h1{background:url(font/t.eot)}' + 'should do the above tests, stripping quotes', + processCSS, + 'h1{background:url("./css/../font/t.eot")}', + 'h1{background:url(font/t.eot)}' ); test( - 'should normalize urls with special characters', - processCSS, - 'h1{background:url("http://website.com/test/../(images)/1.png")}', - 'h1{background:url("http://website.com/(images)/1.png")}' + 'should normalize urls with special characters', + processCSS, + 'h1{background:url("http://website.com/test/../(images)/1.png")}', + 'h1{background:url("http://website.com/(images)/1.png")}' ); test( - 'should normalize relative urls with special characters', - processCSS, - 'h1{background:url("test/../(images)/1.png")}', - 'h1{background:url("(images)/1.png")}' + 'should normalize relative urls with special characters', + processCSS, + 'h1{background:url("test/../(images)/1.png")}', + 'h1{background:url("(images)/1.png")}' ); test( - 'should minimise whitespace inside the url function', - processCSS, - 'h1{background:url( test.png )}', - 'h1{background:url(test.png)}' + 'should minimise whitespace inside the url function', + processCSS, + 'h1{background:url( test.png )}', + 'h1{background:url(test.png)}' ); test( - 'should minimise whitespace inside the url function (2)', - processCSS, - 'h1{background:url( )}', - 'h1{background:url()}' + 'should minimise whitespace inside the url function (2)', + processCSS, + 'h1{background:url( )}', + 'h1{background:url()}' ); test( - 'should minimise whitespace inside the url string', - processCSS, - 'h1{background:url(" test.png ")}', - 'h1{background:url(test.png)}' + 'should minimise whitespace inside the url string', + processCSS, + 'h1{background:url(" test.png ")}', + 'h1{background:url(test.png)}' ); test( - 'should minimise whitespace inside the url string (2)', - processCSS, - 'h1{background:url(" ")}', - 'h1{background:url()}' + 'should minimise whitespace inside the url string (2)', + processCSS, + 'h1{background:url(" ")}', + 'h1{background:url()}' ); test( - 'should minimise whitespace with special characters', - processCSS, - 'h1{background:url(" test (2015).png ")}', - 'h1{background:url("test (2015).png")}' + 'should minimise whitespace with special characters', + processCSS, + 'h1{background:url(" test (2015).png ")}', + 'h1{background:url("test (2015).png")}' ); test( - 'should join multiline url functions', - processCSS, - 'h1{background:url("some really long string \\\nspanning multiple lines")}', - 'h1{background:url("some really long string spanning multiple lines")}' + 'should join multiline url functions', + processCSS, + 'h1{background:url("some really long string \\\nspanning multiple lines")}', + 'h1{background:url("some really long string spanning multiple lines")}' ); test( - 'should process multiple backgrounds', - processCSS, - 'h1{background:url( "./test/../foo/bar.jpg" ), url("http://website.com/img.jpg")}', - 'h1{background:url(foo/bar.jpg), url(http://website.com/img.jpg)}' + 'should process multiple backgrounds', + processCSS, + 'h1{background:url( "./test/../foo/bar.jpg" ), url("http://website.com/img.jpg")}', + 'h1{background:url(foo/bar.jpg), url(http://website.com/img.jpg)}' ); test( - 'should not mangle chrome extension urls', - processCSS, - 'h1{background-image:url(\'chrome-extension://__MSG_@@extension_id__/someFile.png\')}', - 'h1{background-image:url(chrome-extension://__MSG_@@extension_id__/someFile.png)}' + 'should not mangle chrome extension urls', + processCSS, + "h1{background-image:url('chrome-extension://__MSG_@@extension_id__/someFile.png')}", + 'h1{background-image:url(chrome-extension://__MSG_@@extension_id__/someFile.png)}' ); test( - 'should not mangle mozila extension urls', - processCSS, - 'h1{background-image:url(\'moz-extension://__MSG_@@extension_id__/someFile.png\')}', - 'h1{background-image:url(moz-extension://__MSG_@@extension_id__/someFile.png)}' + 'should not mangle mozila extension urls', + processCSS, + "h1{background-image:url('moz-extension://__MSG_@@extension_id__/someFile.png')}", + 'h1{background-image:url(moz-extension://__MSG_@@extension_id__/someFile.png)}' ); test( - 'should not mangle other extension urls', - processCSS, - 'h1{background-image:url(\'other-other-extension://__MSG_@@extension_id__/someFile.png\')}', - 'h1{background-image:url(other-other-extension://__MSG_@@extension_id__/someFile.png)}' + 'should not mangle other extension urls', + processCSS, + "h1{background-image:url('other-other-extension://__MSG_@@extension_id__/someFile.png')}", + 'h1{background-image:url(other-other-extension://__MSG_@@extension_id__/someFile.png)}' ); test( - 'should not mangle data urls', - passthroughCSS, - '.has-svg:before{content:url("data:image/svg+xml;utf8,")}', + 'should not mangle data urls', + passthroughCSS, + '.has-svg:before{content:url("data:image/svg+xml;utf8,")}' ); test( - 'should not mangle data urls (2)', - passthroughCSS, - '.has-svg:before{content:url("DATA:image/svg+xml;utf8,")}', + 'should not mangle data urls (2)', + passthroughCSS, + '.has-svg:before{content:url("DATA:image/svg+xml;utf8,")}' ); test( - 'should not mangle empty data urls', - passthroughCSS, - '.has-svg:before{content:url(data:,Hello%2C%20World!)}', + 'should not mangle empty data urls', + passthroughCSS, + '.has-svg:before{content:url(data:,Hello%2C%20World!)}' ); test( - 'should not mangle plain data urls', - passthroughCSS, - '.has-svg:before{content:url(data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D)}', + 'should not mangle plain data urls', + passthroughCSS, + '.has-svg:before{content:url(data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D)}' ); test( - 'should not mangle text/html data urls', - passthroughCSS, - '.has-svg:before{content:url(data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E)}', + 'should not mangle text/html data urls', + passthroughCSS, + '.has-svg:before{content:url(data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E)}' ); test( - 'should not mangle text/html data urls (2)', - passthroughCSS, - '.has-svg:before{content:url("data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E")}', + 'should not mangle text/html data urls (2)', + passthroughCSS, + '.has-svg:before{content:url("data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E")}' ); test( - 'should not mangle embedded fonts', - passthroughCSS, - '.font:before{src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SAscAAAC8AAAAYGNtYXAaVsyNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZryFoPwAAAF4AAAB3GhlYWQG2Pc9AAADVAAAADZoaGVhCB4EXgAAA4wAAAAkaG10eCC6AcMAAAOwAAAALGxvY2EBvgJWAAAD3AAAABhtYXhwABEAMgAAA/QAAAAgbmFtZVxlIn0AAAQUAAABknBvc3QAAwAAAAAFqAAAACAAAwOXAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADmBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg5gb//f//AAAAAAAg5gD//f//AAH/4xoEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABABAAggP6AukABgAAEwkBJwkBBxAB9QH1j/6a/pqPAmD+IgHeif6qAVaJAAEA0f/PAzgDuAAGAAAJAjcJAScCsP4hAd+I/qsBVYgDuP4L/gyPAWUBZo8AAQDR/8oDOAOzAAYAAAUJAQcJARcBWgHe/iKJAVb+qok2AfUB9I/+m/6ajwABAA0AggP2AukABgAACQIXCQE3A/b+DP4LjwFmAWWPAQsB3v4iiQFW/qqJAAUAAP/ABAADwAAEAAgAFQAiAC8AABMzESMRAwkBIQEUBiMiJjU0NjMyFhURFAYjIiY1NDYzMhYVERQGIyImNTQ2MzIWFeyenuwBOwE7/YoEAEUxMUVFMTFFRTExRUUxMUVFMTFFRTExRQPA/OwDFP2K/nYBigIAMUVFMTFFRTH87DFFRTExRUUxAYoxRUUxMUVFMQABAAf/zgRfA7IABgAACQI3FwEXBF/9LP58ffgCSpkDLvygAX2J7wLNhAAAAAH//f/mAhMDmgAHAAAJAjcBFQEnAb3+QAHAVv5nAZlWA5r+Jv4mUQGyUgGyUQAAAAEAAAABAABWiO5BXw889QALBAAAAAAA0a7ZYAAAAADRrtlg//3/wARfA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABJL//QAABF8AAQAAAAAAAAAAAAAAAAAAAAsEAAAAAAAAAAAAAAACAAAABAAAEAQAANEEAADRBAAADQQAAAAEkgAHAif//QAAAAAACgAUAB4ANABKAGAAdgDAANYA7gABAAAACwAwAAUAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEACAAAAAEAAAAAAAIABwBpAAEAAAAAAAMACAA5AAEAAAAAAAQACAB+AAEAAAAAAAUACwAYAAEAAAAAAAYACABRAAEAAAAAAAoAGgCWAAMAAQQJAAEAEAAIAAMAAQQJAAIADgBwAAMAAQQJAAMAEABBAAMAAQQJAAQAEACGAAMAAQQJAAUAFgAjAAMAAQQJAAYAEABZAAMAAQQJAAoANACwYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJUmVndWxhcgBSAGUAZwB1AGwAYQByYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format(\'truetype\')}', + 'should not mangle embedded fonts', + passthroughCSS, + ".font:before{src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SAscAAAC8AAAAYGNtYXAaVsyNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZryFoPwAAAF4AAAB3GhlYWQG2Pc9AAADVAAAADZoaGVhCB4EXgAAA4wAAAAkaG10eCC6AcMAAAOwAAAALGxvY2EBvgJWAAAD3AAAABhtYXhwABEAMgAAA/QAAAAgbmFtZVxlIn0AAAQUAAABknBvc3QAAwAAAAAFqAAAACAAAwOXAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADmBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg5gb//f//AAAAAAAg5gD//f//AAH/4xoEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABABAAggP6AukABgAAEwkBJwkBBxAB9QH1j/6a/pqPAmD+IgHeif6qAVaJAAEA0f/PAzgDuAAGAAAJAjcJAScCsP4hAd+I/qsBVYgDuP4L/gyPAWUBZo8AAQDR/8oDOAOzAAYAAAUJAQcJARcBWgHe/iKJAVb+qok2AfUB9I/+m/6ajwABAA0AggP2AukABgAACQIXCQE3A/b+DP4LjwFmAWWPAQsB3v4iiQFW/qqJAAUAAP/ABAADwAAEAAgAFQAiAC8AABMzESMRAwkBIQEUBiMiJjU0NjMyFhURFAYjIiY1NDYzMhYVERQGIyImNTQ2MzIWFeyenuwBOwE7/YoEAEUxMUVFMTFFRTExRUUxMUVFMTFFRTExRQPA/OwDFP2K/nYBigIAMUVFMTFFRTH87DFFRTExRUUxAYoxRUUxMUVFMQABAAf/zgRfA7IABgAACQI3FwEXBF/9LP58ffgCSpkDLvygAX2J7wLNhAAAAAH//f/mAhMDmgAHAAAJAjcBFQEnAb3+QAHAVv5nAZlWA5r+Jv4mUQGyUgGyUQAAAAEAAAABAABWiO5BXw889QALBAAAAAAA0a7ZYAAAAADRrtlg//3/wARfA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABJL//QAABF8AAQAAAAAAAAAAAAAAAAAAAAsEAAAAAAAAAAAAAAACAAAABAAAEAQAANEEAADRBAAADQQAAAAEkgAHAif//QAAAAAACgAUAB4ANABKAGAAdgDAANYA7gABAAAACwAwAAUAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEACAAAAAEAAAAAAAIABwBpAAEAAAAAAAMACAA5AAEAAAAAAAQACAB+AAEAAAAAAAUACwAYAAEAAAAAAAYACABRAAEAAAAAAAoAGgCWAAMAAQQJAAEAEAAIAAMAAQQJAAIADgBwAAMAAQQJAAMAEABBAAMAAQQJAAQAEACGAAMAAQQJAAUAFgAjAAMAAQQJAAYAEABZAAMAAQQJAAoANACwYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJUmVndWxhcgBSAGUAZwB1AGwAYQByYmV0MzY1VUkAYgBlAHQAMwA2ADUAVQBJRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype')}" ); test( - 'should not mangle embedded fonts (2)', - passthroughCSS, - '.font:before{src:url(data:font/truetype;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8RC0oAAAC8AAAAYGNtYXAAMwCZAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5ZgMDpbEAAAFwAAAAPGhlYWQErmD9AAABrAAAADZoaGVhA8IDxQAAAeQAAAAkaG10eAYAAAAAAAIIAAAAEGxvY2EAKAAUAAACGAAAAAptYXhwAAYABQAAAiQAAAAgbmFtZZlKCfsAAAJEAAABhnBvc3QAAwAAAAADzAAAACAAAwIAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAABAAAAAIAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAMAAAAAgACAACAAAAAQAg//3//wAAAAAAIP/9//8AAf/jAAMAAQAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAEAAMnP4PlfDzz1AAsEAAAAAADSyBAAAAAAANLIEAAAAAAAAAAAAAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAIAAAAAAAAAAAoAFAAeAAAAAQAAAAQAAwABAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\') format(\'truetype\')}' + 'should not mangle embedded fonts (2)', + passthroughCSS, + ".font:before{src:url(data:font/truetype;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8RC0oAAAC8AAAAYGNtYXAAMwCZAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5ZgMDpbEAAAFwAAAAPGhlYWQErmD9AAABrAAAADZoaGVhA8IDxQAAAeQAAAAkaG10eAYAAAAAAAIIAAAAEGxvY2EAKAAUAAACGAAAAAptYXhwAAYABQAAAiQAAAAgbmFtZZlKCfsAAAJEAAABhnBvc3QAAwAAAAADzAAAACAAAwIAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAABAAAAAIAPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAMAAAAAgACAACAAAAAQAg//3//wAAAAAAIP/9//8AAf/jAAMAAQAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAEAAMnP4PlfDzz1AAsEAAAAAADSyBAAAAAAANLIEAAAAAAAAAAAAAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAIAAAAAAAAAAAoAFAAeAAAAAQAAAAQAAwABAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=') format('truetype')}" ); test( - 'should optimise @namespace urls', - processCSS, - '@namespace islands url(" http://bar.yandex.ru/ui/islands");', - '@namespace islands "http://bar.yandex.ru/ui/islands";' + 'should optimise @namespace urls', + processCSS, + '@namespace islands url(" http://bar.yandex.ru/ui/islands");', + '@namespace islands "http://bar.yandex.ru/ui/islands";' ); test( - 'should optimise @namespace urls (2)', - processCSS, - '@namespace islands url(http://bar.yandex.ru/ui/islands );', - '@namespace islands "http://bar.yandex.ru/ui/islands";' + 'should optimise @namespace urls (2)', + processCSS, + '@namespace islands url(http://bar.yandex.ru/ui/islands );', + '@namespace islands "http://bar.yandex.ru/ui/islands";' ); test( - 'should optimise @namespace urls (3)', - processCSS, - '@namespace islands " http://bar.yandex.ru/ui/islands ";', - '@namespace islands "http://bar.yandex.ru/ui/islands";' + 'should optimise @namespace urls (3)', + processCSS, + '@namespace islands " http://bar.yandex.ru/ui/islands ";', + '@namespace islands "http://bar.yandex.ru/ui/islands";' ); test( - 'should optimise @namespace urls (4)', - processCSS, - '@NAMESPACE islands " http://bar.yandex.ru/ui/islands ";', - '@NAMESPACE islands "http://bar.yandex.ru/ui/islands";' + 'should optimise @namespace urls (4)', + processCSS, + '@NAMESPACE islands " http://bar.yandex.ru/ui/islands ";', + '@NAMESPACE islands "http://bar.yandex.ru/ui/islands";' ); test( - 'should not normalize @document urls', - passthroughCSS, - '@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/){body{font-size:2em}}' + 'should not normalize @document urls', + passthroughCSS, + '@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/){body{font-size:2em}}' ); test( - 'should handle protocol relative urls', - processCSS, - 'h1{background:url(//website.com:80/image.png)}', - 'h1{background:url(//website.com/image.png)}' + 'should handle protocol relative urls', + processCSS, + 'h1{background:url(//website.com:80/image.png)}', + 'h1{background:url(//website.com/image.png)}' ); test( - 'should pass through when it doesn\'t find a url function', - passthroughCSS, - 'h1{color:black;font-weight:bold}' + "should pass through when it doesn't find a url function", + passthroughCSS, + 'h1{color:black;font-weight:bold}' ); test( - 'should pass through non-url empty functions', - passthroughCSS, - 'h1{shape-outside:circle()}' + 'should pass through non-url empty functions', + passthroughCSS, + 'h1{shape-outside:circle()}' ); -test( - 'should pass through empty url', - passthroughCSS, - 'h1{background:url()}' -); +test('should pass through empty url', passthroughCSS, 'h1{background:url()}'); test( - 'should pass through invalid url', - passthroughCSS, - 'h1{background:url(http://)}' + 'should pass through invalid url', + passthroughCSS, + 'h1{background:url(http://)}' ); -test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() -); +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-normalize-url/src/index.js b/packages/postcss-normalize-url/src/index.js index 6b2bd8c13..98d3c2f88 100644 --- a/packages/postcss-normalize-url/src/index.js +++ b/packages/postcss-normalize-url/src/index.js @@ -5,99 +5,115 @@ import normalize from 'normalize-url'; import isAbsolute from 'is-absolute-url'; const multiline = /\\[\r\n]/; +// eslint-disable-next-line no-useless-escape const escapeChars = /([\s\(\)"'])/g; -function convert (url, options) { - if (isAbsolute(url) || url.startsWith('//')) { - let normalizedURL = null; +function convert(url, options) { + if (isAbsolute(url) || url.startsWith('//')) { + let normalizedURL = null; - try { - normalizedURL = normalize(url, options); - } catch (e) { - normalizedURL = url; - } - - return normalizedURL; + try { + normalizedURL = normalize(url, options); + } catch (e) { + normalizedURL = url; } - // `path.normalize` always returns backslashes on Windows, need replace in `/` - return path.normalize(url).replace(new RegExp('\\' + path.sep, 'g'), '/'); + return normalizedURL; + } + + // `path.normalize` always returns backslashes on Windows, need replace in `/` + return path.normalize(url).replace(new RegExp('\\' + path.sep, 'g'), '/'); } -function transformNamespace (rule) { - rule.params = valueParser(rule.params).walk(node => { - if (node.type === 'function' && node.value.toLowerCase() === 'url' && node.nodes.length) { - node.type = 'string'; - node.quote = node.nodes[0].quote || '"'; - node.value = node.nodes[0].value; - } - if (node.type === 'string') { - node.value = node.value.trim(); - } - return false; - }).toString(); +function transformNamespace(rule) { + rule.params = valueParser(rule.params) + .walk((node) => { + if ( + node.type === 'function' && + node.value.toLowerCase() === 'url' && + node.nodes.length + ) { + node.type = 'string'; + node.quote = node.nodes[0].quote || '"'; + node.value = node.nodes[0].value; + } + if (node.type === 'string') { + node.value = node.value.trim(); + } + return false; + }) + .toString(); } -function transformDecl (decl, opts) { - decl.value = valueParser(decl.value).walk(node => { - if ( - node.type !== 'function' || - node.value.toLowerCase() !== 'url' || - !node.nodes.length - ) { - return false; - } +function transformDecl(decl, opts) { + decl.value = valueParser(decl.value) + .walk((node) => { + if ( + node.type !== 'function' || + node.value.toLowerCase() !== 'url' || + !node.nodes.length + ) { + return false; + } - let url = node.nodes[0]; - let escaped; + let url = node.nodes[0]; + let escaped; - node.before = node.after = ''; - url.value = url.value.trim().replace(multiline, ''); + node.before = node.after = ''; + url.value = url.value.trim().replace(multiline, ''); - // Skip empty URLs - // Empty URL function equals request to current stylesheet where it is declared - if (url.value.length === 0) { - url.quote = ''; + // Skip empty URLs + // Empty URL function equals request to current stylesheet where it is declared + if (url.value.length === 0) { + url.quote = ''; - return false; - } + return false; + } - if (/^data:(.*)?,/i.test(url.value)) { - return false; - } + if (/^data:(.*)?,/i.test(url.value)) { + return false; + } - if (!(/^.+-extension:\//i.test(url.value))) { - url.value = convert(url.value, opts); - } + if (!/^.+-extension:\//i.test(url.value)) { + url.value = convert(url.value, opts); + } - if (escapeChars.test(url.value) && url.type === 'string') { - escaped = url.value.replace(escapeChars, '\\$1'); - if (escaped.length < url.value.length + 2) { - url.value = escaped; - url.type = 'word'; - } - } else { - url.type = 'word'; + if (escapeChars.test(url.value) && url.type === 'string') { + escaped = url.value.replace(escapeChars, '\\$1'); + if (escaped.length < url.value.length + 2) { + url.value = escaped; + url.type = 'word'; } + } else { + url.type = 'word'; + } - return false; - }).toString(); + return false; + }) + .toString(); } -export default postcss.plugin('postcss-normalize-url', opts => { - opts = Object.assign({}, { - normalizeProtocol: false, - stripFragment: false, - stripWWW: false, - }, opts); - - return css => { - css.walk(node => { - if (node.type === 'decl') { - return transformDecl(node, opts); - } else if (node.type === 'atrule' && node.name.toLowerCase() === 'namespace') { - return transformNamespace(node); - } - }); - }; +export default postcss.plugin('postcss-normalize-url', (opts) => { + opts = Object.assign( + {}, + { + normalizeProtocol: false, + stripFragment: false, + stripWWW: false, + }, + opts + ); + + return (css) => { + css.walk((node) => { + if (node.type === 'decl') { + return transformDecl(node, opts); + } else if ( + node.type === 'atrule' && + node.name.toLowerCase() === 'namespace' + ) { + return transformNamespace(node); + } + }); + }; }); diff --git a/packages/postcss-normalize-whitespace/src/__tests__/index.js b/packages/postcss-normalize-whitespace/src/__tests__/index.js index dddf68db6..87e413a47 100644 --- a/packages/postcss-normalize-whitespace/src/__tests__/index.js +++ b/packages/postcss-normalize-whitespace/src/__tests__/index.js @@ -1,30 +1,53 @@ import test from 'ava'; import plugin from '..'; import { - processCSSFactory, - processCSSWithPresetFactory, + processCSSFactory, + processCSSWithPresetFactory, } from '../../../../util/testHelpers'; -const {processCSS} = processCSSFactory(plugin); -const {processCSS: withDefaultPreset} = processCSSWithPresetFactory('default'); +const { processCSS } = processCSSFactory(plugin); +const { processCSS: withDefaultPreset } = processCSSWithPresetFactory( + 'default' +); + +test( + 'should trim whitespace from nested functions', + processCSS, + 'h1{width:calc(10px - ( 100px / var(--test) ))}', + 'h1{width:calc(10px - (100px / var(--test)))}' +); + +test( + 'should trim whitespace from nested functions (uppercase "calc")', + processCSS, + 'h1{width:CALC(10px - ( 100px / var(--test) ))}', + 'h1{width:CALC(10px - (100px / var(--test)))}' +); + +test( + 'should trim whitespace from css variables', + processCSS, + 'h1{width:var(--foo, calc(10px + 10px))}', + 'h1{width:var(--foo,calc(10px + 10px))}' +); test( - 'should trim whitespace from nested functions', - processCSS, - 'h1{width:calc(10px - ( 100px / var(--test) ))}', - 'h1{width:calc(10px - (100px / var(--test)))}' + 'should trim whitespace from env variables', + processCSS, + 'h1{width:env(--foo, calc(10px + 10px))}', + 'h1{width:env(--foo,calc(10px + 10px))}' ); test( - 'should trim whitespace from nested functions (uppercase "calc")', - processCSS, - 'h1{width:CALC(10px - ( 100px / var(--test) ))}', - 'h1{width:CALC(10px - (100px / var(--test)))}' + 'should trim whitespace from var with calc', + processCSS, + 'h1{width:var(--foo, calc(10px * 10px))}', + 'h1{width:var(--foo,calc(10px * 10px))}' ); test( - 'should trim whitespace from nested functions (preset)', - withDefaultPreset, - 'h1{width:calc(10px - ( 100px / var(--test) ))}', - 'h1{width:calc(10px - 100px/var(--test))}', + 'should trim whitespace from nested functions (preset)', + withDefaultPreset, + 'h1{width:calc(10px - ( 100px / var(--test) ))}', + 'h1{width:calc(10px - 100px/var(--test))}' ); diff --git a/packages/postcss-normalize-whitespace/src/index.js b/packages/postcss-normalize-whitespace/src/index.js index 2d2a38b19..68a4f7524 100644 --- a/packages/postcss-normalize-whitespace/src/index.js +++ b/packages/postcss-normalize-whitespace/src/index.js @@ -1,84 +1,84 @@ -import {plugin} from "postcss"; -import valueParser from "postcss-value-parser"; - -const atrule = "atrule"; -const decl = "decl"; -const rule = "rule"; - -function reduceCalcWhitespaces (node) { - if (node.type === "space") { - node.value = " "; - } else if (node.type === "function") { - node.before = node.after = ""; - } +import { plugin } from 'postcss'; +import valueParser from 'postcss-value-parser'; + +const atrule = 'atrule'; +const decl = 'decl'; +const rule = 'rule'; + +function reduceCalcWhitespaces(node) { + if (node.type === 'space') { + node.value = ' '; + } else if (node.type === 'function') { + node.before = node.after = ''; + } } -function reduceWhitespaces (node) { - if (node.type === "space") { - node.value = " "; - } else if (node.type === "div") { - node.before = node.after = ""; - } else if (node.type === "function") { - node.before = node.after = ""; - - if (node.value.toLowerCase() === "calc") { - valueParser.walk(node.nodes, reduceCalcWhitespaces); - return false; - } +function reduceWhitespaces(node) { + if (node.type === 'space') { + node.value = ' '; + } else if (node.type === 'div') { + node.before = node.after = ''; + } else if (node.type === 'function') { + node.before = node.after = ''; + + if (node.value.toLowerCase() === 'calc') { + valueParser.walk(node.nodes, reduceCalcWhitespaces); + return false; } + } } -export default plugin("postcss-normalize-whitespace", () => { - return css => { - const cache = {}; - - css.walk(node => { - const {type} = node; - - if (~[decl, rule, atrule].indexOf(type) && node.raws.before) { - node.raws.before = node.raws.before.replace(/\s/g, ""); - } - - if (type === decl) { - // Ensure that !important values do not have any excess whitespace - if (node.important) { - node.raws.important = "!important"; - } - - // Remove whitespaces around ie 9 hack - node.value = node.value.replace(/\s*(\\9)\s*/, "$1"); - - const value = node.value; - - if (cache[value]) { - node.value = cache[value]; - } else { - const parsed = valueParser(node.value); - const result = parsed.walk(reduceWhitespaces).toString(); - - // Trim whitespace inside functions & dividers - node.value = result; - cache[value] = result; - } - - // Remove extra semicolons and whitespace before the declaration - if (node.raws.before) { - const prev = node.prev(); - - if (prev && prev.type !== rule) { - node.raws.before = node.raws.before.replace(/;/g, ""); - } - } - - node.raws.between = ":"; - node.raws.semicolon = false; - } else if (type === rule || type === atrule) { - node.raws.between = node.raws.after = ""; - node.raws.semicolon = false; - } - }); - - // Remove final newline - css.raws.after = ""; - }; +export default plugin('postcss-normalize-whitespace', () => { + return (css) => { + const cache = {}; + + css.walk((node) => { + const { type } = node; + + if (~[decl, rule, atrule].indexOf(type) && node.raws.before) { + node.raws.before = node.raws.before.replace(/\s/g, ''); + } + + if (type === decl) { + // Ensure that !important values do not have any excess whitespace + if (node.important) { + node.raws.important = '!important'; + } + + // Remove whitespaces around ie 9 hack + node.value = node.value.replace(/\s*(\\9)\s*/, '$1'); + + const value = node.value; + + if (cache[value]) { + node.value = cache[value]; + } else { + const parsed = valueParser(node.value); + const result = parsed.walk(reduceWhitespaces).toString(); + + // Trim whitespace inside functions & dividers + node.value = result; + cache[value] = result; + } + + // Remove extra semicolons and whitespace before the declaration + if (node.raws.before) { + const prev = node.prev(); + + if (prev && prev.type !== rule) { + node.raws.before = node.raws.before.replace(/;/g, ''); + } + } + + node.raws.between = ':'; + node.raws.semicolon = false; + } else if (type === rule || type === atrule) { + node.raws.between = node.raws.after = ''; + node.raws.semicolon = false; + } + }); + + // Remove final newline + css.raws.after = ''; + }; }); diff --git a/packages/postcss-ordered-values/src/__tests__/index.js b/packages/postcss-ordered-values/src/__tests__/index.js index ba0c2c5a2..daeffb169 100644 --- a/packages/postcss-ordered-values/src/__tests__/index.js +++ b/packages/postcss-ordered-values/src/__tests__/index.js @@ -1,611 +1,589 @@ import test from 'ava'; import plugin from '..'; -import {usePostCSSPlugin, processCSSFactory} from '../../../../util/testHelpers'; +import { + usePostCSSPlugin, + processCSSFactory, +} from '../../../../util/testHelpers'; -const {processCSS, passthroughCSS} = processCSSFactory(plugin); +const { processCSS, passthroughCSS } = processCSSFactory(plugin); test( - 'should order border consistently', - processCSS, - 'h1{border:1px solid red;border:1px red solid;border:solid 1px red;border:solid red 1px;border:red solid 1px;border:red 1px solid}', - 'h1{border:1px solid red;border:1px solid red;border:1px solid red;border:1px solid red;border:1px solid red;border:1px solid red}' + 'should order border consistently', + processCSS, + 'h1{border:1px solid red;border:1px red solid;border:solid 1px red;border:solid red 1px;border:red solid 1px;border:red 1px solid}', + 'h1{border:1px solid red;border:1px solid red;border:1px solid red;border:1px solid red;border:1px solid red;border:1px solid red}' ); test( - 'should order border consistently (uppercase property and value)', - processCSS, - 'h1{BORDER:1PX SOLID RED;BORDER:1PX RED SOLID;BORDER:SOLID 1PX RED;BORDER:SOLID RED 1PX;BORDER:RED SOLID 1PX;BORDER:RED 1PX SOLID}', - 'h1{BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED}' + 'should order border consistently (uppercase property and value)', + processCSS, + 'h1{BORDER:1PX SOLID RED;BORDER:1PX RED SOLID;BORDER:SOLID 1PX RED;BORDER:SOLID RED 1PX;BORDER:RED SOLID 1PX;BORDER:RED 1PX SOLID}', + 'h1{BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED;BORDER:1PX SOLID RED}' ); test( - 'should order border with two properties', - processCSS, - 'h1{border:solid 1px}', - 'h1{border:1px solid}' + 'should order border with two properties', + processCSS, + 'h1{border:solid 1px}', + 'h1{border:1px solid}' ); test( - 'invalid border property should remain invalid', - processCSS, - 'h1{border: 0 0 7px 7px solid black}', - 'h1{border: 0 0 7px 7px solid black}' + 'invalid border property should remain invalid', + processCSS, + 'h1{border: 0 0 7px 7px solid black}', + 'h1{border: 0 0 7px 7px solid black}' ); test( - 'should order border with color functions', - processCSS, - 'h1{border:rgba(255,255,255,0.5) dashed thick}', - 'h1{border:thick dashed rgba(255,255,255,0.5)}' + 'should order border with color functions', + processCSS, + 'h1{border:rgba(255,255,255,0.5) dashed thick}', + 'h1{border:thick dashed rgba(255,255,255,0.5)}' ); test( - 'should order border longhand', - processCSS, - 'h1{border-left:solid 2px red;border-right:#fff 3px dashed;border-top:dotted #000 1px;border-bottom:4px navy groove}', - 'h1{border-left:2px solid red;border-right:3px dashed #fff;border-top:1px dotted #000;border-bottom:4px groove navy}' + 'should order border longhand', + processCSS, + 'h1{border-left:solid 2px red;border-right:#fff 3px dashed;border-top:dotted #000 1px;border-bottom:4px navy groove}', + 'h1{border-left:2px solid red;border-right:3px dashed #fff;border-top:1px dotted #000;border-bottom:4px groove navy}' ); test( - 'should order width currentColor', - processCSS, - 'h1{border:solid 2vmin currentColor}', - 'h1{border:2vmin solid currentColor}' + 'should order width currentColor', + processCSS, + 'h1{border:solid 2vmin currentColor}', + 'h1{border:2vmin solid currentColor}' ); -test( - 'should skip border:inherit', - passthroughCSS, - 'h1{border:inherit}' -); +test('should skip border:inherit', passthroughCSS, 'h1{border:inherit}'); -test( - 'should skip border:initial', - passthroughCSS, - 'h1{border:initial}' -); +test('should skip border:initial', passthroughCSS, 'h1{border:initial}'); -test( - 'should skip border:unset', - passthroughCSS, - 'h1{border:unset}' -); +test('should skip border:unset', passthroughCSS, 'h1{border:unset}'); test( - 'should order outline consistently', - processCSS, - 'h1{outline:solid red .6em}', - 'h1{outline:.6em solid red}' + 'should order outline consistently', + processCSS, + 'h1{outline:solid red .6em}', + 'h1{outline:.6em solid red}' ); test( - 'should order outline(outline-color is invert)', - processCSS, - 'h1{outline:solid invert 1px}', - 'h1{outline:1px solid invert}' + 'should order outline(outline-color is invert)', + processCSS, + 'h1{outline:solid invert 1px}', + 'h1{outline:1px solid invert}' ); test( - 'should handle -webkit-focus-ring & auto', - processCSS, - 'h1{outline:-webkit-focus-ring-color 5px auto}', - 'h1{outline:5px auto -webkit-focus-ring-color}' + 'should handle -webkit-focus-ring & auto', + processCSS, + 'h1{outline:-webkit-focus-ring-color 5px auto}', + 'h1{outline:5px auto -webkit-focus-ring-color}' ); test( - 'should order flex-flow', - processCSS, - 'h1{flex-flow: wrap column}', - 'h1{flex-flow: column wrap}' + 'should order flex-flow', + processCSS, + 'h1{flex-flow: wrap column}', + 'h1{flex-flow: column wrap}' ); test( - 'should order flex-flow (uppercase property and value)', - processCSS, - 'h1{FLEX-FLOW: WRAP COLUMN}', - 'h1{FLEX-FLOW: COLUMN WRAP}' + 'should order flex-flow (uppercase property and value)', + processCSS, + 'h1{FLEX-FLOW: WRAP COLUMN}', + 'h1{FLEX-FLOW: COLUMN WRAP}' ); test( - 'should order flex-flow', - processCSS, - 'h1{flex-flow: row-reverse wrap-reverse}', - 'h1{flex-flow: row-reverse wrap-reverse}' + 'should order flex-flow', + processCSS, + 'h1{flex-flow: row-reverse wrap-reverse}', + 'h1{flex-flow: row-reverse wrap-reverse}' ); -test( - 'should skip flex-flow:inherit', - passthroughCSS, - 'h1{flex-flow:inherit}' -); +test('should skip flex-flow:inherit', passthroughCSS, 'h1{flex-flow:inherit}'); -test( - 'should skip flex-flow:unset', - passthroughCSS, - 'h1{flex-flow: unset}' -); +test('should skip flex-flow:unset', passthroughCSS, 'h1{flex-flow: unset}'); -test( - 'should skip flex: 1 0 auto', - passthroughCSS, - 'h1{flex: 1 0 auto;}' -); +test('should skip flex: 1 0 auto', passthroughCSS, 'h1{flex: 1 0 auto;}'); -test( - 'should skip flex: 0 1 auto', - passthroughCSS, - 'h1{flex: 0 1 auto;}' -); +test('should skip flex: 0 1 auto', passthroughCSS, 'h1{flex: 0 1 auto;}'); test( - 'should support calc width in borders', - processCSS, - 'h1 {border: solid red calc(20px - 10px);}', - 'h1 {border: calc(20px - 10px) solid red;}' + 'should support calc width in borders', + processCSS, + 'h1 {border: solid red calc(20px - 10px);}', + 'h1 {border: calc(20px - 10px) solid red;}' ); test( - 'should order box-shadow consistently (1)', - processCSS, - 'h1{box-shadow:2px 5px red}', - 'h1{box-shadow:2px 5px red}' + 'should order box-shadow consistently (1)', + processCSS, + 'h1{box-shadow:2px 5px red}', + 'h1{box-shadow:2px 5px red}' ); test( - 'should order box-shadow consistently (2)', - processCSS, - 'h1{box-shadow:red 2px 5px}', - 'h1{box-shadow:2px 5px red}' + 'should order box-shadow consistently (2)', + processCSS, + 'h1{box-shadow:red 2px 5px}', + 'h1{box-shadow:2px 5px red}' ); test( - 'should order box-shadow consistently (2) (uppercase property and value)', - processCSS, - 'h1{BOX-SHADOW:RED 2PX 5PX}', - 'h1{BOX-SHADOW:2PX 5PX RED}' + 'should order box-shadow consistently (2) (uppercase property and value)', + processCSS, + 'h1{BOX-SHADOW:RED 2PX 5PX}', + 'h1{BOX-SHADOW:2PX 5PX RED}' ); test( - 'should order box-shadow consistently (3)', - processCSS, - 'h1{box-shadow:2px 5px 10px red}', - 'h1{box-shadow:2px 5px 10px red}' + 'should order box-shadow consistently (3)', + processCSS, + 'h1{box-shadow:2px 5px 10px red}', + 'h1{box-shadow:2px 5px 10px red}' ); test( - 'should order box-shadow consistently (4)', - processCSS, - 'h1{box-shadow:red 2px 5px 10px}', - 'h1{box-shadow:2px 5px 10px red}' + 'should order box-shadow consistently (4)', + processCSS, + 'h1{box-shadow:red 2px 5px 10px}', + 'h1{box-shadow:2px 5px 10px red}' ); test( - 'should order box-shadow consistently (5)', - processCSS, - 'h1{box-shadow:inset red 2px 5px 10px}', - 'h1{box-shadow:inset 2px 5px 10px red}' + 'should order box-shadow consistently (5)', + processCSS, + 'h1{box-shadow:inset red 2px 5px 10px}', + 'h1{box-shadow:inset 2px 5px 10px red}' ); test( - 'should order box-shadow consistently (6)', - processCSS, - 'h1{box-shadow:red 2px 5px 10px inset}', - 'h1{box-shadow:inset 2px 5px 10px red}' + 'should order box-shadow consistently (6)', + processCSS, + 'h1{box-shadow:red 2px 5px 10px inset}', + 'h1{box-shadow:inset 2px 5px 10px red}' ); test( - 'should order box-shadow consistently (6) (uppercase "inset")', - processCSS, - 'h1{box-shadow:red 2px 5px 10px INSET}', - 'h1{box-shadow:INSET 2px 5px 10px red}' + 'should order box-shadow consistently (6) (uppercase "inset")', + processCSS, + 'h1{box-shadow:red 2px 5px 10px INSET}', + 'h1{box-shadow:INSET 2px 5px 10px red}' ); test( - 'should order box-shadow consistently (7)', - processCSS, - 'h1{box-shadow:2px 5px 10px red inset}', - 'h1{box-shadow:inset 2px 5px 10px red}' + 'should order box-shadow consistently (7)', + processCSS, + 'h1{box-shadow:2px 5px 10px red inset}', + 'h1{box-shadow:inset 2px 5px 10px red}' ); test( - 'should order box-shadow consistently (8)', - processCSS, - 'h1{box-shadow:red 2px 5px,blue 2px 5px}', - 'h1{box-shadow:2px 5px red,2px 5px blue}' + 'should order box-shadow consistently (8)', + processCSS, + 'h1{box-shadow:red 2px 5px,blue 2px 5px}', + 'h1{box-shadow:2px 5px red,2px 5px blue}' ); test( - 'should order box-shadow consistently (9)', - processCSS, - 'h1{box-shadow:red 2px 5px 10px inset,blue inset 2px 5px 10px}', - 'h1{box-shadow:inset 2px 5px 10px red,inset 2px 5px 10px blue}' + 'should order box-shadow consistently (9)', + processCSS, + 'h1{box-shadow:red 2px 5px 10px inset,blue inset 2px 5px 10px}', + 'h1{box-shadow:inset 2px 5px 10px red,inset 2px 5px 10px blue}' ); test( - 'should order box-shadow consistently (10)', - processCSS, - 'h1{box-shadow:red 2px 5px 10px inset,blue 2px 5px 10px inset}', - 'h1{box-shadow:inset 2px 5px 10px red,inset 2px 5px 10px blue}' + 'should order box-shadow consistently (10)', + processCSS, + 'h1{box-shadow:red 2px 5px 10px inset,blue 2px 5px 10px inset}', + 'h1{box-shadow:inset 2px 5px 10px red,inset 2px 5px 10px blue}' ); test( - 'should order box-shadow consistently (11)', - processCSS, - 'h1{box-shadow:rgba(255, 0, 0, 0.5) 2px 5px 10px inset}', - 'h1{box-shadow:inset 2px 5px 10px rgba(255, 0, 0, 0.5)}' + 'should order box-shadow consistently (11)', + processCSS, + 'h1{box-shadow:rgba(255, 0, 0, 0.5) 2px 5px 10px inset}', + 'h1{box-shadow:inset 2px 5px 10px rgba(255, 0, 0, 0.5)}' ); test( - 'should order box-shadow consistently (12)', - passthroughCSS, - 'h1{box-shadow:0 0 3px}' + 'should order box-shadow consistently (12)', + passthroughCSS, + 'h1{box-shadow:0 0 3px}' ); test( - 'should pass through box-shadow values that contain calc()', - passthroughCSS, - 'h1{box-shadow: inset 0 calc(1em + 1px) 0 1px red}' + 'should pass through box-shadow values that contain calc()', + passthroughCSS, + 'h1{box-shadow: inset 0 calc(1em + 1px) 0 1px red}' ); test( - 'should pass through box-shadow values that contain calc() (uppercase "calc")', - passthroughCSS, - 'h1{box-shadow: inset 0 CALC(1em + 1px) 0 1px red}' + 'should pass through box-shadow values that contain calc() (uppercase "calc")', + passthroughCSS, + 'h1{box-shadow: inset 0 CALC(1em + 1px) 0 1px red}' ); test( - 'should pass through box-shadow values that contain prefixed calc()', - passthroughCSS, - 'h1{box-shadow: inset 0 -webkit-calc(1em + 1px) 0 1px red}' + 'should pass through box-shadow values that contain prefixed calc()', + passthroughCSS, + 'h1{box-shadow: inset 0 -webkit-calc(1em + 1px) 0 1px red}' ); test( - 'should pass through invalid box-shadow values', - passthroughCSS, - 'h1{box-shadow:1px solid rgba(34,36,38,.15)}' + 'should pass through invalid box-shadow values', + passthroughCSS, + 'h1{box-shadow:1px solid rgba(34,36,38,.15)}' ); test( - 'should pass through important comments (border)', - passthroughCSS, - 'border: 1px /*!wow*/ red solid' + 'should pass through important comments (border)', + passthroughCSS, + 'border: 1px /*!wow*/ red solid' ); test( - 'should pass through important comments (box-shadow)', - passthroughCSS, - 'box-shadow: 0 1px 3px /*!wow*/ red' + 'should pass through important comments (box-shadow)', + passthroughCSS, + 'box-shadow: 0 1px 3px /*!wow*/ red' ); test( - 'should pass through important comments (flex-flow)', - passthroughCSS, - 'flex-flow: row-reverse /*!wow*/ wrap-reverse' + 'should pass through important comments (flex-flow)', + passthroughCSS, + 'flex-flow: row-reverse /*!wow*/ wrap-reverse' ); test( - 'should pass through important comments (transition)', - passthroughCSS, - 'transition: ease-out width /*!wow*/ .5s 2s' + 'should pass through important comments (transition)', + passthroughCSS, + 'transition: ease-out width /*!wow*/ .5s 2s' ); test( - 'should pass through important comments (animation)', - passthroughCSS, - 'animation: bounce /*!wow*/ 1s linear 2s 5 normal none running' + 'should pass through important comments (animation)', + passthroughCSS, + 'animation: bounce /*!wow*/ 1s linear 2s 5 normal none running' ); test( - 'should order transition consistently (1)', - passthroughCSS, - 'transition: width .5s ease-out 2s' + 'should order transition consistently (1)', + passthroughCSS, + 'transition: width .5s ease-out 2s' ); test( - 'should order transition consistently (2)', - processCSS, - 'transition: ease-out width .5s 2s', - 'transition: width .5s ease-out 2s' + 'should order transition consistently (2)', + processCSS, + 'transition: ease-out width .5s 2s', + 'transition: width .5s ease-out 2s' ); test( - 'should order transition consistently (2) (uppercase property and value)', - processCSS, - 'TRANSITION: EASE-OUT WIDTH .5S 2S', - 'TRANSITION: WIDTH .5S EASE-OUT 2S' + 'should order transition consistently (2) (uppercase property and value)', + processCSS, + 'TRANSITION: EASE-OUT WIDTH .5S 2S', + 'TRANSITION: WIDTH .5S EASE-OUT 2S' ); test( - 'should order transition consistently (3)', - processCSS, - 'transition: ease-out .5s width 2s', - 'transition: width .5s ease-out 2s' + 'should order transition consistently (3)', + processCSS, + 'transition: ease-out .5s width 2s', + 'transition: width .5s ease-out 2s' ); test( - 'should order transition consistently (4)', - processCSS, - 'transition: .5s 2s width ease-out', - 'transition: width .5s ease-out 2s' + 'should order transition consistently (4)', + processCSS, + 'transition: .5s 2s width ease-out', + 'transition: width .5s ease-out 2s' ); test( - 'should order transition consistently (5)', - processCSS, - 'transition: .5s 2s width steps(5, start)', - 'transition: width .5s steps(5, start) 2s' + 'should order transition consistently (5)', + processCSS, + 'transition: .5s 2s width steps(5, start)', + 'transition: width .5s steps(5, start) 2s' ); test( - 'should order transition consistently (6)', - processCSS, - 'transition: .5s 2s width cubic-bezier(0, 0.3, 0.6, 1)', - 'transition: width .5s cubic-bezier(0, 0.3, 0.6, 1) 2s' + 'should order transition consistently (6)', + processCSS, + 'transition: .5s 2s width cubic-bezier(0, 0.3, 0.6, 1)', + 'transition: width .5s cubic-bezier(0, 0.3, 0.6, 1) 2s' ); test( - 'should order transition consistently (6) (uppercase "cubic-bezier")', - processCSS, - 'transition: .5s 2s width CUBIC-BEZIER(0, 0.3, 0.6, 1)', - 'transition: width .5s CUBIC-BEZIER(0, 0.3, 0.6, 1) 2s' + 'should order transition consistently (6) (uppercase "cubic-bezier")', + processCSS, + 'transition: .5s 2s width CUBIC-BEZIER(0, 0.3, 0.6, 1)', + 'transition: width .5s CUBIC-BEZIER(0, 0.3, 0.6, 1) 2s' ); test( - 'should order transition consistently (7)', - processCSS, - 'transition: .5s 2s width ease-out,.8s 1s height ease', - 'transition: width .5s ease-out 2s,height .8s ease 1s' + 'should order transition consistently (7)', + processCSS, + 'transition: .5s 2s width ease-out,.8s 1s height ease', + 'transition: width .5s ease-out 2s,height .8s ease 1s' ); test( - 'should order transition consistently (8)', - processCSS, - '-webkit-transition: ease-out width .5s 2s', - '-webkit-transition: width .5s ease-out 2s' + 'should order transition consistently (8)', + processCSS, + '-webkit-transition: ease-out width .5s 2s', + '-webkit-transition: width .5s ease-out 2s' ); test( - 'should order animation consistently (1)', - passthroughCSS, - "animation: bounce 1s linear 2s 3 normal none running" + 'should order animation consistently (1)', + passthroughCSS, + 'animation: bounce 1s linear 2s 3 normal none running' ); test( - 'should order animation consistently (2)', - processCSS, - 'animation: running none normal 3 1s 2s linear bounce', - 'animation: bounce 1s linear 2s 3 normal none running' + 'should order animation consistently (2)', + processCSS, + 'animation: running none normal 3 1s 2s linear bounce', + 'animation: bounce 1s linear 2s 3 normal none running' ); test( - 'should order animation consistently (2) (uppercase property and value)', - processCSS, - 'ANIMATION: RUNNING NONE NORMAL 3 1S 2S LINEAR BOUNCE', - 'ANIMATION: BOUNCE 1S LINEAR 2S 3 NORMAL NONE RUNNING' + 'should order animation consistently (2) (uppercase property and value)', + processCSS, + 'ANIMATION: RUNNING NONE NORMAL 3 1S 2S LINEAR BOUNCE', + 'ANIMATION: BOUNCE 1S LINEAR 2S 3 NORMAL NONE RUNNING' ); test( - 'should order animation consistently (3) (timing function keywords)', - processCSS, - 'animation: ease-in-out 1s bounce', - 'animation: bounce 1s ease-in-out' + 'should order animation consistently (3) (timing function keywords)', + processCSS, + 'animation: ease-in-out 1s bounce', + 'animation: bounce 1s ease-in-out' ); test( - 'should order animation consistently (3) (steps timing function)', - processCSS, - 'animation: steps(3, start) 1s bounce', - 'animation: bounce 1s steps(3, start)' + 'should order animation consistently (3) (steps timing function)', + processCSS, + 'animation: steps(3, start) 1s bounce', + 'animation: bounce 1s steps(3, start)' ); test( - 'should order animation consistently (3) (cubic-bezier timing function)', - processCSS, - 'animation: cubic-bezier(0, 0.3, 0.6, 1) 1s bounce', - 'animation: bounce 1s cubic-bezier(0, 0.3, 0.6, 1)' + 'should order animation consistently (3) (cubic-bezier timing function)', + processCSS, + 'animation: cubic-bezier(0, 0.3, 0.6, 1) 1s bounce', + 'animation: bounce 1s cubic-bezier(0, 0.3, 0.6, 1)' ); test( - 'should order animation consistently (3) (frames timing function)', - processCSS, - 'animation: frames(3) 1s bounce', - 'animation: bounce 1s frames(3)' + 'should order animation consistently (3) (frames timing function)', + processCSS, + 'animation: frames(3) 1s bounce', + 'animation: bounce 1s frames(3)' ); test( - 'should order animation consistently (4) (iteration count as number)', - processCSS, - 'animation: 3 1s bounce', - 'animation: bounce 1s 3' + 'should order animation consistently (4) (iteration count as number)', + processCSS, + 'animation: 3 1s bounce', + 'animation: bounce 1s 3' ); test( - 'should order animation consistently (4) (iteration count as infinite)', - processCSS, - 'animation: infinite 1s bounce', - 'animation: bounce 1s infinite' + 'should order animation consistently (4) (iteration count as infinite)', + processCSS, + 'animation: infinite 1s bounce', + 'animation: bounce 1s infinite' ); test( - 'should order animation consistently (5) (do not reorder times)', - processCSS, - 'animation: 1s 2s bounce', - 'animation: bounce 1s 2s' + 'should order animation consistently (5) (do not reorder times)', + processCSS, + 'animation: 1s 2s bounce', + 'animation: bounce 1s 2s' ); test( - 'should order animation consistently (5) (do not reorder times)', - processCSS, - 'animation: 1s bounce 2s', - 'animation: bounce 1s 2s' + 'should order animation consistently (5) (do not reorder times)', + processCSS, + 'animation: 1s bounce 2s', + 'animation: bounce 1s 2s' ); test( - 'should order animation consistently (6) (direction "normal")', - processCSS, - 'animation: normal 1s bounce', - 'animation: bounce 1s normal' + 'should order animation consistently (6) (direction "normal")', + processCSS, + 'animation: normal 1s bounce', + 'animation: bounce 1s normal' ); test( - 'should order animation consistently (6) (direction "reverse")', - processCSS, - 'animation: reverse 1s bounce', - 'animation: bounce 1s reverse' + 'should order animation consistently (6) (direction "reverse")', + processCSS, + 'animation: reverse 1s bounce', + 'animation: bounce 1s reverse' ); test( - 'should order animation consistently (6) (direction "alternate")', - processCSS, - 'animation: alternate 1s bounce', - 'animation: bounce 1s alternate' + 'should order animation consistently (6) (direction "alternate")', + processCSS, + 'animation: alternate 1s bounce', + 'animation: bounce 1s alternate' ); test( - 'should order animation consistently (6) (direction "alternate-reverse")', - processCSS, - 'animation: alternate-reverse 1s bounce', - 'animation: bounce 1s alternate-reverse' + 'should order animation consistently (6) (direction "alternate-reverse")', + processCSS, + 'animation: alternate-reverse 1s bounce', + 'animation: bounce 1s alternate-reverse' ); test( - 'should order animation consistently (7) (fill mode "none")', - processCSS, - 'animation: none 1s bounce', - 'animation: bounce 1s none' + 'should order animation consistently (7) (fill mode "none")', + processCSS, + 'animation: none 1s bounce', + 'animation: bounce 1s none' ); test( - 'should order animation consistently (7) (fill mode "forwards")', - processCSS, - 'animation: forwards 1s bounce', - 'animation: bounce 1s forwards' + 'should order animation consistently (7) (fill mode "forwards")', + processCSS, + 'animation: forwards 1s bounce', + 'animation: bounce 1s forwards' ); test( - 'should order animation consistently (7) (fill mode "backwards")', - processCSS, - 'animation: backwards 1s bounce', - 'animation: bounce 1s backwards' + 'should order animation consistently (7) (fill mode "backwards")', + processCSS, + 'animation: backwards 1s bounce', + 'animation: bounce 1s backwards' ); test( - 'should order animation consistently (7) (fill mode "both")', - processCSS, - 'animation: both 1s bounce', - 'animation: bounce 1s both' + 'should order animation consistently (7) (fill mode "both")', + processCSS, + 'animation: both 1s bounce', + 'animation: bounce 1s both' ); test( - 'should order animation consistently (8) (play state "running")', - processCSS, - 'animation: running 1s bounce', - 'animation: bounce 1s running' + 'should order animation consistently (8) (play state "running")', + processCSS, + 'animation: running 1s bounce', + 'animation: bounce 1s running' ); test( - 'should order animation consistently (8) (play state "paused")', - processCSS, - 'animation: paused 1s bounce', - 'animation: bounce 1s paused' + 'should order animation consistently (8) (play state "paused")', + processCSS, + 'animation: paused 1s bounce', + 'animation: bounce 1s paused' ); test( - 'should order animation consistently (9) (assigns keyframe name last when it matches a keyword)', - processCSS, - 'animation: none 1s linear 2s both', - 'animation: both 1s linear 2s none' + 'should order animation consistently (9) (assigns keyframe name last when it matches a keyword)', + processCSS, + 'animation: none 1s linear 2s both', + 'animation: both 1s linear 2s none' ); test( - 'should order animation consistently (9) (assigns keyframe name last when it matches a keyword)', - processCSS, - 'animation: ease 1s linear', - 'animation: linear 1s ease' + 'should order animation consistently (9) (assigns keyframe name last when it matches a keyword)', + processCSS, + 'animation: ease 1s linear', + 'animation: linear 1s ease' ); test( - 'should order animation consistently (10) (handle multiple animation values)', - processCSS, - 'animation: 1s 2s bounce linear, 8s 1s shake ease', - 'animation: bounce 1s linear 2s,shake 8s ease 1s' + 'should order animation consistently (10) (handle multiple animation values)', + processCSS, + 'animation: 1s 2s bounce linear, 8s 1s shake ease', + 'animation: bounce 1s linear 2s,shake 8s ease 1s' ); test( - 'should order animation consistently (10) (process prefixed -webkit-animation)', - processCSS, - '-webkit-animation: linear bounce 1s 2s', - '-webkit-animation: bounce 1s linear 2s' + 'should order animation consistently (10) (process prefixed -webkit-animation)', + processCSS, + '-webkit-animation: linear bounce 1s 2s', + '-webkit-animation: bounce 1s linear 2s' ); test( - 'should abort ordering when a var is detected (animation)', - passthroughCSS, - 'animation: bounce /*!wow*/ 1s var(--linear) 2s 5 normal none running' + 'should order animation consistently (11) (process prefixed -moz-animation)', + processCSS, + '-moz-animation: linear bounce 1s 2s', + '-moz-animation: bounce 1s linear 2s' ); test( - 'should abort ordering when a var is detected (animation) (uppercase "var")', - passthroughCSS, - 'animation: bounce /*!wow*/ 1s var(--linear) 2s 5 normal none running' + 'should abort ordering when a var is detected (animation)', + passthroughCSS, + 'animation: bounce /*!wow*/ 1s var(--linear) 2s 5 normal none running' ); test( - 'should abort ordering when a var is detected (transition)', - passthroughCSS, - 'transition: .5s 2s width var(--ease)' + 'should abort ordering when a var is detected (animation) (uppercase "var")', + passthroughCSS, + 'animation: bounce /*!wow*/ 1s var(--linear) 2s 5 normal none running' ); test( - 'should abort ordering when a var is detected (transition) (uppercase "var")', - passthroughCSS, - 'transition: .5s 2s width VAR(--ease)' + 'should abort ordering when a var is detected (transition)', + passthroughCSS, + 'transition: .5s 2s width var(--ease)' ); test( - 'should abort ordering when a var is detected (flex-flow)', - passthroughCSS, - 'flex-flow: wrap var(--column)' + 'should abort ordering when a var is detected (transition) (uppercase "var")', + passthroughCSS, + 'transition: .5s 2s width VAR(--ease)' ); test( - 'should abort ordering when a var is detected (flex-flow) (uppercase "var")', - passthroughCSS, - 'flex-flow: wrap VAR(--column)' + 'should abort ordering when a var is detected (flex-flow)', + passthroughCSS, + 'flex-flow: wrap var(--column)' ); test( - 'should abort ordering when a var is detected (box-shadow)', - passthroughCSS, - 'box-shadow: 0 1px 3px var(--red)' + 'should abort ordering when a var is detected (flex-flow) (uppercase "var")', + passthroughCSS, + 'flex-flow: wrap VAR(--column)' ); test( - 'should abort ordering when a var is detected (box-shadow) (uppercase "var")', - passthroughCSS, - 'box-shadow: 0 1px 3px VAR(--red)' + 'should abort ordering when a var is detected (box-shadow)', + passthroughCSS, + 'box-shadow: 0 1px 3px var(--red)' ); test( - 'should abort ordering when a var is detected (border)', - passthroughCSS, - 'border: solid 1px var(--red)' + 'should abort ordering when a var is detected (box-shadow) (uppercase "var")', + passthroughCSS, + 'box-shadow: 0 1px 3px VAR(--red)' ); test( - 'should abort ordering when a var is detected (border) (uppercase "var")', - passthroughCSS, - 'border: solid 1px VAR(--red)' + 'should abort ordering when a var is detected (border)', + passthroughCSS, + 'border: solid 1px var(--red)' ); test( - 'should abort when consumed via css loader', - passthroughCSS, - 'border: ___CSS_LOADER_IMPORT___0___ solid ___CSS_LOADER_IMPORT___1___;' + 'should abort ordering when a var is detected (border) (uppercase "var")', + passthroughCSS, + 'border: solid 1px VAR(--red)' ); test( - 'should use the postcss plugin api', - usePostCSSPlugin, - plugin() + 'should abort when consumed via css loader', + passthroughCSS, + 'border: ___CSS_LOADER_IMPORT___0___ solid ___CSS_LOADER_IMPORT___1___;' ); + +test('should use the postcss plugin api', usePostCSSPlugin, plugin()); diff --git a/packages/postcss-ordered-values/src/index.js b/packages/postcss-ordered-values/src/index.js index 0fbb6c3c7..4495f87e1 100644 --- a/packages/postcss-ordered-values/src/index.js +++ b/packages/postcss-ordered-values/src/index.js @@ -1,5 +1,5 @@ import postcss from 'postcss'; -import valueParser from "postcss-value-parser"; +import valueParser from 'postcss-value-parser'; // rules import animation from './rules/animation'; @@ -11,82 +11,81 @@ import transition from './rules/transition'; /* eslint-disable quote-props */ const rules = { - 'animation': animation, - '-webkit-animation': animation, - 'border': border, - 'border-top': border, - 'border-right': border, - 'border-bottom': border, - 'border-left': border, - 'outline': border, - 'box-shadow': boxShadow, - 'flex-flow': flexFlow, - 'transition': transition, - '-webkit-transition': transition, + animation: animation, + border: border, + 'border-top': border, + 'border-right': border, + 'border-bottom': border, + 'border-left': border, + outline: border, + 'box-shadow': boxShadow, + 'flex-flow': flexFlow, + transition: transition, }; /* eslint-enable */ -function shouldAbort (parsed) { - let abort = false; +function shouldAbort(parsed) { + let abort = false; - parsed.walk(({type, value}) => { - if ( - type === 'comment' || - type === 'function' && value.toLowerCase() === 'var' || - type === 'word' && ~value.indexOf(`___CSS_LOADER_IMPORT___`) - ) { - abort = true; + parsed.walk(({ type, value }) => { + if ( + type === 'comment' || + (type === 'function' && value.toLowerCase() === 'var') || + (type === 'word' && ~value.indexOf(`___CSS_LOADER_IMPORT___`)) + ) { + abort = true; - return false; - } - }); + return false; + } + }); - return abort; + return abort; } -function getValue (decl) { - let {value, raws} = decl; +function getValue(decl) { + let { value, raws } = decl; - if (raws && raws.value && raws.value.raw) { - value = raws.value.raw; - } + if (raws && raws.value && raws.value.raw) { + value = raws.value.raw; + } - return value; + return value; } export default postcss.plugin('postcss-ordered-values', () => { - return css => { - const cache = {}; + return (css) => { + const cache = {}; - css.walkDecls(decl => { - const lowerCasedProp = decl.prop.toLowerCase(); - const processor = rules[lowerCasedProp]; + css.walkDecls((decl) => { + const lowerCasedProp = decl.prop.toLowerCase(); + const normalizedProp = postcss.vendor.unprefixed(lowerCasedProp); + const processor = rules[normalizedProp]; - if (!processor) { - return; - } + if (!processor) { + return; + } - const value = getValue(decl); + const value = getValue(decl); - if (cache[value]) { - decl.value = cache[value]; + if (cache[value]) { + decl.value = cache[value]; - return; - } + return; + } - const parsed = valueParser(value); + const parsed = valueParser(value); - if (parsed.nodes.length < 2 || shouldAbort(parsed)) { - cache[value] = value; + if (parsed.nodes.length < 2 || shouldAbort(parsed)) { + cache[value] = value; - return; - } + return; + } - const result = processor(parsed); + const result = processor(parsed); - decl.value = result; - cache[value] = result; - }); - }; + decl.value = result; + cache[value] = result; + }); + }; }); diff --git a/packages/postcss-ordered-values/src/lib/addSpace.js b/packages/postcss-ordered-values/src/lib/addSpace.js index f4cc0f0ba..6fc11e41b 100644 --- a/packages/postcss-ordered-values/src/lib/addSpace.js +++ b/packages/postcss-ordered-values/src/lib/addSpace.js @@ -1,3 +1,3 @@ -export default function addSpace () { - return {type: 'space', value: ' '}; +export default function addSpace() { + return { type: 'space', value: ' ' }; } diff --git a/packages/postcss-ordered-values/src/lib/getValue.js b/packages/postcss-ordered-values/src/lib/getValue.js index ab0feddd7..c58382666 100644 --- a/packages/postcss-ordered-values/src/lib/getValue.js +++ b/packages/postcss-ordered-values/src/lib/getValue.js @@ -1,25 +1,25 @@ -import {stringify} from 'postcss-value-parser'; +import { stringify } from 'postcss-value-parser'; -export default function getValue (values) { - return stringify({ - nodes: values.reduce((nodes, arg, index) => { - arg.forEach((val, idx) => { - if ( - idx === arg.length - 1 && - index === values.length - 1 && - val.type === 'space' - ) { - return; - } - nodes.push(val); - }); +export default function getValue(values) { + return stringify({ + nodes: values.reduce((nodes, arg, index) => { + arg.forEach((val, idx) => { + if ( + idx === arg.length - 1 && + index === values.length - 1 && + val.type === 'space' + ) { + return; + } + nodes.push(val); + }); - if (index !== values.length - 1) { - nodes[nodes.length - 1].type = 'div'; - nodes[nodes.length - 1].value = ','; - } + if (index !== values.length - 1) { + nodes[nodes.length - 1].type = 'div'; + nodes[nodes.length - 1].value = ','; + } - return nodes; - }, []), - }); + return nodes; + }, []), + }); } diff --git a/packages/postcss-ordered-values/src/rules/animation.js b/packages/postcss-ordered-values/src/rules/animation.js index 9e848884d..8b5a20fdb 100644 --- a/packages/postcss-ordered-values/src/rules/animation.js +++ b/packages/postcss-ordered-values/src/rules/animation.js @@ -1,4 +1,4 @@ -import {unit} from 'postcss-value-parser'; +import { unit } from 'postcss-value-parser'; import getArguments from 'lerna:cssnano-util-get-arguments'; import addSpace from '../lib/addSpace'; import getValue from '../lib/getValue'; @@ -6,94 +6,107 @@ import getValue from '../lib/getValue'; // animation: [ none | ] ||