pax_global_header 0000666 0000000 0000000 00000000064 14532047255 0014521 g ustar 00root root 0000000 0000000 52 comment=1f0692ee48a68404e9c7f2764d95b863a891f17b clean-css-5.3.3/ 0000775 0000000 0000000 00000000000 14532047255 0013401 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/.eslintignore 0000664 0000000 0000000 00000000070 14532047255 0016101 0 ustar 00root root 0000000 0000000 /cleancss-browser.js /node_modules /npm-debug.log /test/ clean-css-5.3.3/.eslintrc 0000664 0000000 0000000 00000003247 14532047255 0015233 0 ustar 00root root 0000000 0000000 { "root": true, "env": { "es2017": true }, "extends": [ "airbnb-base/legacy" ], "rules": { "block-scoped-var": "off", "consistent-return": "off", "curly": ["error", "all"], "default-case": "off", "eol-last": [ "error", "always" ], "eqeqeq": "off", "func-names": "off", "global": "off", "global-require": "off", "global-strict": "off", "guard-for-in": "off", "indent": [ "warn", 2 ], "linebreak-style": "off", "lines-between-class-members": "off", "max-len": [ "error", { "code": 120, "ignoreComments": true, "ignoreStrings": true, "ignoreTemplateLiterals": true } ], "no-bitwise": "off", "no-continue": "off", "no-else-return": ["error", { "allowElseIf": true } ], "no-labels": "off", "no-mixed-operators": "off", "no-multi-assign": "off", "no-nested-ternary": "off", "no-param-reassign": "off", "no-plusplus": "off", "no-restricted-syntax": "off", "no-shadow": "off", "no-underscore-dangle": "off", "no-unused-vars": "off", "no-use-before-define": "off", "object-curly-newline": ["error", { "ObjectExpression": { "multiline": true, "minProperties": 2 } }], "object-curly-spacing": "error", "one-var": "off", "one-var-declaration-per-line": "off", "prefer-regex-literals": "off", "quote-props": [ "error", "as-needed" ], "radix": [ "error", "as-needed" ], "space-before-function-paren": [ "error", "never" ], "strict": [ "error", "never" ], "vars-on-top": "off" } } clean-css-5.3.3/.github/ 0000775 0000000 0000000 00000000000 14532047255 0014741 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/.github/workflows/ 0000775 0000000 0000000 00000000000 14532047255 0016776 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/.github/workflows/codeql.yml 0000664 0000000 0000000 00000001213 14532047255 0020765 0 ustar 00root root 0000000 0000000 name: "CodeQL" on: push: branches: - master - "!dependabot/**" pull_request: # The branches below must be a subset of the branches above branches: - master schedule: - cron: "0 2 * * 5" workflow_dispatch: jobs: analyze: name: Analyze runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: "javascript" - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 clean-css-5.3.3/.github/workflows/test.yml 0000664 0000000 0000000 00000001774 14532047255 0020511 0 ustar 00root root 0000000 0000000 name: Tests on: push: branches-ignore: - "dependabot/**" pull_request: workflow_dispatch: env: FORCE_COLOR: 2 jobs: linter: runs-on: ubuntu-latest steps: - name: Clone repository uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: "15.x" - name: Install npm dependencies run: npm ci - name: Run linter run: npm run lint run: name: Node ${{ matrix.node }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: node: [10, 12, 14, 16] os: [ubuntu-latest, windows-latest] steps: - name: Clone repository uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} cache: npm - name: Install npm dependencies run: npm ci - name: Run tests run: npm test clean-css-5.3.3/.gitignore 0000664 0000000 0000000 00000000062 14532047255 0015367 0 ustar 00root root 0000000 0000000 /cleancss-browser.js /node_modules /npm-debug.log clean-css-5.3.3/.travis.yml 0000664 0000000 0000000 00000000150 14532047255 0015506 0 ustar 00root root 0000000 0000000 arch: - ppc64le language: node_js cache: npm node_js: - 10 - 12 - 14 matrix: fast_finish: true clean-css-5.3.3/CONTRIBUTING.md 0000664 0000000 0000000 00000002650 14532047255 0015635 0 ustar 00root root 0000000 0000000 # Bug reports Every piece of software has bugs, and squashing them should always be the priority. If you spotted an incorrect behavior, knowing the following facts will help fixing it: * What's your input CSS and expected output? * Do you use clean-css directly or through any of the [plugins](https://github.com/clean-css/clean-css#how-to-use-clean-css-with-build-tools)? * What options do you pass to clean-css / the plugin? * What version of clean-css do you use? * What operating system do you use? # Pull requests We love pull requests! To contribute to clean-css first fork, then clone the repo: ```shell git clone git@github.com:your-username/clean-css.git ``` Make sure you have node 6.0+ installed so npm can download all dependencies for you: ```shell npm install ``` Make sure the tests pass: ```shell npm test ``` Then add tests for your change. Check if tests fail. Make your change. Make the tests pass. At the end make sure code styling validation passes: ```shell npm run lint ``` Finally push to your fork and [submit a pull request](https://github.com/clean-css/clean-css/compare/). At this point you're waiting for a PR review which should not thake more than a day. Some things that will increase the chance that your pull request is accepted: * Write tests. * Write self-documenting code. * Squash commits. * Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). clean-css-5.3.3/History.md 0000664 0000000 0000000 00000246572 14532047255 0015404 0 ustar 00root root 0000000 0000000 [5.3.3 / 2023-11-30](https://github.com/clean-css/clean-css/compare/v5.3.2...v5.3.3) ================== * Fixed issue [#1262](https://github.com/clean-css/clean-css/issues/1262) - dynamically require os for edge runtime compatibility. [5.3.2 / 2023-01-19](https://github.com/clean-css/clean-css/compare/v5.3.1...v5.3.2) ================== * Fixed issue [#1224](https://github.com/clean-css/clean-css/issues/1224) - incorrect parsing of selectors with double hyphen. * Fixed issue [#1228](https://github.com/clean-css/clean-css/issues/1228) - incorrect appending of '%' inside rgba colors. * Fixed issue [#1232](https://github.com/clean-css/clean-css/issues/1232) - support for `@container` keyword. * Fixed issue [#1239](https://github.com/clean-css/clean-css/issues/1239) - edge case in handling `@import` statements. * Fixed issue [#1242](https://github.com/clean-css/clean-css/issues/1242) - support for `@layer` keyword. [5.3.1 / 2022-07-13](https://github.com/clean-css/clean-css/compare/v5.3.0...v5.3.1) ================== * Fixed issue [#1218](https://github.com/clean-css/clean-css/issues/1218) - double hyphen in at-rule breaks parsing. * Fixed issue [#1220](https://github.com/clean-css/clean-css/issues/1220) - adds optimization for nth-* rules. [5.3.0 / 2022-03-31](https://github.com/clean-css/clean-css/compare/v5.2.3...v5.3.0) ================== * Adds customizable value optimizers for variables. * Fixed issue [#1159](https://github.com/clean-css/clean-css/issues/1159) - adds optimization for `nth-child` and `nth-of-type`. * Fixed issue [#1181](https://github.com/clean-css/clean-css/issues/1181) - CSS level 4 color functions with spaces. * Fixed issue [#1183](https://github.com/clean-css/clean-css/issues/1183) - fraction optimizer breaks `image-set`. * Fixed issue [#1208](https://github.com/clean-css/clean-css/issues/1208) - handling generic family names. * Fixed issue [#1210](https://github.com/clean-css/clean-css/issues/1210) - handling `file://` protocol. [5.2.4 / 2022-01-28](https://github.com/clean-css/clean-css/compare/v5.2.3...v5.2.4) ================== * Fixed issue [#1196](https://github.com/clean-css/clean-css/issues/1196) - correctly parse variables & comments mix. [5.2.3 / 2022-01-26](https://github.com/clean-css/clean-css/compare/v5.2.2...v5.2.3) ================== * Fixed issue [#1185](https://github.com/clean-css/clean-css/issues/1185) - keeping comments inside variables. * Fixed issue [#1194](https://github.com/clean-css/clean-css/issues/1194) - unexpected end of JSON input when source map is empty. [5.2.2 / 2021-10-21](https://github.com/clean-css/clean-css/compare/v5.2.1...v5.2.2) ================== * Fixed an unsafe data URI regex, which, when clean-css is used as a service, could be used in a DOS attack. [5.2.1 / 2021-09-30](https://github.com/clean-css/clean-css/compare/v5.2.0...v5.2.1) ================== * Fixed issue [#1186](https://github.com/clean-css/clean-css/issues/1186) - bad error handling in batch mode with promises. [5.2.0 / 2021-09-25](https://github.com/clean-css/clean-css/compare/5.1...v5.2.0) ================== * Fixed issue [#1180](https://github.com/clean-css/clean-css/issues/1180) - properly handle empty variable values. [5.1.5 / 2021-08-05](https://github.com/clean-css/clean-css/compare/v5.1.4...v5.1.5) ================== * Fixed issue [#1178](https://github.com/clean-css/clean-css/issues/1178) - fixes lack of space removal in variable blocks. [5.1.4 / 2021-07-29](https://github.com/clean-css/clean-css/compare/v5.1.3...v5.1.4) ================== * Fixed issue [#1177](https://github.com/clean-css/clean-css/issues/1177) - fix to missing local imports when only remote ones allowed. [5.1.3 / 2021-06-25](https://github.com/clean-css/clean-css/compare/v5.1.2...v5.1.3) ================== * Fixed issue [#1160](https://github.com/clean-css/clean-css/issues/1160) - keep zero units when inside multiple functions. * Fixed issue [#1161](https://github.com/clean-css/clean-css/issues/1161) - extra whitespace in URLs. * Fixed issue [#1166](https://github.com/clean-css/clean-css/issues/1166) - incorrect compoment splitting when empty multiplex part. [5.1.2 / 2021-03-19](https://github.com/clean-css/clean-css/compare/v5.1.1...v5.1.2) ================== * Fixed issue [#996](https://github.com/clean-css/clean-css/issues/996) - space removed from pseudo classes. [5.1.1 / 2021-03-03](https://github.com/clean-css/clean-css/compare/v5.1.0...v5.1.1) ================== * Fixed issue [#1156](https://github.com/clean-css/clean-css/issues/1156) - invalid hsl/hsla validation in level 2 optimizations. [5.1.0 / 2021-02-18](https://github.com/clean-css/clean-css/compare/5.0...v5.1.0) ================== * Fixes stripping '%' from inside color functions. * Improves tokenization speed by ~30%. * Fixed issue [#1143](https://github.com/clean-css/clean-css/issues/1143) - some missing level 1 value optimizations. [5.0.1 / 2021-01-29](https://github.com/clean-css/clean-css/compare/v5.0.0...v5.0.1) ================== * Fixed issue [#1139](https://github.com/clean-css/clean-css/issues/1139) - overriding & merging properties without `canOverride` set. [5.0.0 / 2021-01-29](https://github.com/clean-css/clean-css/compare/4.2...v5.0.0) ================== * Adds a way process input files without bundling it into one big output file. * Adds level 1 and level 2 optimization plugins. * Disables URL rebasing by default. * Disables URL unquoting by default. * Drops support for Node.js 6 & 8 to support last 3 Node.js releases: 10, 12, and 14. * Fixed issue [#889](https://github.com/clean-css/clean-css/issues/889) - whitelisted level 1 optimizations. * Fixed issue [#975](https://github.com/clean-css/clean-css/issues/975) - incorrect block name optimization. * Fixed issue [#1009](https://github.com/clean-css/clean-css/issues/1009) - whitespace around comments. * Fixed issue [#1021](https://github.com/clean-css/clean-css/issues/1021) - allow one- and two-letter property names. * Fixed issue [#1022](https://github.com/clean-css/clean-css/issues/1022) - merging into shorthands new property positioning. * Fixed issue [#1032](https://github.com/clean-css/clean-css/issues/1032) - wrong order of merged shorthands with inherit. * Fixed issue [#1043](https://github.com/clean-css/clean-css/issues/1043) - `calc` fallback removed within other function. * Fixed issue [#1045](https://github.com/clean-css/clean-css/issues/1045) - non-standard protocol-less URL first slash removed. * Fixed issue [#1050](https://github.com/clean-css/clean-css/issues/1050) - correctly keeps default animation duration if delay is also set. * Fixed issue [#1053](https://github.com/clean-css/clean-css/issues/1053) - treats `calc()` as first class width value. * Fixed issue [#1055](https://github.com/clean-css/clean-css/issues/1055) - supports 4- and 8-character hex with alpha color notation. * Fixed issue [#1057](https://github.com/clean-css/clean-css/issues/1057) - level 2 optimizations and quoted font family name. * Fixed issue [#1059](https://github.com/clean-css/clean-css/issues/1059) - animation time units as CSS expressions. * Fixed issue [#1060](https://github.com/clean-css/clean-css/issues/1060) - variable removed when shorthand's only value. * Fixed issue [#1062](https://github.com/clean-css/clean-css/issues/1062) - wrong optimization of CSS pseudo-classes with selector list. * Fixed issue [#1073](https://github.com/clean-css/clean-css/issues/1073) - adds support for non-standard `rpx` units. * Fixed issue [#1075](https://github.com/clean-css/clean-css/issues/1075) - media merging and variables. * Fixed issue [#1087](https://github.com/clean-css/clean-css/issues/1087) - allow units with any case. * Fixed issue [#1088](https://github.com/clean-css/clean-css/issues/1088) - building source maps with source preserved via comments. * Fixed issue [#1090](https://github.com/clean-css/clean-css/issues/1090) - edge case in merging for `border` and `border-image`. * Fixed issue [#1103](https://github.com/clean-css/clean-css/issues/1103) - don't allow merging longhand into `unset` shorthand. * Fixed issue [#1115](https://github.com/clean-css/clean-css/issues/1115) - incorrect multiplex longhand into shorthand merging. * Fixed issue [#1117](https://github.com/clean-css/clean-css/issues/1117) - don't change zero values inside `min`, `max`, and `clamp` functions. * Fixed issue [#1122](https://github.com/clean-css/clean-css/issues/1122) - don't wrap data URI in single quotes. * Fixed issue [#1125](https://github.com/clean-css/clean-css/issues/1125) - quotes stripped from withing `@supports` clause. * Fixed issue [#1128](https://github.com/clean-css/clean-css/issues/1128) - take variables into account when reordering properties. * Fixed issue [#1132](https://github.com/clean-css/clean-css/issues/1132) - vendor-prefixed classes inside `:not()`. * Reworks all level 1 optimizations to conform to plugin style. [4.2.3 / 2020-01-28](https://github.com/clean-css/clean-css/compare/v4.2.2...v4.2.3) ================== * Fixed issue [#1106](https://github.com/clean-css/clean-css/issues/1106) - regression in handling RGBA/HSLA colors. [4.2.2 / 2020-01-25](https://github.com/clean-css/clean-css/compare/v4.2.1...v4.2.2) ================== * Fixed error when property block has no value. * Fixed issue [#1077](https://github.com/clean-css/clean-css/issues/1077) - local fonts with color in name. * Fixed issue [#1082](https://github.com/clean-css/clean-css/issues/1082) - correctly convert colors if alpha >= 1. * Fixed issue [#1085](https://github.com/clean-css/clean-css/issues/1085) - prevent unquoting of grid elements. [4.2.1 / 2018-08-07](https://github.com/clean-css/clean-css/compare/v4.2.0...v4.2.1) ================== * Fixes giving `breakWith` option via a string. [4.2.0 / 2018-08-02](https://github.com/clean-css/clean-css/compare/4.1...v4.2.0) ================== * Adds `process` method for compatibility with optimize-css-assets-webpack-plugin. * Fixed issue [#861](https://github.com/clean-css/clean-css/issues/861) - new `transition` property optimizer. * Fixed issue [#895](https://github.com/clean-css/clean-css/issues/895) - ignoring specific styles. * Fixed issue [#947](https://github.com/clean-css/clean-css/issues/947) - selector based filtering. * Fixed issue [#964](https://github.com/clean-css/clean-css/issues/964) - adds configurable line breaks. * Fixed issue [#986](https://github.com/clean-css/clean-css/issues/986) - level 2 optimizations and CSS 4 colors. * Fixed issue [#1000](https://github.com/clean-css/clean-css/issues/1000) - carriage return handling in tokenizer. * Fixed issue [#1038](https://github.com/clean-css/clean-css/issues/1038) - `font-variation-settings` quoting. * Fixes ReDOS vulnerabilities in validator code. [4.1.11 / 2018-03-06](https://github.com/clean-css/clean-css/compare/v4.1.10...v4.1.11) ================== * Backports fixes to ReDOS vulnerabilities in validator code. [4.1.10 / 2018-03-05](https://github.com/clean-css/clean-css/compare/v4.1.9...v4.1.10) ================== * Fixed issue [#988](https://github.com/clean-css/clean-css/issues/988) - edge case in dropping default animation-duration. * Fixed issue [#989](https://github.com/clean-css/clean-css/issues/989) - edge case in removing unused at rules. * Fixed issue [#1001](https://github.com/clean-css/clean-css/issues/1001) - corrupted tokenizer state. * Fixed issue [#1006](https://github.com/clean-css/clean-css/issues/1006) - edge case in handling invalid source maps. * Fixed issue [#1008](https://github.com/clean-css/clean-css/issues/1008) - edge case in breaking up `font` shorthand. [4.1.9 / 2017-09-19](https://github.com/clean-css/clean-css/compare/v4.1.8...v4.1.9) ================== * Fixed issue [#971](https://github.com/clean-css/clean-css/issues/971) - edge case in removing unused at rules. [4.1.8 / 2017-09-02](https://github.com/clean-css/clean-css/compare/v4.1.7...v4.1.8) ================== * Fixed issue [#959](https://github.com/clean-css/clean-css/issues/959) - regression in shortening long hex values. * Fixed issue [#960](https://github.com/clean-css/clean-css/issues/960) - better explanation of `efficiency` stat. * Fixed issue [#965](https://github.com/clean-css/clean-css/issues/965) - edge case in parsing comment endings. * Fixed issue [#966](https://github.com/clean-css/clean-css/issues/966) - remote `@import`s referenced from local ones. [4.1.7 / 2017-07-14](https://github.com/clean-css/clean-css/compare/v4.1.6...v4.1.7) ================== * Fixed issue [#957](https://github.com/clean-css/clean-css/issues/957) - `0%` minification of `width` property. [4.1.6 / 2017-07-08](https://github.com/clean-css/clean-css/compare/v4.1.5...v4.1.6) ================== * Fixed issue [#887](https://github.com/clean-css/clean-css/issues/887) - edge case in serializing comments. * Fixed issue [#953](https://github.com/clean-css/clean-css/issues/953) - beautify breaks attribute selectors. [4.1.5 / 2017-06-29](https://github.com/clean-css/clean-css/compare/v4.1.4...v4.1.5) ================== * Fixed issue [#945](https://github.com/clean-css/clean-css/issues/945) - hex RGBA colors in IE filters. * Fixed issue [#952](https://github.com/clean-css/clean-css/issues/952) - parsing `@page` according to CSS3 spec. [4.1.4 / 2017-06-14](https://github.com/clean-css/clean-css/compare/v4.1.3...v4.1.4) ================== * Fixed issue [#950](https://github.com/clean-css/clean-css/issues/950) - bug in removing unused `@font-face` rules. [4.1.3 / 2017-05-18](https://github.com/clean-css/clean-css/compare/v4.1.2...v4.1.3) ================== * Fixed issue [#946](https://github.com/clean-css/clean-css/issues/946) - tokenizing `-ms-grid-columns` repeat syntax. [4.1.2 / 2017-05-10](https://github.com/clean-css/clean-css/compare/v4.1.1...v4.1.2) ================== * Fixed issue [#939](https://github.com/clean-css/clean-css/issues/939) - semicolon after `@apply` at rule. * Fixed issue [#940](https://github.com/clean-css/clean-css/issues/940) - handling more `font` keywords. * Fixed issue [#941](https://github.com/clean-css/clean-css/issues/941) - breaking up vendor prefixed `animation`. [4.1.1 / 2017-05-08](https://github.com/clean-css/clean-css/compare/v4.1.0...v4.1.1) ================== * Fixed issue [#938](https://github.com/clean-css/clean-css/issues/938) - removing unused at-rules with `!important`. [4.1.0 / 2017-05-07](https://github.com/clean-css/clean-css/compare/4.0...v4.1.0) ================== * Improves longhand-into-shorthand merging mechanism in complex cases as with `border-*` shorthands. * Fixed issue [#254](https://github.com/clean-css/clean-css/issues/254) - adds `font` property optimizer. * Fixed issue [#525](https://github.com/clean-css/clean-css/issues/525) - restores `inherit`-based merging. * Fixed issue [#755](https://github.com/clean-css/clean-css/issues/755) - adds custom handling of remote requests. * Fixed issue [#860](https://github.com/clean-css/clean-css/issues/860) - adds `animation` property optimizer. * Fixed issue [#862](https://github.com/clean-css/clean-css/issues/862) - allows removing unused at rules. * Fixed issue [#886](https://github.com/clean-css/clean-css/issues/886) - better multi pseudo class / element merging. * Fixed issue [#890](https://github.com/clean-css/clean-css/issues/890) - adds toggle to disable empty tokens removal. * Fixed issue [#893](https://github.com/clean-css/clean-css/issues/893) - `inline: false` as alias to `inline: 'none'`. * Fixed issue [#905](https://github.com/clean-css/clean-css/issues/905) - allows disabling selector sorting. * Fixed issue [#906](https://github.com/clean-css/clean-css/issues/906) - improves usability of web UI settings. * Fixed issue [#908](https://github.com/clean-css/clean-css/issues/908) - improved `minify` method signature. * Fixed issue [#916](https://github.com/clean-css/clean-css/issues/916) - maximum number of merged selectors. * Fixed issue [#920](https://github.com/clean-css/clean-css/issues/920) - allows skipping certain properties in level 2 optimizations. * Fixed issue [#934](https://github.com/clean-css/clean-css/issues/934) - smarter longhand into shorthand merging. [4.0.13 / 2017-05-10](https://github.com/clean-css/clean-css/compare/v4.0.12...v4.0.13) ================== * Backports [#939](https://github.com/clean-css/clean-css/issues/939) - semicolon after `@apply` at rule. [4.0.12 / 2017-04-12](https://github.com/clean-css/clean-css/compare/v4.0.11...v4.0.12) ================== * Fixed issue [#930](https://github.com/clean-css/clean-css/issues/930) - regression in tidying selectors. [4.0.11 / 2017-04-04](https://github.com/clean-css/clean-css/compare/v4.0.10...v4.0.11) ================== * Fixed issue [#924](https://github.com/clean-css/clean-css/issues/924) - `hsl` zero percent eager optimization. [4.0.10 / 2017-03-22](https://github.com/clean-css/clean-css/compare/v4.0.9...v4.0.10) ================== * Fixed issue [#917](https://github.com/clean-css/clean-css/issues/917) - prevents grid area unquoting. * Backported [#916](https://github.com/clean-css/clean-css/issues/916) - maximum number of merged selectors. * Refixed issue [#556](https://github.com/clean-css/clean-css/issues/556) - IE backslash hacks. [4.0.9 / 2017-03-15](https://github.com/clean-css/clean-css/compare/v4.0.8...v4.0.9) ================== * Fixed issue [#902](https://github.com/clean-css/clean-css/issues/902) - case insensitive attribute matchers. * Fixed issue [#903](https://github.com/clean-css/clean-css/issues/903) - web UI and source maps. * Fixed issue [#907](https://github.com/clean-css/clean-css/issues/907) - space after closing brace in `@supports`. * Fixed issue [#910](https://github.com/clean-css/clean-css/issues/910) - too aggressive precision optimizations. [4.0.8 / 2017-02-22](https://github.com/clean-css/clean-css/compare/v4.0.7...v4.0.8) ================== * Fixes edge case in remote stylesheet fetching. * Fixed issue [#899](https://github.com/clean-css/clean-css/issues/899) - regression in optimizing pseudo class arguments. [4.0.7 / 2017-02-14](https://github.com/clean-css/clean-css/compare/v4.0.6...v4.0.7) ================== * Fixed issue [#891](https://github.com/clean-css/clean-css/issues/891) - merging vendor-prefixed pseudo-classes. [4.0.6 / 2017-02-10](https://github.com/clean-css/clean-css/compare/v4.0.5...v4.0.6) ================== * Fixed issue [#885](https://github.com/clean-css/clean-css/issues/885) - unquoting `font-feature-settings`. [4.0.5 / 2017-02-07](https://github.com/clean-css/clean-css/compare/v4.0.4...v4.0.5) ================== * Fixed issue [#884](https://github.com/clean-css/clean-css/issues/884) - handling absolute paths on Windows. * Fixed issue [#881](https://github.com/clean-css/clean-css/issues/881) - incorrect `require` arity. * Fixed issue [#880](https://github.com/clean-css/clean-css/issues/880) - incorrect token type identification. [4.0.4 / 2017-02-04](https://github.com/clean-css/clean-css/compare/v4.0.3...v4.0.4) ================== * Fixed issue [#879](https://github.com/clean-css/clean-css/issues/879) - incorrect handling of spaces in paths. * Fixed issue [#878](https://github.com/clean-css/clean-css/issues/878) - invalid double backslash tokenization. [4.0.3 / 2017-01-30](https://github.com/clean-css/clean-css/compare/v4.0.2...v4.0.3) ================== * Fixed issue [#875](https://github.com/clean-css/clean-css/issues/875) - invalid traversing in semantic merging. [4.0.2 / 2017-01-26](https://github.com/clean-css/clean-css/compare/v4.0.1...v4.0.2) ================== * Fixed issue [#874](https://github.com/clean-css/clean-css/issues/874) - regression in at-rule tokenization. [4.0.1 / 2017-01-25](https://github.com/clean-css/clean-css/compare/v4.0.0...v4.0.1) ================== * Fixed issue [#866](https://github.com/clean-css/clean-css/issues/866) - edge case in `inline` option. * Fixed issue [#867](https://github.com/clean-css/clean-css/issues/867) - skip optimizing variable values. * Fixed issue [#868](https://github.com/clean-css/clean-css/issues/868) - accept absolute paths in input hash. * Fixed issue [#872](https://github.com/clean-css/clean-css/issues/872) - edge case in CSS tokenization. [4.0.0 / 2017-01-23](https://github.com/clean-css/clean-css/compare/v3.4.24...v4.0.0) ================== * Adds more detailed error & warning messages on top of the new tokenizer. * Disables restructuring optimizations by default until optimized in #533. * Fixes a bug ignoring incorrect properties in complex restructuring. * Requires Node.js 4.0+ to run. * Removes `benchmark` API option as total time is always reported under `stats` property. * Removes `debug` API switch as stats are always gathered and available under `stats` property. * Replaces the old tokenizer with a new one which doesn't use any escaping. * Replaces the old `@import` inlining with one on top of the new tokenizer. * Re-enables `background-(clip|origin|size)` merging with `background` shorthand. * Simplifies URL rebasing with a single `rebaseTo` option in API or inferred from `--output` in CLI. * Splits `inliner` option into `inlineRequest` and `inlineTimeout`. * Fixed issue [#209](https://github.com/clean-css/clean-css/issues/209) - adds output formatting via `format` flag. * Fixed issue [#290](https://github.com/clean-css/clean-css/issues/290) - removes aggressive merging. * Fixed issue [#432](https://github.com/clean-css/clean-css/issues/432) - adds URLs normalization. * Fixed issue [#460](https://github.com/clean-css/clean-css/issues/460) - unescaped semicolon in selector. * Fixed issue [#657](https://github.com/clean-css/clean-css/issues/657) - adds property name validation. * Fixed issue [#685](https://github.com/clean-css/clean-css/issues/685) - adds lowercasing hex colors optimization. * Fixed issue [#686](https://github.com/clean-css/clean-css/issues/686) - adds rounding precision for all units. * Fixed issue [#703](https://github.com/clean-css/clean-css/issues/703) - changes default IE compatibility to 10+. * Fixed issue [#731](https://github.com/clean-css/clean-css/issues/731) - adds granular control over level 2 optimizations. * Fixed issue [#739](https://github.com/clean-css/clean-css/issues/739) - error when a closing brace is missing. * Fixed issue [#750](https://github.com/clean-css/clean-css/issues/750) - allows `width` overriding. * Fixed issue [#756](https://github.com/clean-css/clean-css/issues/756) - adds disabling font-weight optimizations. * Fixed issue [#758](https://github.com/clean-css/clean-css/issues/758) - ignores rules with empty selector. * Fixed issue [#767](https://github.com/clean-css/clean-css/issues/767) - disables remote `@import` inlining by default. * Fixed issue [#773](https://github.com/clean-css/clean-css/issues/773) - adds reordering based on selector specificity. * Fixed issue [#785](https://github.com/clean-css/clean-css/issues/785) - adds `@font-face` de-duplication. * Fixed issue [#791](https://github.com/clean-css/clean-css/issues/791) - resolves imports in-memory if possible. * Fixed issue [#796](https://github.com/clean-css/clean-css/issues/796) - semantic merging for `@media` blocks. * Fixed issue [#801](https://github.com/clean-css/clean-css/issues/801) - smarter `@import` inlining. * Fixed issue [#806](https://github.com/clean-css/clean-css/issues/806) - skip optimizing variable properties. * Fixed issue [#817](https://github.com/clean-css/clean-css/issues/817) - makes `off` disable rounding. * Fixed issue [#818](https://github.com/clean-css/clean-css/issues/818) - disables `px` rounding by default. * Fixed issue [#828](https://github.com/clean-css/clean-css/issues/828) - `-chrome-` hack support. * Fixed issue [#829](https://github.com/clean-css/clean-css/issues/829) - adds more strict selector merging rules. * Fixed issue [#834](https://github.com/clean-css/clean-css/issues/834) - adds extra line break in nested blocks. * Fixed issue [#836](https://github.com/clean-css/clean-css/issues/836) - enables level `0` optimizations. * Fixed issue [#839](https://github.com/clean-css/clean-css/issues/839) - allows URIs in import inlining rules. * Fixed issue [#840](https://github.com/clean-css/clean-css/issues/840) - allows input source map as map object. * Fixed issue [#843](https://github.com/clean-css/clean-css/issues/843) - regression in selector handling. * Fixed issue [#845](https://github.com/clean-css/clean-css/issues/845) - web compatibility of 4.0 branch. * Fixed issue [#847](https://github.com/clean-css/clean-css/issues/847) - regression in handling invalid selectors. * Fixed issue [#849](https://github.com/clean-css/clean-css/issues/849) - disables inlining protocol-less resources. * Fixed issue [#856](https://github.com/clean-css/clean-css/issues/856) - allows `minify` to return a promise. * Fixed issue [#857](https://github.com/clean-css/clean-css/issues/857) - normalizes CleanCSS API interface. * Fixed issue [#863](https://github.com/clean-css/clean-css/issues/863) - adds `transform` callback for custom optimizations. [3.4.26 / 2017-05-10](https://github.com/clean-css/clean-css/compare/v3.4.25...v3.4.26) ================== * Backports [#939](https://github.com/clean-css/clean-css/issues/939) - semicolon after `@apply` at-rule. [3.4.25 / 2017-02-22](https://github.com/clean-css/clean-css/compare/v3.4.24...v3.4.25) ================== * Fixed issue [#897](https://github.com/clean-css/clean-css/issues/897) - tokenization with escaped markers. [3.4.24 / 2017-01-20](https://github.com/clean-css/clean-css/compare/v3.4.23...v3.4.24) ================== * Fixed issue [#859](https://github.com/clean-css/clean-css/issues/859) - avoid `-webkit-border-radius` optimizations. [3.4.23 / 2016-12-17](https://github.com/clean-css/clean-css/compare/v3.4.22...v3.4.23) ================== * Fixed issue [#844](https://github.com/clean-css/clean-css/issues/844) - regression in property values extraction. [3.4.22 / 2016-12-12](https://github.com/clean-css/clean-css/compare/v3.4.21...v3.4.22) ================== * Fixed issue [#841](https://github.com/clean-css/clean-css/issues/841) - disabled importing and files passed as array. * Ignores `@import` at-rules if appearing after any non-`@import` rules. [3.4.21 / 2016-11-16](https://github.com/clean-css/clean-css/compare/v3.4.20...v3.4.21) ================== * Fixed issue [#821](https://github.com/clean-css/clean-css/issues/821) - reducing non-adjacent rules. * Fixed issue [#830](https://github.com/clean-css/clean-css/issues/830) - reordering border-* properties. * Fixed issue [#833](https://github.com/clean-css/clean-css/issues/833) - moving `@media` queries. [3.4.20 / 2016-09-26](https://github.com/clean-css/clean-css/compare/v3.4.19...v3.4.20) ================== * Fixed issue [#814](https://github.com/clean-css/clean-css/issues/814) - `:selection` rule merging. [3.4.19 / 2016-07-25](https://github.com/clean-css/clean-css/compare/v3.4.18...v3.4.19) ================== * Fixed issue [#795](https://github.com/clean-css/clean-css/issues/795) - `!important` and override compacting. [3.4.18 / 2016-06-15](https://github.com/clean-css/clean-css/compare/v3.4.17...v3.4.18) ================== * Fixed issue [#787](https://github.com/clean-css/clean-css/issues/787) - regression in processing data URIs. [3.4.17 / 2016-06-04](https://github.com/clean-css/clean-css/compare/v3.4.16...v3.4.17) ================== * Fixed issue [#783](https://github.com/clean-css/clean-css/issues/783) - regression in processing data URIs. [3.4.16 / 2016-06-02](https://github.com/clean-css/clean-css/compare/v3.4.15...v3.4.16) ================== * Fixed issue [#781](https://github.com/clean-css/clean-css/issues/781) - regression in override compacting. * Fixed issue [#782](https://github.com/clean-css/clean-css/issues/782) - regression in processing data URIs. [3.4.15 / 2016-06-01](https://github.com/clean-css/clean-css/compare/v3.4.14...v3.4.15) ================== * Fixed issue [#776](https://github.com/clean-css/clean-css/issues/776) - edge case in quoted data URIs. * Fixed issue [#779](https://github.com/clean-css/clean-css/issues/779) - merging `background-(position|size)`. * Fixed issue [#780](https://github.com/clean-css/clean-css/issues/780) - space after inlined variables. [3.4.14 / 2016-05-31](https://github.com/clean-css/clean-css/compare/v3.4.13...v3.4.14) ================== * Fixed issue [#751](https://github.com/clean-css/clean-css/issues/751) - stringifying CSS variables. * Fixed issue [#763](https://github.com/clean-css/clean-css/issues/763) - data URI SVG and quoting. * Fixed issue [#765](https://github.com/clean-css/clean-css/issues/765) - two values of border-radius. * Fixed issue [#768](https://github.com/clean-css/clean-css/issues/768) - invalid border-radius property. [3.4.13 / 2016-05-23](https://github.com/clean-css/clean-css/compare/v3.4.12...v3.4.13) ================== * Fixed issue [#734](https://github.com/clean-css/clean-css/issues/769) - Node.js 6.x support. [3.4.12 / 2016-04-09](https://github.com/clean-css/clean-css/compare/v3.4.11...v3.4.12) ================== * Fixed issue [#734](https://github.com/clean-css/clean-css/issues/734) - `--root` option edge case. * Fixed issue [#758](https://github.com/clean-css/clean-css/issues/758) - treats empty rule as unmergeable. [3.4.11 / 2016-04-01](https://github.com/clean-css/clean-css/compare/v3.4.10...v3.4.11) ================== * Fixed issue [#738](https://github.com/clean-css/clean-css/issues/738) - edge case in comment processing. * Fixed issue [#741](https://github.com/clean-css/clean-css/issues/741) - HTTP proxy with HTTPS inlining. * Fixed issue [#743](https://github.com/clean-css/clean-css/issues/743) - background shorthand and source maps. * Fixed issue [#745](https://github.com/clean-css/clean-css/issues/745) - matching mixed case `!important`. [3.4.10 / 2016-02-29](https://github.com/clean-css/clean-css/compare/v3.4.9...v3.4.10) ================== * Fixed issue [#735](https://github.com/clean-css/clean-css/issues/735) - whitespace removal with escaped chars. [3.4.9 / 2016-01-03](https://github.com/clean-css/clean-css/compare/v3.4.8...v3.4.9) ================== * Sped up merging by body advanced optimization. * Fixed issue [#693](https://github.com/clean-css/clean-css/issues/693) - restructuring edge case. * Fixed issue [#711](https://github.com/clean-css/clean-css/issues/711) - border fuzzy matching. * Fixed issue [#714](https://github.com/clean-css/clean-css/issues/714) - stringifying property level at rules. * Fixed issue [#715](https://github.com/clean-css/clean-css/issues/715) - stack too deep in comment scan. [3.4.8 / 2015-11-13](https://github.com/clean-css/clean-css/compare/v3.4.7...v3.4.8) ================== * Fixed issue [#676](https://github.com/clean-css/clean-css/issues/676) - fuzzy matching unqoted data URIs. [3.4.7 / 2015-11-10](https://github.com/clean-css/clean-css/compare/v3.4.6...v3.4.7) ================== * Fixed issue [#692](https://github.com/clean-css/clean-css/issues/692) - edge case in URL quoting. * Fixed issue [#695](https://github.com/clean-css/clean-css/issues/695) - shorthand overriding edge case. * Fixed issue [#699](https://github.com/clean-css/clean-css/issues/699) - IE9 transparent hack. * Fixed issue [#701](https://github.com/clean-css/clean-css/issues/701) - `url` quoting with hash arguments. [3.4.6 / 2015-10-14](https://github.com/clean-css/clean-css/compare/v3.4.5...v3.4.6) ================== * Fixed issue [#679](https://github.com/clean-css/clean-css/issues/679) - wrong rebasing of remote URLs. [3.4.5 / 2015-09-28](https://github.com/clean-css/clean-css/compare/v3.4.4...v3.4.5) ================== * Fixed issue [#681](https://github.com/clean-css/clean-css/issues/681) - property inheritance & restructuring. * Fixed issue [#675](https://github.com/clean-css/clean-css/issues/675) - overriding with `!important`. [3.4.4 / 2015-09-21](https://github.com/clean-css/clean-css/compare/v3.4.3...v3.4.4) ================== * Fixed issue [#626](https://github.com/clean-css/clean-css/issues/626) - edge case in import rebasing. * Fixed issue [#674](https://github.com/clean-css/clean-css/issues/674) - adjacent merging order. [3.4.3 / 2015-09-15](https://github.com/clean-css/clean-css/compare/v3.4.2...v3.4.3) ================== * Fixed issue [#668](https://github.com/clean-css/clean-css/issues/668) - node v4 path.join. * Fixed issue [#669](https://github.com/clean-css/clean-css/issues/669) - adjacent overriding with `!important`. [3.4.2 / 2015-09-14](https://github.com/clean-css/clean-css/compare/v3.4.1...v3.4.2) ================== * Fixed issue [#598](https://github.com/clean-css/clean-css/issues/598) - restructuring border properties. * Fixed issue [#654](https://github.com/clean-css/clean-css/issues/654) - disables length optimizations. * Fixed issue [#655](https://github.com/clean-css/clean-css/issues/655) - shorthands override merging. * Fixed issue [#660](https://github.com/clean-css/clean-css/issues/660) - !important token overriding. * Fixed issue [#662](https://github.com/clean-css/clean-css/issues/662) - !important selector reducing. * Fixed issue [#667](https://github.com/clean-css/clean-css/issues/667) - rebasing remote URLs. [3.4.1 / 2015-08-27](https://github.com/clean-css/clean-css/compare/v3.4.0...v3.4.1) ================== * Fixed issue [#652](https://github.com/clean-css/clean-css/issues/652) - order of restoring and removing tokens. [3.4.0 / 2015-08-27](https://github.com/clean-css/clean-css/compare/v3.3.10...v3.4.0) ================== * Adds an option for a fine-grained `@import` control. * Adds unit compatibility switches to disable length optimizations. * Adds inferring proxy settings from HTTP_PROXY environment variable. * Adds support for Polymer / Web Components special selectors. * Adds support for Polymer mixins. * Adds testing source maps in batch mode. * Unifies wrappers for simple & advanced optimizations. * Fixed issue [#596](https://github.com/clean-css/clean-css/issues/596) - support for !ie IE<8 hack. * Fixed issue [#599](https://github.com/clean-css/clean-css/issues/599) - support for inlined source maps. * Fixed issue [#607](https://github.com/clean-css/clean-css/issues/607) - adds better rule reordering. * Fixed issue [#612](https://github.com/clean-css/clean-css/issues/612) - adds HTTP proxy support. * Fixed issue [#618](https://github.com/clean-css/clean-css/issues/618) - adds safer function validation. * Fixed issue [#625](https://github.com/clean-css/clean-css/issues/625) - adds length unit optimizations. * Fixed issue [#632](https://github.com/clean-css/clean-css/issues/632) - adds disabling remote `import`s. * Fixed issue [#635](https://github.com/clean-css/clean-css/issues/635) - adds safer `0%` optimizations. * Fixed issue [#644](https://github.com/clean-css/clean-css/issues/644) - adds time unit optimizations. * Fixed issue [#645](https://github.com/clean-css/clean-css/issues/645) - adds bottom to top `media` merging. * Fixed issue [#648](https://github.com/clean-css/clean-css/issues/648) - adds property level at-rule support. [3.3.10 / 2015-08-27](https://github.com/clean-css/clean-css/compare/v3.3.9...v3.3.10) ================== * Adds better comments + keepBreaks handling. * Adds better text normalizing in source maps mode. * Fixes non-adjacent optimizations for source maps. * Fixes removing unused items. * Improves `outline` break up with source maps. * Refixed issue [#629](https://github.com/clean-css/clean-css/issues/629) - source maps & background shorthands. [3.3.9 / 2015-08-09](https://github.com/clean-css/clean-css/compare/v3.3.8...v3.3.9) ================== * Fixed issue [#640](https://github.com/clean-css/clean-css/issues/640) - URI processing regression. [3.3.8 / 2015-08-06](https://github.com/clean-css/clean-css/compare/v3.3.7...v3.3.8) ================== * Fixed issue [#629](https://github.com/clean-css/clean-css/issues/629) - source maps & background shorthands. * Fixed issue [#630](https://github.com/clean-css/clean-css/issues/630) - vendor prefixed flex optimizations. * Fixed issue [#633](https://github.com/clean-css/clean-css/issues/633) - handling data URI with brackets. * Fixed issue [#634](https://github.com/clean-css/clean-css/issues/634) - merging :placeholder selectors. [3.3.7 / 2015-07-29](https://github.com/clean-css/clean-css/compare/v3.3.6...v3.3.7) ================== * Fixed issue [#616](https://github.com/clean-css/clean-css/issues/616) - ordering in restructuring. [3.3.6 / 2015-07-14](https://github.com/clean-css/clean-css/compare/v3.3.5...v3.3.6) ================== * Fixed issue [#620](https://github.com/clean-css/clean-css/issues/620) - `bold` style in font shorthands. [3.3.5 / 2015-07-01](https://github.com/clean-css/clean-css/compare/v3.3.4...v3.3.5) ================== * Fixed issue [#608](https://github.com/clean-css/clean-css/issues/608) - custom URI protocols handling. [3.3.4 / 2015-06-24](https://github.com/clean-css/clean-css/compare/v3.3.3...v3.3.4) ================== * Fixed issue [#610](https://github.com/clean-css/clean-css/issues/610) - `border:inherit` restoring. * Fixed issue [#611](https://github.com/clean-css/clean-css/issues/611) - edge case in quote stripping. [3.3.3 / 2015-06-16](https://github.com/clean-css/clean-css/compare/v3.3.2...v3.3.3) ================== * Fixed issue [#603](https://github.com/clean-css/clean-css/issues/603) - IE suffix hack defaults to on. [3.3.2 / 2015-06-14](https://github.com/clean-css/clean-css/compare/v3.3.1...v3.3.2) ================== * Fixed issue [#595](https://github.com/clean-css/clean-css/issues/595) - more relaxed block matching. * Fixed issue [#601](https://github.com/clean-css/clean-css/issues/601) - percentage minifying inside `flex`. * Fixed issue [#602](https://github.com/clean-css/clean-css/issues/602) - backslash IE hacks after a space. [3.3.1 / 2015-06-02](https://github.com/clean-css/clean-css/compare/v3.3.0...v3.3.1) ================== * Fixed issue [#590](https://github.com/clean-css/clean-css/issues/590) - edge case in `@import` processing. [3.3.0 / 2015-05-31](https://github.com/clean-css/clean-css/compare/v3.2.11...v3.3.0) ================== * Cleans up url rebase code getting rid of unnecessary state. * Cleans up tokenizer code getting rid of unnecessary state. * Moves source maps tracker into lib/source-maps/track. * Moves tokenizer code into lib/tokenizer. * Moves URL scanner into lib/urls/reduce (was named incorrectly before). * Moves URL rebasing & rewriting into lib/urls. * Fixed issue [#375](https://github.com/clean-css/clean-css/issues/375) - unit compatibility switches. * Fixed issue [#436](https://github.com/clean-css/clean-css/issues/436) - refactors URI rewriting. * Fixed issue [#448](https://github.com/clean-css/clean-css/issues/448) - rebasing no protocol URIs. * Fixed issue [#517](https://github.com/clean-css/clean-css/issues/517) - turning off color optimizations. * Fixed issue [#542](https://github.com/clean-css/clean-css/issues/542) - space after closing brace in IE. * Fixed issue [#562](https://github.com/clean-css/clean-css/issues/562) - optimizing invalid color values. * Fixed issue [#563](https://github.com/clean-css/clean-css/issues/563) - `background:inherit` restoring. * Fixed issue [#570](https://github.com/clean-css/clean-css/issues/570) - rebasing "no-url()" imports. * Fixed issue [#574](https://github.com/clean-css/clean-css/issues/574) - rewriting internal URLs. * Fixed issue [#575](https://github.com/clean-css/clean-css/issues/575) - missing directory as a `target`. * Fixed issue [#577](https://github.com/clean-css/clean-css/issues/577) - `background-clip` into shorthand. * Fixed issue [#579](https://github.com/clean-css/clean-css/issues/579) - `background-origin` into shorthand. * Fixed issue [#580](https://github.com/clean-css/clean-css/issues/580) - mixed `@import` processing. * Fixed issue [#582](https://github.com/clean-css/clean-css/issues/582) - overriding with prefixed values. * Fixed issue [#583](https://github.com/clean-css/clean-css/issues/583) - URL quoting for SVG data. * Fixed issue [#587](https://github.com/clean-css/clean-css/issues/587) - too aggressive `border` reordering. [3.2.11 / 2015-05-31](https://github.com/clean-css/clean-css/compare/v3.2.10...v3.2.11) ================== * Fixed issue [#563](https://github.com/clean-css/clean-css/issues/563) - `background:inherit` restoring. * Fixed issue [#582](https://github.com/clean-css/clean-css/issues/582) - overriding with prefixed values. * Fixed issue [#583](https://github.com/clean-css/clean-css/issues/583) - URL quoting for SVG data. * Fixed issue [#587](https://github.com/clean-css/clean-css/issues/587) - too aggressive `border` reordering. [3.2.10 / 2015-05-14](https://github.com/clean-css/clean-css/compare/v3.2.9...v3.2.10) ================== * Fixed issue [#572](https://github.com/clean-css/clean-css/issues/572) - empty elements removal. [3.2.9 / 2015-05-08](https://github.com/clean-css/clean-css/compare/v3.2.8...v3.2.9) ================== * Fixed issue [#567](https://github.com/clean-css/clean-css/issues/567) - merging colors as functions. [3.2.8 / 2015-05-04](https://github.com/clean-css/clean-css/compare/v3.2.7...v3.2.8) ================== * Fixed issue [#561](https://github.com/clean-css/clean-css/issues/561) - restructuring special selectors. [3.2.7 / 2015-05-03](https://github.com/clean-css/clean-css/compare/v3.2.6...v3.2.7) ================== * Fixed issue [#551](https://github.com/clean-css/clean-css/issues/551) - edge case in restructuring. * Fixed issue [#553](https://github.com/clean-css/clean-css/issues/553) - another style of SVG fallback. * Fixed issue [#558](https://github.com/clean-css/clean-css/issues/558) - units in same selector merging. [3.2.6 / 2015-04-28](https://github.com/clean-css/clean-css/compare/v3.2.5...v3.2.6) ================== * Fixed issue [#550](https://github.com/clean-css/clean-css/issues/550) - proper `contentSources` tracking. * Fixed issue [#556](https://github.com/clean-css/clean-css/issues/556) - regression in IE backslash hacks. [3.2.5 / 2015-04-25](https://github.com/clean-css/clean-css/compare/v3.2.4...v3.2.5) ================== * Fixed issue [#543](https://github.com/clean-css/clean-css/issues/543) - better "comment in body" handling. * Fixed issue [#548](https://github.com/clean-css/clean-css/issues/548) - regression in font minifying. * Fixed issue [#549](https://github.com/clean-css/clean-css/issues/549) - special comments in source maps. [3.2.4 / 2015-04-24](https://github.com/clean-css/clean-css/compare/v3.2.3...v3.2.4) ================== * Fixed issue [#544](https://github.com/clean-css/clean-css/issues/544) - regression in same value merging. * Fixed issue [#546](https://github.com/clean-css/clean-css/issues/546) - IE<11 `calc()` issue. [3.2.3 / 2015-04-22](https://github.com/clean-css/clean-css/compare/v3.2.2...v3.2.3) ================== * Fixed issue [#541](https://github.com/clean-css/clean-css/issues/541) - `outline-style:auto` in shorthand. [3.2.2 / 2015-04-21](https://github.com/clean-css/clean-css/compare/v3.2.1...v3.2.2) ================== * Fixed issue [#537](https://github.com/clean-css/clean-css/issues/537) - regression in simple optimizer. [3.2.1 / 2015-04-20](https://github.com/clean-css/clean-css/compare/v3.2.0...v3.2.1) ================== * Fixed issue [#534](https://github.com/clean-css/clean-css/issues/534) - wrong `@font-face` stringifying. [3.2.0 / 2015-04-19](https://github.com/clean-css/clean-css/compare/v3.1.9...v3.2.0) ================== * Bumps commander to 2.8.x. * Fixes remote asset rebasing when passing data as a hash. * Improves path resolution inside source maps. * Makes `root` option implicitely default to `process.cwd()`. * Fixed issue [#371](https://github.com/clean-css/clean-css/issues/371) - `background` fallback with `none`. * Fixed issue [#376](https://github.com/clean-css/clean-css/issues/376) - option to disable `0[unit]` -> `0`. * Fixed issue [#396](https://github.com/clean-css/clean-css/issues/396) - better input source maps tracking. * Fixed issue [#397](https://github.com/clean-css/clean-css/issues/397) - support for source map sources. * Fixed issue [#399](https://github.com/clean-css/clean-css/issues/399) - support compacting with source maps. * Fixed issue [#429](https://github.com/clean-css/clean-css/issues/429) - unifies data tokenization. * Fixed issue [#446](https://github.com/clean-css/clean-css/issues/446) - `list-style` fuzzy matching. * Fixed issue [#468](https://github.com/clean-css/clean-css/issues/468) - bumps `source-map` to 0.4.x. * Fixed issue [#480](https://github.com/clean-css/clean-css/issues/480) - extracting uppercase property names. * Fixed issue [#487](https://github.com/clean-css/clean-css/issues/487) - source map paths under Windows. * Fixed issue [#490](https://github.com/clean-css/clean-css/issues/490) - vendor prefixed multivalue `background`. * Fixed issue [#500](https://github.com/clean-css/clean-css/issues/500) - merging duplicate adjacent properties. * Fixed issue [#504](https://github.com/clean-css/clean-css/issues/504) - keeping `url()` quotes. * Fixed issue [#507](https://github.com/clean-css/clean-css/issues/507) - merging longhands into many shorthands. * Fixed issue [#508](https://github.com/clean-css/clean-css/issues/508) - removing duplicate media queries. * Fixed issue [#521](https://github.com/clean-css/clean-css/issues/521) - unit optimizations inside `calc()`. * Fixed issue [#524](https://github.com/clean-css/clean-css/issues/524) - timeouts in `@import` inlining. * Fixed issue [#526](https://github.com/clean-css/clean-css/issues/526) - shorthand overriding into a function. * Fixed issue [#528](https://github.com/clean-css/clean-css/issues/528) - better support for IE<9 hacks. * Fixed issue [#529](https://github.com/clean-css/clean-css/issues/529) - wrong font weight minification. [3.1.9 / 2015-04-04](https://github.com/clean-css/clean-css/compare/v3.1.8...v3.1.9) ================== * Fixes issue [#511](https://github.com/clean-css/clean-css/issues/511) - `)` advanced processing. [3.1.8 / 2015-03-17](https://github.com/clean-css/clean-css/compare/v3.1.7...v3.1.8) ================== * Fixes issue [#498](https://github.com/clean-css/clean-css/issues/498) - reordering and flexbox. * Fixes issue [#499](https://github.com/clean-css/clean-css/issues/499) - too aggressive `-` removal. [3.1.7 / 2015-03-16](https://github.com/clean-css/clean-css/compare/v3.1.6...v3.1.7) ================== * Backports fix to [#480](https://github.com/clean-css/clean-css/issues/480) - reordering and uppercase properties. * Fixes issue [#496](https://github.com/clean-css/clean-css/issues/496) - space after bracket removal. [3.1.6 / 2015-03-12](https://github.com/clean-css/clean-css/compare/v3.1.5...v3.1.6) ================== * Fixes issue [#489](https://github.com/clean-css/clean-css/issues/489) - `AlphaImageLoader` IE filter. [3.1.5 / 2015-03-06](https://github.com/clean-css/clean-css/compare/v3.1.4...v3.1.5) ================== * Fixes issue [#483](https://github.com/clean-css/clean-css/issues/483) - property order in restructuring. [3.1.4 / 2015-03-04](https://github.com/clean-css/clean-css/compare/v3.1.3...v3.1.4) ================== * Fixes issue [#472](https://github.com/clean-css/clean-css/issues/472) - broken function minification. * Fixes issue [#477](https://github.com/clean-css/clean-css/issues/477) - `@import`s order in restructuring. * Fixes issue [#478](https://github.com/clean-css/clean-css/issues/478) - ultimate fix to brace whitespace. [3.1.3 / 2015-03-03](https://github.com/clean-css/clean-css/compare/v3.1.2...v3.1.3) ================== * Fixes issue [#464](https://github.com/clean-css/clean-css/issues/464) - data URI with quoted braces. * Fixes issue [#475](https://github.com/clean-css/clean-css/issues/475) - whitespace after closing brace. [3.1.2 / 2015-03-01](https://github.com/clean-css/clean-css/compare/v3.1.1...v3.1.2) ================== * Refixed issue [#471](https://github.com/clean-css/clean-css/issues/471) - correct order after restructuring. * Fixes issue [#466](https://github.com/clean-css/clean-css/issues/466) - rebuilding background shorthand. * Fixes issue [#462](https://github.com/clean-css/clean-css/issues/462) - escaped apostrophes in selectors. [3.1.1 / 2015-02-27](https://github.com/clean-css/clean-css/compare/v3.1.0...v3.1.1) ================== * Fixed issue [#469](https://github.com/clean-css/clean-css/issues/469) - extracting broken property. * Fixed issue [#470](https://github.com/clean-css/clean-css/issues/470) - negative padding removal. * Fixed issue [#471](https://github.com/clean-css/clean-css/issues/471) - correct order after restructuring. [3.1.0 / 2015-02-26](https://github.com/clean-css/clean-css/compare/v3.0.10...v3.1.0) ================== * Adds `0deg` to `0` minification where possible. * Adds better non-adjacent selector merging when body is the same. * Adds official support for node.js 0.12. * Adds official support for io.js 1.0. * Adds restructuring optimizations to reorganize selectors, which vastly improves minification. * Fixed issue [#158](https://github.com/clean-css/clean-css/issues/158) - adds body-based selectors reduction. * Fixed issue [#182](https://github.com/clean-css/clean-css/issues/182) - removing space after closing brace. * Fixed issue [#204](https://github.com/clean-css/clean-css/issues/204) - `@media` merging. * Fixed issue [#351](https://github.com/clean-css/clean-css/issues/351) - remote `@import`s after content. * Fixed issue [#357](https://github.com/clean-css/clean-css/issues/357) - non-standard but valid URLs. * Fixed issue [#416](https://github.com/clean-css/clean-css/issues/416) - accepts hash as `minify` argument. * Fixed issue [#419](https://github.com/clean-css/clean-css/issues/419) - multiple input source maps. * Fixed issue [#435](https://github.com/clean-css/clean-css/issues/435) - `background-clip` in shorthand. * Fixed issue [#439](https://github.com/clean-css/clean-css/issues/439) - `background-origin` in shorthand. * Fixed issue [#442](https://github.com/clean-css/clean-css/issues/442) - space before adjacent `nav`. * Fixed issue [#445](https://github.com/clean-css/clean-css/issues/445) - regression issue in url processor. * Fixed issue [#449](https://github.com/clean-css/clean-css/issues/449) - warns of missing close braces. * Fixed issue [#463](https://github.com/clean-css/clean-css/issues/463) - relative remote `@import` URLs. [3.0.10 / 2015-02-07](https://github.com/clean-css/clean-css/compare/v3.0.9...v3.0.10) ================== * Fixed issue [#453](https://github.com/clean-css/clean-css/issues/453) - double `background-repeat`. * Fixed issue [#455](https://github.com/clean-css/clean-css/issues/455) - property extracting regression. [3.0.9 / 2015-02-04](https://github.com/clean-css/clean-css/compare/v3.0.8...v3.0.9) ================== * Fixed issue [#452](https://github.com/clean-css/clean-css/issues/452) - regression in advanced merging. [3.0.8 / 2015-01-31](https://github.com/clean-css/clean-css/compare/v3.0.7...v3.0.8) ================== * Fixed issue [#447](https://github.com/clean-css/clean-css/issues/447) - `background-color` in shorthands. * Fixed issue [#450](https://github.com/clean-css/clean-css/issues/450) - name to hex color converting. [3.0.7 / 2015-01-22](https://github.com/clean-css/clean-css/compare/v3.0.6...v3.0.7) ================== * Fixed issue [#441](https://github.com/clean-css/clean-css/issues/441) - hex to name color converting. [3.0.6 / 2015-01-20](https://github.com/clean-css/clean-css/compare/v3.0.5...v3.0.6) ================== * Refixed issue [#414](https://github.com/clean-css/clean-css/issues/414) - source maps position fallback. [3.0.5 / 2015-01-18](https://github.com/clean-css/clean-css/compare/v3.0.4...v3.0.5) ================== * Fixed issue [#414](https://github.com/clean-css/clean-css/issues/414) - source maps position fallback. * Fixed issue [#433](https://github.com/clean-css/clean-css/issues/433) - meging `!important` in shorthands. [3.0.4 / 2015-01-11](https://github.com/clean-css/clean-css/compare/v3.0.3...v3.0.4) ================== * Fixed issue [#314](https://github.com/clean-css/clean-css/issues/314) - spaces inside `calc`. [3.0.3 / 2015-01-07](https://github.com/clean-css/clean-css/compare/v3.0.2...v3.0.3) ================== * Just a version bump as npm incorrectly things 2.2.23 is the latest one. [3.0.2 / 2015-01-04](https://github.com/clean-css/clean-css/compare/v3.0.1...v3.0.2) ================== * Fixed issue [#422](https://github.com/clean-css/clean-css/issues/422) - handling `calc` as a unit. [3.0.1 / 2014-12-19](https://github.com/clean-css/clean-css/compare/v3.0.0...v3.0.1) ================== * Fixed issue [#410](https://github.com/clean-css/clean-css/issues/410) - advanced merging and comments. * Fixed issue [#411](https://github.com/clean-css/clean-css/issues/411) - properties and important comments. [3.0.0 / 2014-12-18](https://github.com/clean-css/clean-css/compare/v2.2.22...v3.0.0) ================== * Adds more granular control over compatibility settings. * Adds support for @counter-style at-rule. * Adds `--source-map`/`sourceMap` switch for building input's source map. * Adds `--skip-shorthand-compacting`/`shorthandComacting` option for disabling shorthand compacting. * Allows `target` option to be a path to a folder instead of a file. * Allows disabling rounding precision. By [@superlukas](https://github.com/superlukas). * Breaks 2.x compatibility for using CleanCSS as a function. * Changes `minify` method output to handle multiple outputs. * Reworks minification to tokenize first then minify. See [changes](https://github.com/clean-css/clean-css/compare/b06f37d...dd8c14a). * Removes support for node.js 0.8.x. * Renames `noAdvanced` option into `advanced`. * Renames `noAggressiveMerging` option into `aggressiveMerging`. * Renames `noRebase` option into `rebase`. * Speeds up advanced processing by shortening optimize loop. * Fixed issue [#125](https://github.com/clean-css/clean-css/issues/125) - source maps! * Fixed issue [#344](https://github.com/clean-css/clean-css/issues/344) - merging `background-size` into shorthand. * Fixed issue [#352](https://github.com/clean-css/clean-css/issues/352) - honors rebasing in imported stylesheets. * Fixed issue [#360](https://github.com/clean-css/clean-css/issues/360) - adds 7 extra CSS colors. * Fixed issue [#363](https://github.com/clean-css/clean-css/issues/363) - `rem` units overriding `px`. * Fixed issue [#373](https://github.com/clean-css/clean-css/issues/373) - proper `background` shorthand merging. * Fixed issue [#395](https://github.com/clean-css/clean-css/issues/395) - unescaped brackets in data URIs. * Fixed issue [#398](https://github.com/clean-css/clean-css/issues/398) - restoring important comments. * Fixed issue [#400](https://github.com/clean-css/clean-css/issues/400) - API to accept an array of filenames. * Fixed issue [#403](https://github.com/clean-css/clean-css/issues/403) - tracking input files in source maps. * Fixed issue [#404](https://github.com/clean-css/clean-css/issues/404) - no state sharing in API. * Fixed issue [#405](https://github.com/clean-css/clean-css/issues/405) - disables default `background-size` merging. * Refixed issue [#304](https://github.com/clean-css/clean-css/issues/304) - `background-position` merging. [2.2.22 / 2014-12-13](https://github.com/clean-css/clean-css/compare/v2.2.21...v2.2.22) ================== * Backports fix to issue [#304](https://github.com/clean-css/clean-css/issues/304) - `background-position` merging. [2.2.21 / 2014-12-10](https://github.com/clean-css/clean-css/compare/v2.2.20...v2.2.21) ================== * Backports fix to issue [#373](https://github.com/clean-css/clean-css/issues/373) - `background` shorthand merging. [2.2.20 / 2014-12-02](https://github.com/clean-css/clean-css/compare/v2.2.19...v2.2.20) ================== * Backports fix to issue [#390](https://github.com/clean-css/clean-css/issues/390) - pseudo-class merging. [2.2.19 / 2014-11-20](https://github.com/clean-css/clean-css/compare/v2.2.18...v2.2.19) ================== * Fixed issue [#385](https://github.com/clean-css/clean-css/issues/385) - edge cases in processing cut off data. [2.2.18 / 2014-11-17](https://github.com/clean-css/clean-css/compare/v2.2.17...v2.2.18) ================== * Fixed issue [#383](https://github.com/clean-css/clean-css/issues/383) - rounding fractions once again. [2.2.17 / 2014-11-09](https://github.com/clean-css/clean-css/compare/v2.2.16...v2.2.17) ================== * Fixed issue [#380](https://github.com/clean-css/clean-css/issues/380) - rounding fractions to a whole number. [2.2.16 / 2014-09-16](https://github.com/clean-css/clean-css/compare/v2.2.15...v2.2.16) ================== * Fixed issue [#359](https://github.com/clean-css/clean-css/issues/359) - handling escaped double backslash. * Fixed issue [#358](https://github.com/clean-css/clean-css/issues/358) - property merging in compatibility mode. * Fixed issue [#356](https://github.com/clean-css/clean-css/issues/356) - preserving `*+html` hack. * Fixed issue [#354](https://github.com/clean-css/clean-css/issues/354) - `!important` overriding in shorthands. [2.2.15 / 2014-09-01](https://github.com/clean-css/clean-css/compare/v2.2.14...v2.2.15) ================== * Fixed issue [#343](https://github.com/clean-css/clean-css/issues/343) - too aggressive `rgba`/`hsla` minification. * Fixed issue [#345](https://github.com/clean-css/clean-css/issues/345) - URL rebasing for document relative ones. * Fixed issue [#346](https://github.com/clean-css/clean-css/issues/346) - overriding `!important` by `!important`. * Fixed issue [#350](https://github.com/clean-css/clean-css/issues/350) - edge cases in `@import` processing. [2.2.14 / 2014-08-25](https://github.com/clean-css/clean-css/compare/v2.2.13...v2.2.14) ================== * Makes multival operations idempotent. * Fixed issue [#339](https://github.com/clean-css/clean-css/issues/339) - skips invalid properties. * Fixed issue [#341](https://github.com/clean-css/clean-css/issues/341) - ensure output is shorter than input. [2.2.13 / 2014-08-12](https://github.com/clean-css/clean-css/compare/v2.2.12...v2.2.13) ================== * Fixed issue [#337](https://github.com/clean-css/clean-css/issues/337) - handling component importance. [2.2.12 / 2014-08-02](https://github.com/clean-css/clean-css/compare/v2.2.11...v2.2.12) ================== * Fixed issue with tokenizer removing first selector after an unknown @ rule. * Fixed issue [#329](https://github.com/clean-css/clean-css/issues/329) - `font` shorthands incorrectly processed. * Fixed issue [#332](https://github.com/clean-css/clean-css/issues/332) - `background` shorthand with colors. * Refixed issue [#325](https://github.com/clean-css/clean-css/issues/325) - invalid charset declarations. [2.2.11 / 2014-07-28](https://github.com/clean-css/clean-css/compare/v2.2.10...v2.2.11) ================== * Fixed issue [#326](https://github.com/clean-css/clean-css/issues/326) - `background-size` regression. [2.2.10 / 2014-07-27](https://github.com/clean-css/clean-css/compare/v2.2.9...v2.2.10) ================== * Improved performance of advanced mode validators. * Fixed issue [#307](https://github.com/clean-css/clean-css/issues/307) - `background-color` in multiple backgrounds. * Fixed issue [#322](https://github.com/clean-css/clean-css/issues/322) - adds `background-size` support. * Fixed issue [#323](https://github.com/clean-css/clean-css/issues/323) - stripping variable references. * Fixed issue [#325](https://github.com/clean-css/clean-css/issues/325) - removing invalid `@charset` declarations. [2.2.9 / 2014-07-23](https://github.com/clean-css/clean-css/compare/v2.2.8...v2.2.9) ================== * Adds `background` normalization according to W3C spec. * Fixed issue [#316](https://github.com/clean-css/clean-css/issues/316) - incorrect `background` processing. [2.2.8 / 2014-07-14](https://github.com/clean-css/clean-css/compare/v2.2.7...v2.2.8) ================== * Fixed issue [#313](https://github.com/clean-css/clean-css/issues/313) - processing comment marks in URLs. * Fixed issue [#315](https://github.com/clean-css/clean-css/issues/315) - `rgba`/`hsla` -> `transparent` in gradients. [2.2.7 / 2014-07-10](https://github.com/clean-css/clean-css/compare/v2.2.6...v2.2.7) ================== * Fixed issue [#304](https://github.com/clean-css/clean-css/issues/304) - merging multiple backgrounds. * Fixed issue [#312](https://github.com/clean-css/clean-css/issues/312) - merging with mixed repeat. [2.2.6 / 2014-07-05](https://github.com/clean-css/clean-css/compare/v2.2.5...v2.2.6) ================== * Adds faster quote matching in QuoteScanner. * Improves QuoteScanner to handle comments correctly. * Fixed issue [#308](https://github.com/clean-css/clean-css/issues/308) - parsing comments in quoted URLs. * Fixed issue [#311](https://github.com/clean-css/clean-css/issues/311) - leading/trailing decimal points. [2.2.5 / 2014-06-29](https://github.com/clean-css/clean-css/compare/v2.2.4...v2.2.5) ================== * Adds removing extra spaces around / in border-radius. * Adds replacing same horizontal & vertical value in border-radius. * Fixed issue [#305](https://github.com/clean-css/clean-css/issues/305) - allows width keywords in `border-width`. [2.2.4 / 2014-06-27](https://github.com/clean-css/clean-css/compare/v2.2.3...v2.2.4) ================== * Fixed issue [#301](https://github.com/clean-css/clean-css/issues/301) - proper `border-radius` processing. * Fixed issue [#303](https://github.com/clean-css/clean-css/issues/303) - correctly preserves viewport units. [2.2.3 / 2014-06-24](https://github.com/clean-css/clean-css/compare/v2.2.2...v2.2.3) ================== * Fixed issue [#302](https://github.com/clean-css/clean-css/issues/302) - handling of `outline-style: auto`. [2.2.2 / 2014-06-18](https://github.com/clean-css/clean-css/compare/v2.2.1...v2.2.2) ================== * Fixed issue [#297](https://github.com/clean-css/clean-css/issues/297) - `box-shadow` zeros minification. [2.2.1 / 2014-06-14](https://github.com/clean-css/clean-css/compare/v2.2.0...v2.2.1) ================== * Fixes new property optimizer for 'none' values. * Fixed issue [#294](https://github.com/clean-css/clean-css/issues/294) - space after `rgba`/`hsla` in IE<=11. [2.2.0 / 2014-06-11](https://github.com/clean-css/clean-css/compare/v2.1.8...v2.2.0) ================== * Adds a better algorithm for quotation marks' removal. * Adds a better non-adjacent optimizer compatible with the upcoming new property optimizer. * Adds minifying remote files directly from CLI. * Adds `--rounding-precision` to control rounding precision. * Moves quotation matching into a `QuoteScanner` class. * Adds `npm run browserify` for creating embeddable version of clean-css. * Fixed list-style-* advanced processing. * Fixed issue [#134](https://github.com/clean-css/clean-css/issues/134) - merges properties into shorthand form. * Fixed issue [#164](https://github.com/clean-css/clean-css/issues/164) - removes default values if not needed. * Fixed issue [#168](https://github.com/clean-css/clean-css/issues/168) - adds better property merging algorithm. * Fixed issue [#173](https://github.com/clean-css/clean-css/issues/173) - merges same properties if grouped. * Fixed issue [#184](https://github.com/clean-css/clean-css/issues/184) - uses `!important` for optimization opportunities. * Fixed issue [#190](https://github.com/clean-css/clean-css/issues/190) - uses shorthand to override another shorthand. * Fixed issue [#197](https://github.com/clean-css/clean-css/issues/197) - adds borders merging by understandability. * Fixed issue [#210](https://github.com/clean-css/clean-css/issues/210) - adds temporary workaround for aggressive merging. * Fixed issue [#246](https://github.com/clean-css/clean-css/issues/246) - removes IE hacks when not in compatibility mode. * Fixed issue [#247](https://github.com/clean-css/clean-css/issues/247) - removes deprecated `selectorsMergeMode` switch. * Refixed issue [#250](https://github.com/clean-css/clean-css/issues/250) - based on new quotation marks removal. * Fixed issue [#257](https://github.com/clean-css/clean-css/issues/257) - turns `rgba`/`hsla` to `transparent` if possible. * Fixed issue [#265](https://github.com/clean-css/clean-css/issues/265) - adds support for multiple input files. * Fixed issue [#275](https://github.com/clean-css/clean-css/issues/275) - handling transform properties. * Fixed issue [#276](https://github.com/clean-css/clean-css/issues/276) - corrects unicode handling. * Fixed issue [#288](https://github.com/clean-css/clean-css/issues/288) - adds smarter expression parsing. * Fixed issue [#293](https://github.com/clean-css/clean-css/issues/293) - handles escaped `@` symbols in class names and IDs. [2.1.8 / 2014-03-28](https://github.com/clean-css/clean-css/compare/v2.1.7...v2.1.8) ================== * Fixed issue [#267](https://github.com/clean-css/clean-css/issues/267) - incorrect non-adjacent selector merging. [2.1.7 / 2014-03-24](https://github.com/clean-css/clean-css/compare/v2.1.6...v2.1.7) ================== * Fixed issue [#264](https://github.com/clean-css/clean-css/issues/264) - `@import` statements inside comments. [2.1.6 / 2014-03-10](https://github.com/clean-css/clean-css/compare/v2.1.5...v2.1.6) ================== * Fixed issue [#258](https://github.com/clean-css/clean-css/issues/258) - wrong `@import` handling in `EmptyRemoval`. [2.1.5 / 2014-03-07](https://github.com/clean-css/clean-css/compare/v2.1.4...v2.1.5) ================== * Fixed issue [#255](https://github.com/clean-css/clean-css/issues/255) - incorrect processing of a trailing `-0`. [2.1.4 / 2014-03-01](https://github.com/clean-css/clean-css/compare/v2.1.3...v2.1.4) ================== * Fixed issue [#250](https://github.com/clean-css/clean-css/issues/250) - correctly handle JSON data in quotations. [2.1.3 / 2014-02-26](https://github.com/clean-css/clean-css/compare/v2.1.2...v2.1.3) ================== * Fixed issue [#248](https://github.com/clean-css/clean-css/issues/248) - incorrect merging for vendor selectors. [2.1.2 / 2014-02-25](https://github.com/clean-css/clean-css/compare/v2.1.1...v2.1.2) ================== * Fixed issue [#245](https://github.com/clean-css/clean-css/issues/245) - incorrect handling of backslash IE hack. [2.1.1 / 2014-02-18](https://github.com/clean-css/clean-css/compare/v2.1.0...v2.1.1) ================== * Adds faster selectors processing in advanced optimizer. * Fixed issue [#241](https://github.com/clean-css/clean-css/issues/241) - incorrect handling of `:not()` selectors. [2.1.0 / 2014-02-13](https://github.com/clean-css/clean-css/compare/v2.0.8...v2.1.0) ================== * Adds an optional callback to minify method. * Deprecates `--selectors-merge-mode` / `selectorsMergeMode` in favor to `--compatibility` / `compatibility`. * Fixes debug mode stats for stylesheets using `@import` statements. * Skips empty removal if advanced processing is enabled. * Fixed issue [#85](https://github.com/clean-css/clean-css/issues/85) - resolving protocol `@import`s. * Fixed issue [#160](https://github.com/clean-css/clean-css/issues/160) - re-runs optimizer until a clean pass. * Fixed issue [#161](https://github.com/clean-css/clean-css/issues/161) - improves tokenizer performance. * Fixed issue [#163](https://github.com/clean-css/clean-css/issues/163) - round pixels to 2nd decimal place. * Fixed issue [#165](https://github.com/clean-css/clean-css/issues/165) - extra space after trailing parenthesis. * Fixed issue [#186](https://github.com/clean-css/clean-css/issues/186) - strip unit from `0rem`. * Fixed issue [#207](https://github.com/clean-css/clean-css/issues/207) - bug in parsing protocol `@import`s. * Fixed issue [#213](https://github.com/clean-css/clean-css/issues/213) - faster `rgb` to `hex` transforms. * Fixed issue [#215](https://github.com/clean-css/clean-css/issues/215) - leading zeros in numerical values. * Fixed issue [#217](https://github.com/clean-css/clean-css/issues/217) - whitespace inside attribute selectors and URLs. * Fixed issue [#218](https://github.com/clean-css/clean-css/issues/218) - `@import` statements cleanup. * Fixed issue [#220](https://github.com/clean-css/clean-css/issues/220) - selector between comments. * Fixed issue [#223](https://github.com/clean-css/clean-css/issues/223) - two-pass adjacent selectors merging. * Fixed issue [#226](https://github.com/clean-css/clean-css/issues/226) - don't minify `border:none` to `border:0`. * Fixed issue [#229](https://github.com/clean-css/clean-css/issues/229) - improved processing of fraction numbers. * Fixed issue [#230](https://github.com/clean-css/clean-css/issues/230) - better handling of zero values. * Fixed issue [#235](https://github.com/clean-css/clean-css/issues/235) - IE7 compatibility mode. * Fixed issue [#236](https://github.com/clean-css/clean-css/issues/236) - incorrect rebasing with nested `import`s. [2.0.8 / 2014-02-07](https://github.com/clean-css/clean-css/compare/v2.0.7...v2.0.8) ================== * Fixed issue [#232](https://github.com/clean-css/clean-css/issues/232) - edge case in non-adjacent selectors merging. [2.0.7 / 2014-01-16](https://github.com/clean-css/clean-css/compare/v2.0.6...v2.0.7) ================== * Fixed issue [#208](https://github.com/clean-css/clean-css/issues/208) - don't swallow `@page` and `@viewport`. [2.0.6 / 2014-01-04](https://github.com/clean-css/clean-css/compare/v2.0.5...v2.0.6) ================== * Fixed issue [#198](https://github.com/clean-css/clean-css/issues/198) - process comments and `@import`s correctly. * Fixed issue [#205](https://github.com/clean-css/clean-css/issues/205) - freeze on broken `@import` declaration. [2.0.5 / 2014-01-03](https://github.com/clean-css/clean-css/compare/v2.0.4...v2.0.5) ================== * Fixed issue [#199](https://github.com/clean-css/clean-css/issues/199) - keep line breaks with no advanced optimizations. * Fixed issue [#203](https://github.com/clean-css/clean-css/issues/203) - Buffer as a first argument to minify method. [2.0.4 / 2013-12-19](https://github.com/clean-css/clean-css/compare/v2.0.3...v2.0.4) ================== * Fixed issue [#193](https://github.com/clean-css/clean-css/issues/193) - HSL color space normalization. [2.0.3 / 2013-12-18](https://github.com/clean-css/clean-css/compare/v2.0.2...v2.0.3) ================== * Fixed issue [#191](https://github.com/clean-css/clean-css/issues/191) - leading numbers in `font`/`animation` names. * Fixed issue [#192](https://github.com/clean-css/clean-css/issues/192) - many `@import`s inside a comment. [2.0.2 / 2013-11-18](https://github.com/clean-css/clean-css/compare/v2.0.1...v2.0.2) ================== * Fixed issue [#177](https://github.com/clean-css/clean-css/issues/177) - process broken content correctly. [2.0.1 / 2013-11-14](https://github.com/clean-css/clean-css/compare/v2.0.0...v2.0.1) ================== * Fixed issue [#176](https://github.com/clean-css/clean-css/issues/176) - hangs on `undefined` keyword. [2.0.0 / 2013-11-04](https://github.com/clean-css/clean-css/compare/v1.1.7...v2.0.0) ================== * Adds simplified and more advanced text escaping / restoring via `EscapeStore` class. * Adds simplified and much faster empty elements removal. * Adds missing `@import` processing to our benchmark (run via `npm run bench`). * Adds CSS tokenizer which will make it possible to optimize content by reordering and/or merging selectors. * Adds basic optimizer removing duplicate selectors from a list. * Adds merging duplicate properties within a single selector's body. * Adds merging adjacent selectors within a scope (single and multiple ones). * Changes behavior of `--keep-line-breaks`/`keepBreaks` option to keep breaks after trailing braces only. * Makes all multiple selectors ordered alphabetically (aids merging). * Adds property overriding so more coarse properties override more granular ones. * Adds reducing non-adjacent selectors. * Adds `--skip-advanced`/`noAdvanced` switch to disable advanced optimizations. * Adds reducing non-adjacent selectors when overridden by more complex selectors. * Fixed issue [#138](https://github.com/clean-css/clean-css/issues/138) - makes CleanCSS interface OO. * Fixed issue [#139](https://github.com/clean-css/clean-css/issues/138) - consistent error & warning handling. * Fixed issue [#145](https://github.com/clean-css/clean-css/issues/145) - debug mode in library too. * Fixed issue [#157](https://github.com/clean-css/clean-css/issues/157) - gets rid of `removeEmpty` option. * Fixed issue [#159](https://github.com/clean-css/clean-css/issues/159) - escaped quotes inside content. * Fixed issue [#162](https://github.com/clean-css/clean-css/issues/162) - strip quotes from Base64 encoded URLs. * Fixed issue [#166](https://github.com/clean-css/clean-css/issues/166) - `debug` formatting in CLI * Fixed issue [#167](https://github.com/clean-css/clean-css/issues/167) - `background:transparent` minification. [1.1.7 / 2013-10-28](https://github.com/clean-css/clean-css/compare/v1.1.6...v1.1.7) ================== * Fixed issue [#156](https://github.com/clean-css/clean-css/issues/156) - `@import`s inside comments. [1.1.6 / 2013-10-26](https://github.com/clean-css/clean-css/compare/v1.1.5...v1.1.6) ================== * Fixed issue [#155](https://github.com/clean-css/clean-css/issues/155) - broken irregular CSS content. [1.1.5 / 2013-10-24](https://github.com/clean-css/clean-css/compare/v1.1.4...v1.1.5) ================== * Fixed issue [#153](https://github.com/clean-css/clean-css/issues/153) - `keepSpecialComments` `0`/`1` as a string. [1.1.4 / 2013-10-23](https://github.com/clean-css/clean-css/compare/v1.1.3...v1.1.4) ================== * Fixed issue [#152](https://github.com/clean-css/clean-css/issues/152) - adds an option to disable rebasing. [1.1.3 / 2013-10-04](https://github.com/clean-css/clean-css/compare/v1.1.2...v1.1.3) ================== * Fixed issue [#150](https://github.com/clean-css/clean-css/issues/150) - minifying `background:none`. [1.1.2 / 2013-09-29](https://github.com/clean-css/clean-css/compare/v1.1.1...v1.1.2) ================== * Fixed issue [#149](https://github.com/clean-css/clean-css/issues/149) - shorthand `font` property. [1.1.1 / 2013-09-07](https://github.com/clean-css/clean-css/compare/v1.1.0...v1.1.1) ================== * Fixed issue [#144](https://github.com/clean-css/clean-css/issues/144) - skip URLs rebasing by default. [1.1.0 / 2013-09-06](https://github.com/clean-css/clean-css/compare/v1.0.12...v1.1.0) ================== * Renamed lib's `debug` option to `benchmark` when doing per-minification benchmarking. * Added simplified comments processing & imports. * Fixed issue [#43](https://github.com/clean-css/clean-css/issues/43) - `--debug` switch for minification stats. * Fixed issue [#65](https://github.com/clean-css/clean-css/issues/65) - full color name / hex shortening. * Fixed issue [#84](https://github.com/clean-css/clean-css/issues/84) - support for `@import` with media queries. * Fixed issue [#124](https://github.com/clean-css/clean-css/issues/124) - raise error on broken imports. * Fixed issue [#126](https://github.com/clean-css/clean-css/issues/126) - proper CSS expressions handling. * Fixed issue [#129](https://github.com/clean-css/clean-css/issues/129) - rebasing imported URLs. * Fixed issue [#130](https://github.com/clean-css/clean-css/issues/130) - better code modularity. * Fixed issue [#135](https://github.com/clean-css/clean-css/issues/135) - require node.js 0.8+. [1.0.12 / 2013-07-19](https://github.com/clean-css/clean-css/compare/v1.0.11...v1.0.12) =================== * Fixed issue [#121](https://github.com/clean-css/clean-css/issues/121) - ability to skip `@import` processing. [1.0.11 / 2013-07-08](https://github.com/clean-css/clean-css/compare/v1.0.10...v1.0.11) =================== * Fixed issue [#117](https://github.com/clean-css/clean-css/issues/117) - line break escaping in comments. [1.0.10 / 2013-06-13](https://github.com/clean-css/clean-css/compare/v1.0.9...v1.0.10) =================== * Fixed issue [#114](https://github.com/clean-css/clean-css/issues/114) - comments in imported stylesheets. [1.0.9 / 2013-06-11](https://github.com/clean-css/clean-css/compare/v1.0.8...v1.0.9) ================== * Fixed issue [#113](https://github.com/clean-css/clean-css/issues/113) - `@import` in comments. [1.0.8 / 2013-06-10](https://github.com/clean-css/clean-css/compare/v1.0.7...v1.0.8) ================== * Fixed issue [#112](https://github.com/clean-css/clean-css/issues/112) - reducing `box-shadow` zeros. [1.0.7 / 2013-06-05](https://github.com/clean-css/clean-css/compare/v1.0.6...v1.0.7) ================== * Support for `@import` URLs starting with `//`. By [@petetak](https://github.com/petetak). [1.0.6 / 2013-06-04](https://github.com/clean-css/clean-css/compare/v1.0.5...v1.0.6) ================== * Fixed issue [#110](https://github.com/clean-css/clean-css/issues/110) - data URIs in URLs. [1.0.5 / 2013-05-26](https://github.com/clean-css/clean-css/compare/v1.0.4...v1.0.5) ================== * Fixed issue [#107](https://github.com/clean-css/clean-css/issues/107) - data URIs in imported stylesheets. 1.0.4 / 2013-05-23 ================== * Rewrite relative URLs in imported stylesheets. By [@bluej100](https://github.com/bluej100). 1.0.3 / 2013-05-20 ================== * Support alternative `@import` syntax with file name not wrapped inside `url()` statement. By [@bluej100](https://github.com/bluej100). 1.0.2 / 2013-04-29 ================== * Fixed issue [#97](https://github.com/clean-css/clean-css/issues/97) - `--remove-empty` & FontAwesome. 1.0.1 / 2013-04-08 ================== * Do not pick up `bench` and `test` while building `npm` package. By [@sindresorhus](https://https://github.com/sindresorhus). 1.0.0 / 2013-03-30 ================== * Fixed issue [#2](https://github.com/clean-css/clean-css/issues/2) - resolving `@import` rules. * Fixed issue [#44](https://github.com/clean-css/clean-css/issues/44) - examples in `--help`. * Fixed issue [#46](https://github.com/clean-css/clean-css/issues/46) - preserving special characters in URLs and attributes. * Fixed issue [#80](https://github.com/clean-css/clean-css/issues/80) - quotation in multi line strings. * Fixed issue [#83](https://github.com/clean-css/clean-css/issues/83) - HSL to hex color conversions. * Fixed issue [#86](https://github.com/clean-css/clean-css/issues/86) - broken `@charset` replacing. * Fixed issue [#88](https://github.com/clean-css/clean-css/issues/88) - removes space in `! important`. * Fixed issue [#92](https://github.com/clean-css/clean-css/issues/92) - uppercase hex to short versions. 0.10.2 / 2013-03-19 =================== * Fixed issue [#79](https://github.com/clean-css/clean-css/issues/79) - node.js 0.10.x compatibility. 0.10.1 / 2013-02-14 =================== * Fixed issue [#66](https://github.com/clean-css/clean-css/issues/66) - line breaks without extra spaces should be handled correctly. 0.10.0 / 2013-02-09 =================== * Switched from [optimist](https://github.com/substack/node-optimist) to [commander](https://github.com/visionmedia/commander.js) for CLI processing. * Changed long options from `--removeempty` to `--remove-empty` and from `--keeplinebreaks` to `--keep-line-breaks`. * Fixed performance issue with replacing multiple `@charset` declarations and issue with line break after `@charset` when using `keepLineBreaks` option. By [@rrjaime](https://github.com/rrjamie). * Removed Makefile in favor to `npm run` commands (e.g. `make check` -> `npm run check`). * Fixed issue [#47](https://github.com/clean-css/clean-css/issues/47) - commandline issues on Windows. * Fixed issue [#49](https://github.com/clean-css/clean-css/issues/49) - remove empty selectors from media query. * Fixed issue [#52](https://github.com/clean-css/clean-css/issues/52) - strip fraction zeros if not needed. * Fixed issue [#58](https://github.com/clean-css/clean-css/issues/58) - remove colon where possible. * Fixed issue [#59](https://github.com/clean-css/clean-css/issues/59) - content property handling. 0.9.1 / 2012-12-19 ================== * Fixed issue [#37](https://github.com/clean-css/clean-css/issues/37) - converting `white` and other colors in class names (reported by [@malgorithms](https://github.com/malgorithms)). 0.9.0 / 2012-12-15 ================== * Added stripping quotation from font names (if possible). * Added stripping quotation from `@keyframes` declaration, `animation` and `animation-name` property. * Added stripping quotations from attributes' value (e.g. `[data-target='x']`). * Added better hex->name and name->hex color shortening. * Added `font: normal` and `font: bold` shortening the same way as `font-weight` is. * Refactored shorthand selectors and added `border-radius`, `border-style` and `border-color` shortening. * Added `margin`, `padding` and `border-width` shortening. * Added removing line break after commas. * Fixed removing whitespace inside media query definition. * Added removing line breaks after a comma, so all declarations are one-liners now. * Speed optimizations (~10% despite many new features). * Added [JSHint](https://github.com/jshint/jshint/) validation rules via `make check`. 0.8.3 / 2012-11-29 ================== * Fixed HSL/HSLA colors processing. 0.8.2 / 2012-10-31 ================== * Fixed shortening hex colors and their relation to hashes in URLs. * Cleanup by [@XhmikosR](https://github.com/XhmikosR). 0.8.1 / 2012-10-28 ================== * Added better zeros processing for `rect(...)` syntax (clip property). 0.8.0 / 2012-10-21 ================== * Added removing URLs quotation if possible. * Rewrote breaks processing. * Added `keepBreaks`/`-b` option to keep line breaks in the minimized file. * Reformatted [lib/clean.js](/lib/clean.js) so it's easier to follow the rules. * Minimized test data is now minimized with line breaks so it's easier to compare the changes line by line. 0.7.0 / 2012-10-14 ================== * Added stripping special comments to CLI (`--s0` and `--s1` options). * Added stripping special comments to programmatic interface (`keepSpecialComments` option). 0.6.0 / 2012-08-05 ================== * Full Windows support with tests (./test.bat). 0.5.0 / 2012-08-02 ================== * Made path to vows local. * Explicit node.js 0.6 requirement. 0.4.2 / 2012-06-28 ================== * Updated binary `-v` option (version). * Updated binary to output help when no options given (but not in piped mode). * Added binary tests. 0.4.1 / 2012-06-10 ================== * Fixed stateless mode where calling `CleanCSS#process` directly was giving errors (reported by [@facelessuser](https://github.com/facelessuser)). 0.4.0 / 2012-06-04 ================== * Speed improvements up to 4x thanks to the rewrite of comments and CSS' content processing. * Stripping empty CSS tags is now optional (see [bin/cleancss](/bin/cleancss) for details). * Improved debugging mode (see [test/bench.js](/test/bench.js)) * Added `make bench` for a one-pass benchmark. 0.3.3 / 2012-05-27 ================== * Fixed tests, [package.json](/package.json) for development, and regex for removing empty declarations (thanks to [@vvo](https://github.com/vvo)). 0.3.2 / 2012-01-17 ================== * Fixed output method under node.js 0.6 which incorrectly tried to close `process.stdout`. 0.3.1 / 2011-12-16 ================== * Fixed cleaning up `0 0 0 0` expressions. 0.3.0 / 2011-11-29 ================== * Clean-css requires node.js 0.4.0+ to run. * Removed node.js's 0.2.x 'sys' package dependency (thanks to [@jmalonzo](https://github.com/jmalonzo) for a patch). 0.2.6 / 2011-11-27 ================== * Fixed expanding `+` signs in `calc()` when mixed up with adjacent `+` selector. 0.2.5 / 2011-11-27 ================== * Fixed issue with cleaning up spaces inside `calc`/`-moz-calc` declarations (thanks to [@cvan](https://github.com/cvan) for reporting it). * Fixed converting `#f00` to `red` in borders and gradients. 0.2.4 / 2011-05-25 ================== * Fixed problem with expanding `none` to `0` in partial/full background declarations. * Fixed including clean-css library from binary (global to local). 0.2.3 / 2011-04-18 ================== * Fixed problem with optimizing IE filters. 0.2.2 / 2011-04-17 ================== * Fixed problem with space before color in `border` property. 0.2.1 / 2011-03-19 ================== * Added stripping space before `!important` keyword. * Updated repository location and author information in [package.json](/package.json). 0.2.0 / 2011-03-02 ================== * Added options parsing via optimist. * Changed code inclusion (thus the version bump). 0.1.0 / 2011-02-27 ================== * First version of clean-css library. * Implemented all basic CSS transformations. clean-css-5.3.3/LICENSE 0000664 0000000 0000000 00000002046 14532047255 0014410 0 ustar 00root root 0000000 0000000 Copyright (C) 2017 JakubPawlowicz.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. clean-css-5.3.3/README.md 0000664 0000000 0000000 00000121007 14532047255 0014661 0 ustar 00root root 0000000 0000000
,. */ blockquote:before, blockquote:after, q:before, q:after { content: ''; } blockquote, q { quotes: "" ""; } /* Remove annoying border on linked images. */ a img { border: none; } /* Remember to define your own focus styles! */ :focus { outline: 0; } /* -------------------------------------------------------------- typography.css * Sets up some sensible default typography. -------------------------------------------------------------- */ /* Default font settings. The font-size percentage is of 16px. (0.75 * 16px = 12px) */ html { font-size:100.01%; } body { font-size: 75%; color: #222; background: #fff; font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; } /* Headings -------------------------------------------------------------- */ h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111; } h1 { font-size: 3em; line-height: 1; margin-bottom: 0.5em; } h2 { font-size: 2em; margin-bottom: 0.75em; } h3 { font-size: 1.5em; line-height: 1; margin-bottom: 1em; } h4 { font-size: 1.2em; line-height: 1.25; margin-bottom: 1.25em; } h5 { font-size: 1em; font-weight: bold; margin-bottom: 1.5em; } h6 { font-size: 1em; font-weight: bold; } h1 img, h2 img, h3 img, h4 img, h5 img, h6 img { margin: 0; } /* Text elements -------------------------------------------------------------- */ p { margin: 0 0 1.5em; } /* These can be used to pull an image at the start of a paragraph, so that the text flows around it (usage:) */ .left { float: left !important; } p .left { margin: 1.5em 1.5em 1.5em 0; padding: 0; } .right { float: right !important; } p .right { margin: 1.5em 0 1.5em 1.5em; padding: 0; } a:focus, a:hover { color: #09f; } a { color: #06c; text-decoration: underline; } blockquote { margin: 1.5em; color: #666; font-style: italic; } strong,dfn { font-weight: bold; } em,dfn { font-style: italic; } sup, sub { line-height: 0; } abbr, acronym { border-bottom: 1px dotted #666; } address { margin: 0 0 1.5em; font-style: italic; } del { color:#666; } pre { margin: 1.5em 0; white-space: pre; } pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.5; } /* Lists -------------------------------------------------------------- */ li ul, li ol { margin: 0; } ul, ol { margin: 0 1.5em 1.5em 0; padding-left: 1.5em; } ul { list-style-type: disc; } ol { list-style-type: decimal; } dl { margin: 0 0 1.5em 0; } dl dt { font-weight: bold; } dd { margin-left: 1.5em;} /* Tables -------------------------------------------------------------- */ /* Because of the need for padding on TH and TD, the vertical rhythm on table cells has to be 27px, instead of the standard 18px or 36px of other elements. */ table { margin-bottom: 1.4em; width:100%; } th { font-weight: bold; } thead th { background: #c3d9ff; } th,td,caption { padding: 4px 10px 4px 5px; } /* You can zebra-stripe your tables in outdated browsers by adding the class "even" to every other table row. */ tbody tr:nth-child(even) td, tbody tr.even td { background: #e5ecf9; } tfoot { font-style: italic; } caption { background: #eee; } /* Misc classes -------------------------------------------------------------- */ .small { font-size: .8em; margin-bottom: 1.875em; line-height: 1.875em; } .large { font-size: 1.2em; line-height: 2.5em; margin-bottom: 1.25em; } .hide { display: none; } .quiet { color: #666; } .loud { color: #000; } .highlight { background:#ff0; } .added { background:#060; color: #fff; } .removed { background:#900; color: #fff; } .first { margin-left:0; padding-left:0; } .last { margin-right:0; padding-right:0; } .top { margin-top:0; padding-top:0; } .bottom { margin-bottom:0; padding-bottom:0; } /* -------------------------------------------------------------- forms.css * Sets up some default styling for forms * Gives you classes to enhance your forms Usage: * For text fields, use class .title or .text * For inline forms, use .inline (even when using columns) -------------------------------------------------------------- */ /* A special hack is included for IE8 since it does not apply padding correctly on fieldsets */ label { font-weight: bold; } fieldset { padding:0 1.4em 1.4em 1.4em; margin: 0 0 1.5em 0; border: 1px solid #ccc; } legend { font-weight: bold; font-size:1.2em; margin-top:-0.2em; margin-bottom:1em; } fieldset, #IE8#HACK { padding-top:1.4em; } legend, #IE8#HACK { margin-top:0; margin-bottom:0; } /* Form fields -------------------------------------------------------------- */ /* Attribute selectors are used to differentiate the different types of input elements, but to support old browsers, you will have to add classes for each one. ".title" simply creates a large text field, this is purely for looks. */ input[type=text], input[type=password], input.text, input.title, textarea { background-color:#fff; border:1px solid #bbb; } input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus { border-color:#666; } select { background-color:#fff; border-width:1px; border-style:solid; } input[type=text], input[type=password], input.text, input.title, textarea, select { margin:0.5em 0; } input.text, input.title { width: 300px; padding:5px; } input.title { font-size:1.5em; } textarea { width: 390px; height: 250px; padding:5px; } /* This is to be used on forms where a variety of elements are placed side-by-side. Use the p tag to denote a line. */ form.inline { line-height:3; } form.inline p { margin-bottom:0; } /* Success, info, notice and error/alert boxes -------------------------------------------------------------- */ .error, .alert, .notice, .success, .info { padding: 0.8em; margin-bottom: 1em; border: 2px solid #ddd; } .error, .alert { background: #fbe3e4; color: #8a1f11; border-color: #fbc2c4; } .notice { background: #fff6bf; color: #514721; border-color: #ffd324; } .success { background: #e6efc2; color: #264409; border-color: #c6d880; } .info { background: #d5edf8; color: #205791; border-color: #92cae4; } .error a, .alert a { color: #8a1f11; } .notice a { color: #514721; } .success a { color: #264409; } .info a { color: #205791; } /* -------------------------------------------------------------- grid.css * Sets up an easy-to-use grid of 24 columns. By default, the grid is 950px wide, with 24 columns spanning 30px, and a 10px margin between columns. If you need fewer or more columns, namespaces or semantic element names, use the compressor script (lib/compress.rb) -------------------------------------------------------------- */ /* A container should group all your columns. */ .container { width: 950px; margin: 0 auto; } /* Use this class on any .span / container to see the grid. */ .showgrid { background: url(src/grid.png); } /* Columns -------------------------------------------------------------- */ /* Sets up basic grid floating and margin. */ .column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { float: left; margin-right: 10px; } /* The last column in a row needs this class. */ .last { margin-right: 0; } /* Use these classes to set the width of a column. */ .span-1 {width: 30px;} .span-2 {width: 70px;} .span-3 {width: 110px;} .span-4 {width: 150px;} .span-5 {width: 190px;} .span-6 {width: 230px;} .span-7 {width: 270px;} .span-8 {width: 310px;} .span-9 {width: 350px;} .span-10 {width: 390px;} .span-11 {width: 430px;} .span-12 {width: 470px;} .span-13 {width: 510px;} .span-14 {width: 550px;} .span-15 {width: 590px;} .span-16 {width: 630px;} .span-17 {width: 670px;} .span-18 {width: 710px;} .span-19 {width: 750px;} .span-20 {width: 790px;} .span-21 {width: 830px;} .span-22 {width: 870px;} .span-23 {width: 910px;} .span-24 {width:950px; margin-right:0;} /* Use these classes to set the width of an input. */ input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 { border-left-width: 1px; border-right-width: 1px; padding-left: 5px; padding-right: 5px; } input.span-1, textarea.span-1 { width: 18px; } input.span-2, textarea.span-2 { width: 58px; } input.span-3, textarea.span-3 { width: 98px; } input.span-4, textarea.span-4 { width: 138px; } input.span-5, textarea.span-5 { width: 178px; } input.span-6, textarea.span-6 { width: 218px; } input.span-7, textarea.span-7 { width: 258px; } input.span-8, textarea.span-8 { width: 298px; } input.span-9, textarea.span-9 { width: 338px; } input.span-10, textarea.span-10 { width: 378px; } input.span-11, textarea.span-11 { width: 418px; } input.span-12, textarea.span-12 { width: 458px; } input.span-13, textarea.span-13 { width: 498px; } input.span-14, textarea.span-14 { width: 538px; } input.span-15, textarea.span-15 { width: 578px; } input.span-16, textarea.span-16 { width: 618px; } input.span-17, textarea.span-17 { width: 658px; } input.span-18, textarea.span-18 { width: 698px; } input.span-19, textarea.span-19 { width: 738px; } input.span-20, textarea.span-20 { width: 778px; } input.span-21, textarea.span-21 { width: 818px; } input.span-22, textarea.span-22 { width: 858px; } input.span-23, textarea.span-23 { width: 898px; } input.span-24, textarea.span-24 { width: 938px; } /* Add these to a column to append empty cols. */ .append-1 { padding-right: 40px;} .append-2 { padding-right: 80px;} .append-3 { padding-right: 120px;} .append-4 { padding-right: 160px;} .append-5 { padding-right: 200px;} .append-6 { padding-right: 240px;} .append-7 { padding-right: 280px;} .append-8 { padding-right: 320px;} .append-9 { padding-right: 360px;} .append-10 { padding-right: 400px;} .append-11 { padding-right: 440px;} .append-12 { padding-right: 480px;} .append-13 { padding-right: 520px;} .append-14 { padding-right: 560px;} .append-15 { padding-right: 600px;} .append-16 { padding-right: 640px;} .append-17 { padding-right: 680px;} .append-18 { padding-right: 720px;} .append-19 { padding-right: 760px;} .append-20 { padding-right: 800px;} .append-21 { padding-right: 840px;} .append-22 { padding-right: 880px;} .append-23 { padding-right: 920px;} /* Add these to a column to prepend empty cols. */ .prepend-1 { padding-left: 40px;} .prepend-2 { padding-left: 80px;} .prepend-3 { padding-left: 120px;} .prepend-4 { padding-left: 160px;} .prepend-5 { padding-left: 200px;} .prepend-6 { padding-left: 240px;} .prepend-7 { padding-left: 280px;} .prepend-8 { padding-left: 320px;} .prepend-9 { padding-left: 360px;} .prepend-10 { padding-left: 400px;} .prepend-11 { padding-left: 440px;} .prepend-12 { padding-left: 480px;} .prepend-13 { padding-left: 520px;} .prepend-14 { padding-left: 560px;} .prepend-15 { padding-left: 600px;} .prepend-16 { padding-left: 640px;} .prepend-17 { padding-left: 680px;} .prepend-18 { padding-left: 720px;} .prepend-19 { padding-left: 760px;} .prepend-20 { padding-left: 800px;} .prepend-21 { padding-left: 840px;} .prepend-22 { padding-left: 880px;} .prepend-23 { padding-left: 920px;} /* Border on right hand side of a column. */ .border { padding-right: 4px; margin-right: 5px; border-right: 1px solid #ddd; } /* Border with more whitespace, spans one column. */ .colborder { padding-right: 24px; margin-right: 25px; border-right: 1px solid #ddd; } /* Use these classes on an element to push it into the next column, or to pull it into the previous column. */ .pull-1 { margin-left: -40px; } .pull-2 { margin-left: -80px; } .pull-3 { margin-left: -120px; } .pull-4 { margin-left: -160px; } .pull-5 { margin-left: -200px; } .pull-6 { margin-left: -240px; } .pull-7 { margin-left: -280px; } .pull-8 { margin-left: -320px; } .pull-9 { margin-left: -360px; } .pull-10 { margin-left: -400px; } .pull-11 { margin-left: -440px; } .pull-12 { margin-left: -480px; } .pull-13 { margin-left: -520px; } .pull-14 { margin-left: -560px; } .pull-15 { margin-left: -600px; } .pull-16 { margin-left: -640px; } .pull-17 { margin-left: -680px; } .pull-18 { margin-left: -720px; } .pull-19 { margin-left: -760px; } .pull-20 { margin-left: -800px; } .pull-21 { margin-left: -840px; } .pull-22 { margin-left: -880px; } .pull-23 { margin-left: -920px; } .pull-24 { margin-left: -960px; } .pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float: left; position:relative;} .push-1 { margin: 0 -40px 1.5em 40px; } .push-2 { margin: 0 -80px 1.5em 80px; } .push-3 { margin: 0 -120px 1.5em 120px; } .push-4 { margin: 0 -160px 1.5em 160px; } .push-5 { margin: 0 -200px 1.5em 200px; } .push-6 { margin: 0 -240px 1.5em 240px; } .push-7 { margin: 0 -280px 1.5em 280px; } .push-8 { margin: 0 -320px 1.5em 320px; } .push-9 { margin: 0 -360px 1.5em 360px; } .push-10 { margin: 0 -400px 1.5em 400px; } .push-11 { margin: 0 -440px 1.5em 440px; } .push-12 { margin: 0 -480px 1.5em 480px; } .push-13 { margin: 0 -520px 1.5em 520px; } .push-14 { margin: 0 -560px 1.5em 560px; } .push-15 { margin: 0 -600px 1.5em 600px; } .push-16 { margin: 0 -640px 1.5em 640px; } .push-17 { margin: 0 -680px 1.5em 680px; } .push-18 { margin: 0 -720px 1.5em 720px; } .push-19 { margin: 0 -760px 1.5em 760px; } .push-20 { margin: 0 -800px 1.5em 800px; } .push-21 { margin: 0 -840px 1.5em 840px; } .push-22 { margin: 0 -880px 1.5em 880px; } .push-23 { margin: 0 -920px 1.5em 920px; } .push-24 { margin: 0 -960px 1.5em 960px; } .push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float: left; position:relative;} /* Misc classes and elements -------------------------------------------------------------- */ /* In case you need to add a gutter above/below an element */ div.prepend-top, .prepend-top { margin-top:1.5em; } div.append-bottom, .append-bottom { margin-bottom:1.5em; } /* Use a .box to create a padded box inside a column. */ .box { padding: 1.5em; margin-bottom: 1.5em; background: #e5eCf9; } /* Use this to create a horizontal ruler across a column. */ hr { background: #ddd; color: #ddd; clear: both; float: none; width: 100%; height: 1px; margin: 0 0 1.45em; border: none; } hr.space { background: #fff; color: #fff; visibility: hidden; } /* Clearing floats without extra markup Based on How To Clear Floats Without Structural Markup by PiE [http://www.positioniseverything.net/easyclearing.html] */ .clearfix:after, .container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; overflow:hidden; } .clearfix, .container {display: block;} /* Regular clearing apply to column that should drop below previous ones. */ .clear { clear:both; } clean-css-5.3.3/test/fixtures/bootstrap-v3-min.css 0000664 0000000 0000000 00000336140 14532047255 0022076 0 ustar 00root root 0000000 0000000 .sr-only,svg:not(:root){overflow:hidden} blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0} pre,textarea{overflow:auto} .text-left,caption,th{text-align:left} .btn,.text-nowrap{white-space:nowrap} .btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left} .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px} html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%} 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:active,a:hover{outline:0} b,optgroup,strong{font-weight:700} dfn{font-style:italic} h1{margin:.67em 0} mark{color:#000;background:#ff0} sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline} .btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle} sup{top:-.5em} sub{bottom:-.25em} img{border:0} hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box} *,:after,:before,input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box} code,kbd,pre,samp{font-size:1em} button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit} .glyphicon,address{font-style:normal} 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{padding:0;border: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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield} input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none} td,th{padding:0} @media print{ blockquote,img,pre,tr{page-break-inside:avoid} *,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!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} thead{display:table-header-group} img{max-width:100%!important} h2,h3,p{orphans:3;widows:3} h2,h3{page-break-after:avoid} select{background:#fff!important} .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} } .dropdown-menu,.modal-content{-webkit-background-clip:padding-box} .btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-success,.open>.dropdown-toggle.btn-warning{background-image:none} @font-face{font-family:'Glyphicons Halflings';src:url('test/fonts/glyphicons-halflings-regular.eot');src:url('test/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('test/fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('test/fonts/glyphicons-halflings-regular.woff') format('woff'),url('test/fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('test/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')} .glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .img-thumbnail,body{line-height:1.42857143;background-color:#fff} .glyphicon-asterisk:before{content:"\2a"} .glyphicon-plus:before{content:"\2b"} .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{content:"\e227"} .glyphicon-yen:before{content:"\00a5"} .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{box-sizing:border-box} html{font-size:10px;-webkit-tap-highlight-color:transparent} body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;color:#333} button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit} a{background-color:transparent;color:#337ab7;text-decoration:none} a:focus,a:hover{color:#23527c;text-decoration:underline} a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px} figure{margin:0} .carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto} .img-thumbnail,.list-inline>li,label{display:inline-block} .img-rounded{border-radius:6px} .img-thumbnail{max-width:100%;height:auto;padding:4px;border:1px solid #ddd;border-radius:4px;-webkit-transition:.2s ease-in-out;-o-transition:.2s ease-in-out;transition:.2s ease-in-out} .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;clip:rect(0,0,0,0);border:0} .checkbox,.has-feedback,.radio{position:relative} .sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit} legend,pre{color:#333} .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} dt,kbd kbd,label{font-weight:700} address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143} .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} dl,ol,ul{margin-top:0} p,pre{margin:0 0 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} .lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4} @media (min-width:768px){ .lead{font-size:21px} .dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap} .dl-horizontal dd{margin-left:180px} } .small,small{font-size:85%} .mark,mark{padding:.2em;background-color:#fcf8e3} .list-inline,.list-unstyled{padding-left:0;list-style:none} pre code,table{background-color:transparent} .text-right{text-align:right} .text-center{text-align:center} .text-justify{text-align:justify} .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:hover{color:#286090} .text-success{color:#3c763d} a.text-success:hover{color:#2b542c} .text-info{color:#31708f} a.text-info:hover{color:#245269} .text-warning{color:#8a6d3b} a.text-warning:hover{color:#66512c} .text-danger{color:#a94442} a.text-danger:hover{color:#843534} .bg-primary{color:#fff;background-color:#337ab7} a.bg-primary:hover{background-color:#286090} .bg-success{background-color:#dff0d8} a.bg-success:hover{background-color:#c1e2b3} .bg-info{background-color:#d9edf7} a.bg-info:hover{background-color:#afd9ee} .bg-warning{background-color:#fcf8e3} a.bg-warning:hover{background-color:#f7ecb5} .bg-danger{background-color:#f2dede} .btn-default,.form-control,.table .table{background-color:#fff} a.bg-danger:hover{background-color:#e4b9b9} .page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee} .table,address,dl,legend{margin-bottom:20px} ol,ul{margin-bottom:10px} .list-inline{margin-left:-5px} .container,.container-fluid{margin-right:auto;margin-left:auto} .list-inline>li{padding-right:5px;padding-left:5px} legend,pre{display:block} dd{margin-left:0} abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777} .initialism{font-size:90%;text-transform:uppercase} blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee} code,kbd{padding:2px 4px;font-size:90%} blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;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} .container,.container-fluid{padding-right:15px;padding-left:15px} .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'} code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace} code{color:#c7254e;background-color:#f9f2f4;border-radius:4px} 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%;-webkit-box-shadow:none;box-shadow:none} pre{padding:9.5px;font-size:13px;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;border-radius:0} .pre-scrollable{overflow-y:scroll} @media (min-width:768px){ .container{width:750px} } @media (min-width:992px){ .container{width:970px} } @media (min-width:1200px){ .container{width:1170px} } .row{margin-right:-15px;margin-left:-15px} .col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px} .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-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{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-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{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-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{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} } .caret,.nav-pills>li+li{margin-left:2px} table{border-spacing:0;border-collapse:collapse} caption{padding-top:8px;padding-bottom:8px;color:#777} .table{width:100%;max-width:100%} .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-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} fieldset,legend{padding:0;border:0} .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 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} .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} legend{width:100%;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5} .form-control,output{font-size:14px;line-height:1.42857143;color:#555} label{max-width:100%;margin-bottom:5px} .checkbox,.form-control,.radio,input[type=file],output{display:block} input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none} input[type=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal} 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:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px} output{padding-top:7px} .form-control{width:100%;height:34px;padding:6px 12px;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,-webkit-box-shadow .15s ease-in-out;-o-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} .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} .has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d} .form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1} textarea.form-control{height:auto} @media screen and (-webkit-min-device-pixel-ratio:0){ input[type=date],input[type=datetime-local],input[type=month],input[type=time]{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{margin-top:10px;margin-bottom:10px} .checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer} .checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px} .checkbox+.checkbox,.radio+.radio{margin-top:-5px} .checkbox-inline,.radio-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer} .checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px} .checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,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} .form-control-static{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} .form-group-sm .form-control,.form-group-sm .form-control-static,.input-sm{padding:5px 10px;font-size:12px;line-height:1.5} .input-sm{height:30px;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;border-radius:3px} select.form-group-sm .form-control{height:30px;line-height:30px} select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto} .form-group-sm .form-control-static{height:30px} .form-group-lg .form-control,.form-group-lg .form-control-static,.input-lg{padding:10px 16px;font-size:18px;line-height:1.3333333} .input-lg{height:46px;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;border-radius:6px} select.form-group-lg .form-control{height:46px;line-height:46px} select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto} .form-group-lg .form-control-static{height:46px} .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} .collapsing,.dropdown,.dropup{position:relative} .btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} .input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px} .input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px} .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-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline 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-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline 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-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} .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} .form-horizontal .has-feedback .form-control-feedback{right:15px} @media (min-width:768px){ .form-inline .form-control-static,.form-inline .form-group{display:inline-block} .form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle} .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle} .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 .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 .control-label{padding-top:7px;margin-bottom:0;text-align:right} .form-horizontal .form-group-lg .control-label{padding-top:14.333333px} .form-horizontal .form-group-sm .control-label{padding-top:6px} } .btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px} .btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px} .btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none} .btn.active,.btn:active{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{pointer-events:none;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;opacity:.65} .btn-default{color:#333;border-color:#ccc} .btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad} .btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,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.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74} .btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,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.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439} .btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,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.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc} .btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,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.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512} .btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,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.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925} .btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,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} .btn-block+.btn-block{margin-top:5px} .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear} .fade.in{opacity:1} .collapse{display:none;visibility:hidden} .collapse.in{display:block;visibility:visible} tr.collapse.in{display:table-row} tbody.collapse.in{display:table-row-group} .collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility} .caret{display:inline-block;width:0;height:0;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent} .dropdown-toggle:focus{outline:0} .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;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 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-header,.dropdown-menu>li>a{padding:3px 20px;white-space:nowrap;display:block;line-height:1.42857143} .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0} .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{clear:both;font-weight:400;color:#333} .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-header,.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.nav>li.disabled>a{color:#777} .dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none} .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{font-size:12px} .dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990} .btn-group,.btn-group-vertical,.input-group,.input-group .form-control,.input-group-btn,.input-group-btn>.btn,.nav>li,.nav>li>a,.navbar{position:relative} .pull-right>.dropdown-menu{right:0;left:auto} .dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid} .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px} .btn-group,.btn-group-vertical{display:inline-block} .btn-group-justified,.input-group{display:table;border-collapse:separate} .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{margin-left:5px} .btn .caret,.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: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-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} .input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group,.input-group-btn>.btn+.btn{margin-left:-1px} .btn-group-vertical>.btn:first-child:not(:last-child){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-left-radius:4px} .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{width:100%;table-layout:fixed} .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 input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none} .input-group[class*=col-]{float:none;padding-right:0;padding-left:0} .input-group .form-control{z-index:2;float:left;width:100%;margin-bottom:0} .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 .form-control,.input-group-addon,.input-group-btn{display:table-cell} .input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn: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 .form-control:first-child,.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){border-top-right-radius:0;border-bottom-right-radius:0} .input-group-addon:first-child{border-right:0} .input-group .form-control:last-child,.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{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>.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} .nav{padding-left:0;margin-bottom:0;list-style:none} .nav>li{display:block} .nav>li>a{display:block;padding:10px 15px} .nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee} .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 #ddd;border-bottom-color: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;margin-right:0;border-radius:4px} .nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto} .nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd} .nav-pills>li{float:left} .nav-justified>li,.nav-stacked>li{float:none} .nav-pills>li>a{border-radius:4px} .nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7} .navbar-default .btn-link,.navbar-default .navbar-brand,.navbar-default .navbar-link,.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777} .nav-stacked>li+li{margin-top:2px;margin-left:0} .nav-justified{width:100%} .nav-justified>li>a{margin-bottom:5px;text-align:center} .nav-justified>.dropdown .dropdown-menu{top:auto;left:auto} @media (min-width:768px){ .navbar-right .dropdown-menu{right:0;left:auto} .navbar-right .dropdown-menu-left{right:auto;left:0} .nav-tabs.nav-justified>li{display:table-cell;width:1%} .nav-tabs.nav-justified>li>a{margin-bottom:0;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-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;visibility:hidden} .tab-content>.active{display:block;visibility:visible} .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} .navbar{min-height:50px;margin-bottom:20px;border:1px solid transparent} .navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)} .embed-responsive,.modal,.modal-open,.progress{overflow:hidden} .navbar-collapse.in{overflow-y:auto} @media (max-device-width:480px) and (orientation:landscape){ .navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px} } .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px} @media (min-width:768px){ .navbar{border-radius:4px} .navbar-header{float:left} .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;visibility: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} .container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0} .navbar-static-top{border-radius:0} } .navbar-static-top{z-index:1000;border-width:0 0 1px} .navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030} .navbar-fixed-top{top:0;border-width:0 0 1px} .navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0} .navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px} .list-group-item>.badge,.pager .next>a,.pager .next>span{float:right} .badge,.label{line-height:1;white-space:nowrap;vertical-align:baseline;font-weight:700} .navbar-brand:focus,.navbar-brand:hover{text-decoration:none} .navbar-brand>img{display:block} @media (min-width:768px){ .navbar-fixed-bottom,.navbar-fixed-top{border-radius:0} .navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px} .navbar-toggle{display:none} } .navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px} .progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .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} .breadcrumb>li,.pagination{display:inline-block} .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} } .alert>p+p,.panel-group .panel+.panel{margin-top:5px} @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 .form-control-static,.navbar-form .form-group{display:inline-block} .navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle} .navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle} .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 .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} } .navbar-form{padding:10px 15px;margin:8px -15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)} .badge:empty,.label:empty{display:none} @media (max-width:767px){ .navbar-form .form-group{margin-bottom:5px} .navbar-form .form-group:last-child{margin-bottom:0} .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} } @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-text{float:left;margin-right:15px;margin-left:15px} } .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-radius:4px 4px 0 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-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:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent} .navbar-default .btn-link:focus,.navbar-default .btn-link:hover,.navbar-default .navbar-link:hover{color:#333} .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-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-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{background-color:transparent;color:#fff} .navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7} .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} .navbar-inverse .btn-link,.navbar-inverse .navbar-brand,.navbar-inverse .navbar-link,.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d} .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-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-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-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-link:hover{color:#fff} .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} .pager,.pagination{padding-left:0;margin:20px 0} .breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"} .breadcrumb>.active{color:#777} .pagination{border-radius:4px} .label,.pager li,.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:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px} .nav-pills>li>a>.badge,.tooltip.right{margin-left:3px} .pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px} .pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd} .pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;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} .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} .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{text-align:center;list-style:none} .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 .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} a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none} .label{padding:.2em .6em .3em;font-size:75%;color:#fff;text-align:center;border-radius:.25em} .badge,.progress-bar{font-size:12px;text-align:center} .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;color:#fff;background-color:#777;border-radius:10px} .media-object,.thumbnail{display:block} .jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit} .btn .badge{position:relative;top:-1px} .btn-xs .badge{top:0;padding:1px 5px} .list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff} .list-group-item>.badge+.badge{margin-right:5px} .jumbotron{padding:30px 15px;margin-bottom:30px;background-color:#eee} .alert,.progress,.thumbnail{margin-bottom:20px} .jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200} .jumbotron>hr{border-top-color:#d5d5d5} .container .jumbotron,.container-fluid .jumbotron{border-radius:6px} .jumbotron .container{max-width:100%} @media screen and (min-width:768px){ .jumbotron{padding:48px 0} .container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px} .jumbotron .h1,.jumbotron h1{font-size:63px} } .thumbnail{padding:4px;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 a>img,.thumbnail>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;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-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{ from{background-position:40px 0} to{background-position:0 0} } @-o-keyframes progress-bar-stripes{ from{background-position:40px 0} to{background-position:0 0} } @keyframes progress-bar-stripes{ from{background-position:40px 0} to{background-position:0 0} } .progress{height:20px;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%;line-height:20px;color:#fff;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;-o-transition:width .6s;transition:width .6s} .progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px} .progress-bar.active,.progress.active .progress-bar{-webkit-animation:2s linear infinite progress-bar-stripes;-o-animation:2s linear infinite progress-bar-stripes;animation:2s linear infinite progress-bar-stripes} .progress-bar-success{background-color:#5cb85c} .progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-info{background-color:#5bc0de} .progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-warning{background-color:#f0ad4e} .progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .progress-bar-danger{background-color:#d9534f} .progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)} .media{margin-top:15px} .media:first-child{margin-top:0} .media,.media-body{overflow:hidden;zoom:1} .media-body{width:10000px} .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} a.list-group-item{color:#555} a.list-group-item .list-group-item-heading{color:#333} a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5} .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,a.list-group-item-success .list-group-item-heading{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} .list-group-item-success{color:#3c763d;background-color:#dff0d8} a.list-group-item-success{color:#3c763d} a.list-group-item-success:focus,a.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{color:#fff;background-color:#3c763d;border-color:#3c763d} .list-group-item-info{color:#31708f;background-color:#d9edf7} a.list-group-item-info{color:#31708f} a.list-group-item-info .list-group-item-heading{color:inherit} a.list-group-item-info:focus,a.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{color:#fff;background-color:#31708f;border-color:#31708f} .list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3} a.list-group-item-warning{color:#8a6d3b} a.list-group-item-warning .list-group-item-heading{color:inherit} a.list-group-item-warning:focus,a.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{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b} .list-group-item-danger{color:#a94442;background-color:#f2dede} a.list-group-item-danger{color:#a94442} a.list-group-item-danger .list-group-item-heading{color:inherit} a.list-group-item-danger:focus,a.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{color:#fff;background-color:#a94442;border-color:#a94442} .panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit} .list-group-item-heading{margin-top:0;margin-bottom:5px} .list-group-item-text{margin-bottom:0;line-height:1.3} .carousel-inner>.item>a>img,.carousel-inner>.item>img,.close{line-height:1} .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)} .modal-footer .btn+.btn,.panel-group .panel,.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0} .panel-footer,.well{background-color:#f5f5f5} .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-title{margin-top:0;font-size:16px} .panel-group,.well{margin-bottom:20px} .panel-footer{padding:10px 15px;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px} .panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0} .panel-group .panel-heading,.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>.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} .list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0} .panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body,.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd} .panel-group .panel-footer,.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0} .panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.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>.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-responsive{margin-bottom:0;border:0} .panel-group .panel{border-radius:4px} .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} .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.embed-responsive-16by9{padding-bottom:56.25%} .embed-responsive.embed-responsive-4by3{padding-bottom:75%} .well{min-height:20px;padding:19px;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: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;color:#000;text-shadow:0 1px 0 #fff;opacity:.2} .popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400} .carousel-caption,.carousel-control{text-shadow:0 1px 2px rgba(0,0,0,.6)} .close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5} .modal-backdrop.fade,.tooltip{opacity:0} button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0} .modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;-webkit-overflow-scrolling:touch;outline:0} .modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)} .modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,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 rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)} .modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000} .modal-backdrop.in{opacity:.5} .modal-header{min-height:16.42857143px;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-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-size:12px;line-height:1.4;visibility:visible} .tooltip.in{opacity:.9} .tooltip.top{padding:5px 0;margin-top:-3px} .tooltip.right{padding:0 5px} .tooltip.bottom{padding:5px 0;margin-top:3px} .tooltip.left{padding:0 5px;margin-left:-3px} .tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px} .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid} .tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{border-width:5px 5px 0;border-top-color:#000;bottom:0} .tooltip.top .tooltip-arrow{left:50%;margin-left:-5px} .tooltip.top-left .tooltip-arrow{right:5px;margin-bottom:-5px} .tooltip.top-right .tooltip-arrow{left:5px;margin-bottom:-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,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0} .tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px} .tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px} .tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px} .popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;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-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} .popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid} .carousel,.carousel-inner{position:relative} .popover>.arrow{border-width:11px} .popover>.arrow:after{content:"";border-width:10px} .popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;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: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:rgba(0,0,0,.25)} .carousel-inner>.active,.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0} .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:rgba(0,0,0,.25)} .popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff} .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>.active,.carousel-inner>.next,.carousel-inner>.prev,.center-block{display:block} @media all and (transform-3d),(-webkit-transform-3d){ .carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000} .carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)} .carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)} .carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,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>.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;opacity:.5} .carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);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(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x} .carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);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(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x} .carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;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} .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;margin-top:-10px;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:rgba(0,0,0,0);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} .carousel-caption .btn,.text-hide{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:-15px;font-size:30px} .carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px} .carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px} .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,.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,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both} .center-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} .hidden,.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} .invisible{visibility:hidden} .text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0} .hidden{visibility:hidden!important} .affix{position:fixed} @-ms-viewport{width:device-width} @media (max-width:767px){ .visible-xs{display:block!important} table.visible-xs{display:table} 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} 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} 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} 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} .hidden-lg{display:none!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} } .visible-print{display:none!important} @media print{ .visible-print{display:block!important} table.visible-print{display:table} 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} } clean-css-5.3.3/test/fixtures/bootstrap-v3.css 0000775 0000000 0000000 00000424071 14532047255 0021321 0 ustar 00root root 0000000 0000000 /* * Bootstrap v3.3.2 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /* normalize.css v3.0.2 | MIT License | git.io/normalize */ html { font-family: sans-serif; -webkit-text-size-adjust: 100%; -ms-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: 1px dotted; } b, strong { font-weight: bold; } dfn { font-style: italic; } h1 { margin: .67em 0; font-size: 2em; } mark { color: #000; background: #ff0; } small { font-size: 80%; } sub, sup { position: relative; font-size: 75%; line-height: 0; vertical-align: baseline; } sup { top: -.5em; } sub { bottom: -.25em; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 1em 40px; } hr { height: 0; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } pre { overflow: auto; } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } button, input, optgroup, select, textarea { margin: 0; font: inherit; color: inherit; } 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 { padding: 0; border: 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-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } fieldset { padding: .35em .625em .75em; margin: 0 2px; border: 1px solid #c0c0c0; } legend { padding: 0; border: 0; } textarea { overflow: auto; } optgroup { font-weight: bold; } table { border-spacing: 0; border-collapse: collapse; } td, th { padding: 0; } /* Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print { *, *:before, *:after { 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: ""; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } thead { display: table-header-group; } tr, img { page-break-inside: avoid; } img { max-width: 100% !important; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } select { background: #fff !important; } .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 th, .table-bordered td { 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: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .glyphicon-asterisk:before { content: "\2a"; } .glyphicon-plus:before { content: "\2b"; } .glyphicon-euro:before, .glyphicon-eur: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 { content: "\e227"; } .glyphicon-yen:before { content: "\00a5"; } .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"; } * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } *:before, *:after { -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; } input, button, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; } a { color: #337ab7; text-decoration: none; } a:hover, a:focus { color: #23527c; text-decoration: underline; } a:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } figure { margin: 0; } img { vertical-align: middle; } .img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; max-width: 100%; height: auto; } .img-rounded { border-radius: 6px; } .img-thumbnail { display: inline-block; max-width: 100%; height: auto; 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; } .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; } 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, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { font-weight: normal; line-height: 1; color: #777; } h1, .h1, h2, .h2, h3, .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, .h4, h5, .h5, h6, .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:hover { color: #286090; } .text-success { color: #3c763d; } a.text-success:hover { color: #2b542c; } .text-info { color: #31708f; } a.text-info:hover { color: #245269; } .text-warning { color: #8a6d3b; } a.text-warning:hover { color: #66512c; } .text-danger { color: #a94442; } a.text-danger:hover { color: #843534; } .bg-primary { color: #fff; background-color: #337ab7; } a.bg-primary:hover { background-color: #286090; } .bg-success { background-color: #dff0d8; } a.bg-success:hover { background-color: #c1e2b3; } .bg-info { background-color: #d9edf7; } a.bg-info:hover { background-color: #afd9ee; } .bg-warning { background-color: #fcf8e3; } a.bg-warning:hover { background-color: #f7ecb5; } .bg-danger { background-color: #f2dede; } a.bg-danger:hover { background-color: #e4b9b9; } .page-header { padding-bottom: 9px; margin: 40px 0 20px; border-bottom: 1px solid #eee; } ul, ol { margin-top: 0; margin-bottom: 10px; } ul ul, ol ul, ul ol, ol ol { margin-bottom: 0; } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; margin-left: -5px; list-style: none; } .list-inline > li { display: inline-block; padding-right: 5px; padding-left: 5px; } dl { margin-top: 0; margin-bottom: 20px; } dt, dd { line-height: 1.42857143; } dt { font-weight: bold; } dd { margin-left: 0; } @media (min-width: 768px) { .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } } abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted #777; } .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 p:last-child, blockquote ul:last-child, blockquote ol:last-child { margin-bottom: 0; } blockquote footer, blockquote small, blockquote .small { display: block; font-size: 80%; line-height: 1.42857143; color: #777; } blockquote footer:before, blockquote small: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 footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before { content: ''; } .blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small: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 { padding: 2px 4px; font-size: 90%; color: #c7254e; background-color: #f9f2f4; border-radius: 4px; } kbd { padding: 2px 4px; font-size: 90%; 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: bold; -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; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { 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; } caption { padding-top: 8px; padding-bottom: 8px; color: #777; text-align: left; } th { text-align: left; } .table { width: 100%; max-width: 100%; margin-bottom: 20px; } .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { 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 > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { border-top: 0; } .table > tbody + tbody { border-top: 2px solid #ddd; } .table .table { background-color: #fff; } .table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { padding: 5px; } .table-bordered { border: 1px solid #ddd; } .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { border: 1px solid #ddd; } .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { border-bottom-width: 2px; } .table-striped > tbody > tr:nth-of-type(odd) { background-color: #f9f9f9; } .table-hover > tbody > tr:hover { background-color: #f5f5f5; } 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; } .table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { background-color: #f5f5f5; } .table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { background-color: #e8e8e8; } .table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { background-color: #dff0d8; } .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { background-color: #d0e9c6; } .table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { background-color: #d9edf7; } .table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { background-color: #c4e3f3; } .table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { background-color: #fcf8e3; } .table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { background-color: #faf2cc; } .table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { background-color: #f2dede; } .table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { 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 > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { white-space: nowrap; } .table-responsive > .table-bordered { border: 0; } .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { border-bottom: 0; } } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { display: block; width: 100%; padding: 0; margin-bottom: 20px; font-size: 21px; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: bold; } input[type="search"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } input[type="radio"], input[type="checkbox"] { margin: 4px 0 0; margin-top: 1px \9; line-height: normal; } input[type="file"] { display: block; } input[type="range"] { display: block; width: 100%; } select[multiple], select[size] { height: auto; } input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } output { display: block; padding-top: 7px; font-size: 14px; line-height: 1.42857143; color: #555; } .form-control { display: block; width: 100%; height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; 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 ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .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[disabled], .form-control[readonly], fieldset[disabled] .form-control { cursor: not-allowed; background-color: #eee; opacity: 1; } textarea.form-control { height: auto; } input[type="search"] { -webkit-appearance: none; } @media screen and (-webkit-min-device-pixel-ratio: 0) { input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { line-height: 34px; } input[type="date"].input-sm, input[type="time"].input-sm, input[type="datetime-local"].input-sm, input[type="month"].input-sm, .input-group-sm input[type="date"], .input-group-sm input[type="time"], .input-group-sm input[type="datetime-local"], .input-group-sm input[type="month"] { line-height: 30px; } input[type="date"].input-lg, input[type="time"].input-lg, input[type="datetime-local"].input-lg, input[type="month"].input-lg, .input-group-lg input[type="date"], .input-group-lg input[type="time"], .input-group-lg input[type="datetime-local"], .input-group-lg input[type="month"] { line-height: 46px; } } .form-group { margin-bottom: 15px; } .radio, .checkbox { position: relative; display: block; margin-top: 10px; margin-bottom: 10px; } .radio label, .checkbox label { min-height: 20px; padding-left: 20px; margin-bottom: 0; font-weight: normal; cursor: pointer; } .radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { position: absolute; margin-top: 4px \9; margin-left: -20px; } .radio + .radio, .checkbox + .checkbox { margin-top: -5px; } .radio-inline, .checkbox-inline { display: inline-block; padding-left: 20px; margin-bottom: 0; font-weight: normal; vertical-align: middle; cursor: pointer; } .radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { margin-top: 0; margin-left: 10px; } input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"].disabled, input[type="checkbox"].disabled, fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"] { cursor: not-allowed; } .radio-inline.disabled, .checkbox-inline.disabled, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox-inline { cursor: not-allowed; } .radio.disabled label, .checkbox.disabled label, fieldset[disabled] .radio label, fieldset[disabled] .checkbox label { cursor: not-allowed; } .form-control-static { 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; } textarea.input-sm, select[multiple].input-sm { height: auto; } .form-group-sm .form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } select.form-group-sm .form-control { height: 30px; line-height: 30px; } textarea.form-group-sm .form-control, select[multiple].form-group-sm .form-control { height: auto; } .form-group-sm .form-control-static { height: 30px; padding: 5px 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; } textarea.input-lg, select[multiple].input-lg { height: auto; } .form-group-lg .form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px; } select.form-group-lg .form-control { height: 46px; line-height: 46px; } textarea.form-group-lg .form-control, select[multiple].form-group-lg .form-control { height: auto; } .form-group-lg .form-control-static { height: 46px; padding: 10px 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; } .input-lg + .form-control-feedback { width: 46px; height: 46px; line-height: 46px; } .input-sm + .form-control-feedback { width: 30px; height: 30px; line-height: 30px; } .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline 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 .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline 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 .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline 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 .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control { width: auto; } .form-inline .input-group > .form-control { width: 100%; } .form-inline .control-label { margin-bottom: 0; vertical-align: middle; } .form-inline .radio, .form-inline .checkbox { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle; } .form-inline .radio label, .form-inline .checkbox label { padding-left: 0; } .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { position: relative; margin-left: 0; } .form-inline .has-feedback .form-control-feedback { top: 0; } } .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { padding-top: 7px; margin-top: 0; margin-bottom: 0; } .form-horizontal .radio, .form-horizontal .checkbox { 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: 14.333333px; } } @media (min-width: 768px) { .form-horizontal .form-group-sm .control-label { padding-top: 6px; } } .btn { display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 14px; font-weight: normal; line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; -ms-touch-action: manipulation; touch-action: manipulation; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-image: none; border: 1px solid transparent; border-radius: 4px; } .btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, .btn:focus, .btn.focus { 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 { pointer-events: none; cursor: not-allowed; filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none; opacity: .65; } .btn-default { color: #333; background-color: #fff; border-color: #ccc; } .btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { color: #333; background-color: #e6e6e6; border-color: #adadad; } .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { background-image: none; } .btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { 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:hover, .btn-primary:focus, .btn-primary.focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { color: #fff; background-color: #286090; border-color: #204d74; } .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { background-image: none; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { 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:hover, .btn-success:focus, .btn-success.focus, .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { color: #fff; background-color: #449d44; border-color: #398439; } .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { background-image: none; } .btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { 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:hover, .btn-info:focus, .btn-info.focus, .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { color: #fff; background-color: #31b0d5; border-color: #269abc; } .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { background-image: none; } .btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { 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:hover, .btn-warning:focus, .btn-warning.focus, .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { color: #fff; background-color: #ec971f; border-color: #d58512; } .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { background-image: none; } .btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { 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:hover, .btn-danger:focus, .btn-danger.focus, .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { color: #fff; background-color: #c9302c; border-color: #ac2925; } .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { background-image: none; } .btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { background-color: #d9534f; border-color: #d43f3a; } .btn-danger .badge { color: #d9534f; background-color: #fff; } .btn-link { font-weight: normal; 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:hover, .btn-link:focus, .btn-link:active { border-color: transparent; } .btn-link:hover, .btn-link:focus { color: #23527c; text-decoration: underline; background-color: transparent; } .btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { color: #777; text-decoration: none; } .btn-lg, .btn-group-lg > .btn { padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px; } .btn-sm, .btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } .btn-xs, .btn-group-xs > .btn { 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="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].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; visibility: hidden; } .collapse.in { display: block; visibility: visible; } tr.collapse.in { display: table-row; } tbody.collapse.in { display: table-row-group; } .collapsing { position: relative; height: 0; overflow: hidden; -webkit-transition-timing-function: ease; -o-transition-timing-function: ease; transition-timing-function: ease; -webkit-transition-duration: .35s; -o-transition-duration: .35s; transition-duration: .35s; -webkit-transition-property: height, visibility; -o-transition-property: height, visibility; transition-property: height, visibility; } .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px solid; border-right: 4px solid transparent; border-left: 4px solid transparent; } .dropup, .dropdown { 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; -webkit-background-clip: padding-box; 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: normal; line-height: 1.42857143; color: #333; white-space: nowrap; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { color: #262626; text-decoration: none; background-color: #f5f5f5; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: #fff; text-decoration: none; background-color: #337ab7; outline: 0; } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { color: #777; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { 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 solid; } .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 > .btn, .btn-group-vertical > .btn { position: relative; float: left; } .btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { 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-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; border-bottom-width: 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-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-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 input[type="radio"], [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], [data-toggle="buttons"] > .btn input[type="checkbox"], [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { 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-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; } textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].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; } textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].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: normal; 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="radio"], .input-group-addon input[type="checkbox"] { margin-top: 0; } .input-group .form-control:first-child, .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:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group-addon:first-child { border-right: 0; } .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group-addon:last-child { border-left: 0; } .input-group-btn { position: relative; font-size: 0; white-space: nowrap; } .input-group-btn > .btn { position: relative; } .input-group-btn > .btn + .btn { margin-left: -1px; } .input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { 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 { margin-left: -1px; } .nav { padding-left: 0; margin-bottom: 0; list-style: none; } .nav > li { position: relative; display: block; } .nav > li > a { position: relative; display: block; padding: 10px 15px; } .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; background-color: #eee; } .nav > li.disabled > a { color: #777; } .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { color: #777; text-decoration: none; cursor: not-allowed; background-color: transparent; } .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { 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:hover, .nav-tabs > li.active > a:focus { color: #555; cursor: default; background-color: #fff; border: 1px solid #ddd; border-bottom-color: 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:hover, .nav-tabs.nav-justified > .active > a:focus { 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:hover, .nav-tabs.nav-justified > .active > a:focus { 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:hover, .nav-pills > li.active > a:focus { 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:hover, .nav-tabs-justified > .active > a:focus { 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:hover, .nav-tabs-justified > .active > a:focus { border-bottom-color: #fff; } } .tab-content > .tab-pane { display: none; visibility: hidden; } .tab-content > .active { display: block; visibility: visible; } .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; } } @media (min-width: 768px) { .navbar-header { float: left; } } .navbar-collapse { padding-right: 15px; padding-left: 15px; overflow-x: visible; -webkit-overflow-scrolling: touch; border-top: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); } .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; visibility: visible !important; } .navbar-collapse.in { overflow-y: visible; } .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { padding-right: 0; padding-left: 0; } } .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 340px; } @media (max-device-width: 480px) and (orientation: landscape) { .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 200px; } } .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { margin-right: -15px; margin-left: -15px; } @media (min-width: 768px) { .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { 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-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; } @media (min-width: 768px) { .navbar-fixed-top, .navbar-fixed-bottom { 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; } .navbar-brand { float: left; height: 50px; padding: 15px 15px; font-size: 18px; line-height: 20px; } .navbar-brand:hover, .navbar-brand:focus { text-decoration: none; } .navbar-brand > img { display: block; } @media (min-width: 768px) { .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { margin-left: -15px; } } .navbar-toggle { position: relative; float: right; padding: 9px 10px; margin-top: 8px; margin-right: 15px; 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 > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { padding: 5px 15px 5px 25px; } .navbar-nav .open .dropdown-menu > li > a { line-height: 20px; } .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { 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; margin-top: 8px; margin-right: -15px; margin-bottom: 8px; margin-left: -15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); } @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 .input-group-addon, .navbar-form .input-group .input-group-btn, .navbar-form .input-group .form-control { width: auto; } .navbar-form .input-group > .form-control { width: 100%; } .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; } .navbar-form .radio, .navbar-form .checkbox { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle; } .navbar-form .radio label, .navbar-form .checkbox label { padding-left: 0; } .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { 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; } } @media (min-width: 768px) { .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:hover, .navbar-default .navbar-brand:focus { color: #5e5e5e; background-color: transparent; } .navbar-default .navbar-text { color: #777; } .navbar-default .navbar-nav > li > a { color: #777; } .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { color: #333; background-color: transparent; } .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { color: #555; background-color: #e7e7e7; } .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { color: #ccc; background-color: transparent; } .navbar-default .navbar-toggle { border-color: #ddd; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { 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-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { 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:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { color: #333; background-color: transparent; } .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { color: #555; background-color: #e7e7e7; } .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #ccc; background-color: transparent; } } .navbar-default .navbar-link { color: #777; } .navbar-default .navbar-link:hover { color: #333; } .navbar-default .btn-link { color: #777; } .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { color: #333; } .navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:focus { color: #ccc; } .navbar-inverse { background-color: #222; border-color: #080808; } .navbar-inverse .navbar-brand { color: #9d9d9d; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { color: #fff; background-color: transparent; } .navbar-inverse .navbar-text { color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a { color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { color: #fff; background-color: transparent; } .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { color: #fff; background-color: #080808; } .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { color: #444; background-color: transparent; } .navbar-inverse .navbar-toggle { border-color: #333; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { 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-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { 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:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { color: #fff; background-color: transparent; } .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { color: #fff; background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { color: #444; background-color: transparent; } } .navbar-inverse .navbar-link { color: #9d9d9d; } .navbar-inverse .navbar-link:hover { color: #fff; } .navbar-inverse .btn-link { color: #9d9d9d; } .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { color: #fff; } .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:focus { 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: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 > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { color: #23527c; background-color: #eee; border-color: #ddd; } .pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { z-index: 2; color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7; } .pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { 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; } .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; } .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:hover, .pager li > a:focus { 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:hover, .pager .disabled > a:focus, .pager .disabled > span { color: #777; cursor: not-allowed; background-color: #fff; } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; } a.label:hover, a.label:focus { 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]:hover, .label-default[href]:focus { background-color: #5e5e5e; } .label-primary { background-color: #337ab7; } .label-primary[href]:hover, .label-primary[href]:focus { background-color: #286090; } .label-success { background-color: #5cb85c; } .label-success[href]:hover, .label-success[href]:focus { background-color: #449d44; } .label-info { background-color: #5bc0de; } .label-info[href]:hover, .label-info[href]:focus { background-color: #31b0d5; } .label-warning { background-color: #f0ad4e; } .label-warning[href]:hover, .label-warning[href]:focus { background-color: #ec971f; } .label-danger { background-color: #d9534f; } .label-danger[href]:hover, .label-danger[href]:focus { background-color: #c9302c; } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; background-color: #777; border-radius: 10px; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .btn-xs .badge { top: 0; padding: 1px 5px; } a.badge:hover, a.badge:focus { 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: 30px 15px; margin-bottom: 30px; color: inherit; background-color: #eee; } .jumbotron h1, .jumbotron .h1 { color: inherit; } .jumbotron p { margin-bottom: 15px; font-size: 21px; font-weight: 200; } .jumbotron > hr { border-top-color: #d5d5d5; } .container .jumbotron, .container-fluid .jumbotron { border-radius: 6px; } .jumbotron .container { max-width: 100%; } @media screen and (min-width: 768px) { .jumbotron { padding: 48px 0; } .container .jumbotron, .container-fluid .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:hover, a.thumbnail:focus, a.thumbnail.active { 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: bold; } .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 { from { background-position: 40px 0; } to { background-position: 0 0; } } @-o-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { 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-striped .progress-bar, .progress-bar-striped { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -webkit-background-size: 40px 40px; background-size: 40px 40px; } .progress.active .progress-bar, .progress-bar.active { -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, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } .progress-bar-info { background-color: #5bc0de; } .progress-striped .progress-bar-info { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } .progress-bar-warning { background-color: #f0ad4e; } .progress-striped .progress-bar-warning { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } .progress-bar-danger { background-color: #d9534f; } .progress-striped .progress-bar-danger { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } .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-right, .media > .pull-right { padding-left: 10px; } .media-left, .media > .pull-left { padding-right: 10px; } .media-left, .media-right, .media-body { 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; } a.list-group-item { color: #555; } a.list-group-item .list-group-item-heading { color: #333; } a.list-group-item:hover, a.list-group-item:focus { color: #555; text-decoration: none; background-color: #f5f5f5; } .list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { color: #777; cursor: not-allowed; background-color: #eee; } .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { color: inherit; } .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { color: #777; } .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { z-index: 2; color: #fff; background-color: #337ab7; border-color: #337ab7; } .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active .list-group-item-heading > small, .list-group-item.active:hover .list-group-item-heading > small, .list-group-item.active:focus .list-group-item-heading > small, .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading > .small { color: inherit; } .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { color: #c7ddef; } .list-group-item-success { color: #3c763d; background-color: #dff0d8; } a.list-group-item-success { color: #3c763d; } a.list-group-item-success .list-group-item-heading { color: inherit; } a.list-group-item-success:hover, a.list-group-item-success:focus { color: #3c763d; background-color: #d0e9c6; } a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus { color: #fff; background-color: #3c763d; border-color: #3c763d; } .list-group-item-info { color: #31708f; background-color: #d9edf7; } a.list-group-item-info { color: #31708f; } a.list-group-item-info .list-group-item-heading { color: inherit; } a.list-group-item-info:hover, a.list-group-item-info:focus { color: #31708f; background-color: #c4e3f3; } a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus { color: #fff; background-color: #31708f; border-color: #31708f; } .list-group-item-warning { color: #8a6d3b; background-color: #fcf8e3; } a.list-group-item-warning { color: #8a6d3b; } a.list-group-item-warning .list-group-item-heading { color: inherit; } a.list-group-item-warning:hover, a.list-group-item-warning:focus { color: #8a6d3b; background-color: #faf2cc; } a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus { color: #fff; background-color: #8a6d3b; border-color: #8a6d3b; } .list-group-item-danger { color: #a94442; background-color: #f2dede; } a.list-group-item-danger { color: #a94442; } a.list-group-item-danger .list-group-item-heading { color: inherit; } a.list-group-item-danger:hover, a.list-group-item-danger:focus { color: #a94442; background-color: #ebcccc; } a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus { 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 { color: inherit; } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 16px; color: inherit; } .panel-title > a, .panel-title > small, .panel-title > .small, .panel-title > small > a, .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-heading + .list-group .list-group-item:first-child { border-top-width: 0; } .list-group + .panel-footer { border-top-width: 0; } .panel > .table, .panel > .table-responsive > .table, .panel > .panel-collapse > .table { margin-bottom: 0; } .panel > .table caption, .panel > .table-responsive > .table caption, .panel > .panel-collapse > .table caption { padding-right: 15px; padding-left: 15px; } .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel > .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 td:first-child, .panel > .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 td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th: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 th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { border-top-left-radius: 3px; } .panel > .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 td:last-child, .panel > .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 td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th: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 th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { border-top-right-radius: 3px; } .panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .table:last-child > tbody:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } .panel > .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 td:first-child, .panel > .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 td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { border-bottom-left-radius: 3px; } .panel > .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 td:last-child, .panel > .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 td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .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 th, .panel > .table > tbody:first-child > tr:first-child td { border-top: 0; } .panel > .table-bordered, .panel > .table-responsive > .table-bordered { border: 0; } .panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { border-left: 0; } .panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } .panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { border-bottom: 0; } .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-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 > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { 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 iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0; } .embed-responsive.embed-responsive-16by9 { padding-bottom: 56.25%; } .embed-responsive.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: bold; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; filter: alpha(opacity=20); opacity: .2; } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; filter: alpha(opacity=50); opacity: .5; } button.close { -webkit-appearance: none; padding: 0; cursor: pointer; background: transparent; border: 0; } .modal-open { overflow: hidden; } .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; display: none; overflow: hidden; -webkit-overflow-scrolling: touch; outline: 0; } .modal.fade .modal-dialog { -webkit-transition: -webkit-transform .3s ease-out; -o-transition: -o-transform .3s ease-out; transition: transform .3s ease-out; -webkit-transform: translate(0, -25%); -ms-transform: translate(0, -25%); -o-transform: translate(0, -25%); transform: translate(0, -25%); } .modal.in .modal-dialog { -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); -o-transform: translate(0, 0); transform: translate(0, 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; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; outline: 0; -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); box-shadow: 0 3px 9px rgba(0, 0, 0, .5); } .modal-backdrop { position: absolute; top: 0; right: 0; left: 0; background-color: #000; } .modal-backdrop.fade { filter: alpha(opacity=0); opacity: 0; } .modal-backdrop.in { filter: alpha(opacity=50); opacity: .5; } .modal-header { min-height: 16.42857143px; 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-size: 12px; font-weight: normal; line-height: 1.4; visibility: visible; 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-inner { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; text-decoration: none; background-color: #000; border-radius: 4px; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .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; bottom: 0; margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000; } .tooltip.top-right .tooltip-arrow { bottom: 0; left: 5px; margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000; } .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; } .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-size: 14px; font-weight: normal; line-height: 1.42857143; text-align: left; white-space: normal; background-color: #fff; -webkit-background-clip: padding-box; 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-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; } .popover > .arrow, .popover > .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover > .arrow { border-width: 11px; } .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; } .carousel { position: relative; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner > .item { position: relative; display: none; -webkit-transition: .6s ease-in-out left; -o-transition: .6s ease-in-out left; transition: .6s ease-in-out left; } .carousel-inner > .item > img, .carousel-inner > .item > a > img { line-height: 1; } @media all and (transform-3d), (-webkit-transform-3d) { .carousel-inner > .item { -webkit-transition: -webkit-transform .6s ease-in-out; -o-transition: -o-transform .6s ease-in-out; transition: transform .6s ease-in-out; -webkit-backface-visibility: hidden; backface-visibility: hidden; -webkit-perspective: 1000; perspective: 1000; } .carousel-inner > .item.next, .carousel-inner > .item.active.right { left: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } .carousel-inner > .item.prev, .carousel-inner > .item.active.left { left: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { left: 0; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 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); filter: alpha(opacity=50); opacity: .5; } .carousel-control.left { background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); 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(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); 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) 0%, rgba(0, 0, 0, .5) 100%); 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(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); background-repeat: repeat-x; } .carousel-control:hover, .carousel-control:focus { color: #fff; text-decoration: none; filter: alpha(opacity=90); outline: 0; opacity: .9; } .carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { position: absolute; top: 50%; z-index: 5; display: inline-block; } .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { left: 50%; margin-left: -10px; } .carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { right: 50%; margin-right: -10px; } .carousel-control .icon-prev, .carousel-control .icon-next { width: 20px; height: 20px; margin-top: -10px; 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: rgba(0, 0, 0, 0); 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-prev, .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; font-size: 30px; } .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { margin-left: -15px; } .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { margin-right: -15px; } .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px; } .carousel-indicators { bottom: 20px; } } .clearfix:before, .clearfix:after, .dl-horizontal dd:before, .dl-horizontal dd:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .pager:before, .pager:after, .panel-body:before, .panel-body:after, .modal-footer:before, .modal-footer:after { display: table; content: " "; } .clearfix:after, .dl-horizontal dd:after, .container:after, .container-fluid:after, .row:after, .form-horizontal .form-group:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .pager:after, .panel-body:after, .modal-footer: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; visibility: hidden !important; } .affix { position: fixed; } @-ms-viewport { width: device-width; } .visible-xs, .visible-sm, .visible-md, .visible-lg { display: none !important; } .visible-xs-block, .visible-xs-inline, .visible-xs-inline-block, .visible-sm-block, .visible-sm-inline, .visible-sm-inline-block, .visible-md-block, .visible-md-inline, .visible-md-inline-block, .visible-lg-block, .visible-lg-inline, .visible-lg-inline-block { display: none !important; } @media (max-width: 767px) { .visible-xs { display: block !important; } table.visible-xs { display: table; } tr.visible-xs { display: table-row !important; } th.visible-xs, td.visible-xs { display: table-cell !important; } } @media (max-width: 767px) { .visible-xs-block { display: block !important; } } @media (max-width: 767px) { .visible-xs-inline { display: inline !important; } } @media (max-width: 767px) { .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; } tr.visible-sm { display: table-row !important; } th.visible-sm, td.visible-sm { display: table-cell !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm-block { display: block !important; } } @media (min-width: 768px) and (max-width: 991px) { .visible-sm-inline { display: inline !important; } } @media (min-width: 768px) and (max-width: 991px) { .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; } tr.visible-md { display: table-row !important; } th.visible-md, td.visible-md { display: table-cell !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md-block { display: block !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md-inline { display: inline !important; } } @media (min-width: 992px) and (max-width: 1199px) { .visible-md-inline-block { display: inline-block !important; } } @media (min-width: 1200px) { .visible-lg { display: block !important; } table.visible-lg { display: table; } tr.visible-lg { display: table-row !important; } th.visible-lg, td.visible-lg { display: table-cell !important; } } @media (min-width: 1200px) { .visible-lg-block { display: block !important; } } @media (min-width: 1200px) { .visible-lg-inline { display: inline !important; } } @media (min-width: 1200px) { .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; } tr.visible-print { display: table-row !important; } th.visible-print, td.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; } } @media print { .hidden-print { display: none !important; } } clean-css-5.3.3/test/fixtures/bootstrap-v5-min.css 0000664 0000000 0000000 00000447324 14532047255 0022107 0 ustar 00root root 0000000 0000000 @charset "UTF-8"; /*! * Bootstrap v5.0.0-beta2 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ dd,legend{margin-bottom:.5rem} label,output{display:inline-block} progress,sub,sup{vertical-align:baseline} .blockquote>:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0} .img-fluid,.img-thumbnail{max-width:100%;height:auto} .g-0,.gy-0,.row{--bs-gutter-y:0} .btn-check,.form-floating>label{position:absolute;pointer-events:none} .input-group .btn:focus,.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3} .form-check-inline .form-check-input~.invalid-feedback,.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em} .dropdown-header,.dropdown-item,.dropdown-toggle,.input-group-text,.navbar-brand{white-space:nowrap} .card,code{word-wrap:break-word} .accordion-button:hover,.input-group .btn{z-index:2} .breadcrumb,.carousel-indicators,.dropdown-menu,.nav,.navbar-nav,.pagination{list-style:none} :root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))} *,::after,::before{box-sizing:border-box} @media (prefers-reduced-motion:no-preference){ :root{scroll-behavior:smooth} } body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent} a>code,hr,pre code{color:inherit} [tabindex="-1"]:focus:not(:focus-visible){outline:0!important} hr{margin:1rem 0;background-color:currentColor;border:0;opacity:.25} hr:not([size]){height:1px} .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2} address,dl,ol,p,ul{margin-bottom:1rem} blockquote,figure{margin:0 0 1rem} dt,kbd kbd{font-weight:700} address,legend{line-height:inherit} .h1,h1{font-size:calc(1.375rem + 1.5vw)} @media (min-width:1200px){ .h1,h1{font-size:2.5rem} } .h2,h2{font-size:calc(1.325rem + .9vw)} @media (min-width:1200px){ .h2,h2{font-size:2rem} } .h3,h3{font-size:calc(1.3rem + .6vw)} @media (min-width:1200px){ .h3,h3{font-size:1.75rem} } .h4,h4{font-size:calc(1.275rem + .3vw)} @media (min-width:1200px){ .h4,h4{font-size:1.5rem} } .h5,h5{font-size:1.25rem} .h6,h6{font-size:1rem} dl,ol,p,ul{margin-top:0} abbr[data-bs-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none} .btn,.form-control-color:not(:disabled):not([readonly]),.form-control[type=file]:not(:disabled):not([readonly]),[role=button],[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled),summary{cursor:pointer} address{font-style:normal} ol,ul{padding-left:2rem} dd{margin-left:0} .blockquote,.blockquote-footer,pre{margin-bottom:1rem} b,strong{font-weight:bolder} .small,small{font-size:.875em} .mark,mark{padding:.2em;background-color:#fcf8e3} sub,sup{position:relative;font-size:.75em;line-height:0} sub{bottom:-.25em} sup{top:-.5em} a{color:#0d6efd;text-decoration:underline} a:hover{color:#0a58ca} a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none} code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override} code,kbd,pre{font-size:.875em} pre{display:block;margin-top:0;overflow:auto} pre code{font-size:inherit;word-break:normal} code{color:#d63384} kbd{padding:.2rem .4rem;color:#fff;background-color:#212529;border-radius:.2rem} kbd kbd{padding:0;font-size:1em} img,svg{vertical-align:middle} table{caption-side:bottom;border-collapse:collapse} caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left} th{text-align:inherit;text-align:-webkit-match-parent} tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit} button{border-radius:0} fieldset,iframe{border:0} button:focus:not(:focus-visible){outline:0} button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit} button,select{text-transform:none} select{word-wrap:normal} [list]::-webkit-calendar-picker-indicator{display:none} [type=button],[type=reset],[type=submit],button{-webkit-appearance:button} ::-moz-focus-inner{padding:0;border-style:none} textarea{resize:vertical} fieldset{min-width:0;padding:0;margin:0} legend{float:left;width:100%;padding:0;font-size:calc(1.275rem + .3vw)} legend+*{clear:left} ::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0} ::-webkit-inner-spin-button{height:auto} [type=search]{outline-offset:-2px;-webkit-appearance:textfield} ::-webkit-search-decoration{-webkit-appearance:none} ::-webkit-color-swatch-wrapper{padding:0} ::file-selector-button{font:inherit} ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button} .display-1,.display-2,.display-3,.display-4,.display-5,.display-6{font-weight:300;line-height:1.2} summary{display:list-item} [hidden]{display:none!important} .figure,.list-inline-item{display:inline-block} .lead{font-size:1.25rem;font-weight:300} .display-1{font-size:calc(1.625rem + 4.5vw)} @media (min-width:1200px){ legend{font-size:1.5rem} .display-1{font-size:5rem} } .display-2{font-size:calc(1.575rem + 3.9vw)} @media (min-width:1200px){ .display-2{font-size:4.5rem} } .display-3{font-size:calc(1.525rem + 3.3vw)} @media (min-width:1200px){ .display-3{font-size:4rem} } .display-4{font-size:calc(1.475rem + 2.7vw)} @media (min-width:1200px){ .display-4{font-size:3.5rem} } .display-5{font-size:calc(1.425rem + 2.1vw)} @media (min-width:1200px){ .display-5{font-size:3rem} } .display-6{font-size:calc(1.375rem + 1.5vw)} .btn,.btn-link,.dropdown-item,.form-control,.form-select{font-weight:400} @media (min-width:1200px){ .display-6{font-size:2.5rem} } .list-inline,.list-unstyled{padding-left:0;list-style:none} .list-inline-item:not(:last-child){margin-right:.5rem} .initialism{font-size:.875em;text-transform:uppercase} .blockquote{font-size:1.25rem} .blockquote-footer,.figure-caption{font-size:.875em;color:#6c757d} .blockquote-footer{margin-top:-1rem} .blockquote-footer::before{content:"— "} .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem} .figure-img{margin-bottom:.5rem;line-height:1} .container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto} @media (min-width:576px){ .container,.container-sm{max-width:540px} } @media (min-width:768px){ .container,.container-md,.container-sm{max-width:720px} } @media (min-width:992px){ .container,.container-lg,.container-md,.container-sm{max-width:960px} } @media (min-width:1200px){ .container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px} } @media (min-width:1400px){ .container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px} } .row{--bs-gutter-x:1.5rem;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x)/ -2);margin-left:calc(var(--bs-gutter-x)/ -2)} .row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)/ 2);padding-left:calc(var(--bs-gutter-x)/ 2);margin-top:var(--bs-gutter-y)} .col{flex:1 0 0%} .row-cols-auto>*{flex:0 0 auto;width:auto} .row-cols-1>*{flex:0 0 auto;width:100%} .row-cols-2>*{flex:0 0 auto;width:50%} .row-cols-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-4>*{flex:0 0 auto;width:25%} .row-cols-5>*{flex:0 0 auto;width:20%} .row-cols-6>*{flex:0 0 auto;width:16.6666666667%} .col-auto{flex:0 0 auto;width:auto} .col-1{flex:0 0 auto;width:8.3333333333%} .col-2,.col-3{flex:0 0 auto} .col-2{width:16.6666666667%} .col-3{width:25%} .col-4,.col-5{flex:0 0 auto} .col-4{width:33.3333333333%} .col-5{width:41.6666666667%} .col-6,.col-7{flex:0 0 auto} .col-6{width:50%} .col-7{width:58.3333333333%} .col-8,.col-9{flex:0 0 auto} .col-8{width:66.6666666667%} .col-9{width:75%} .col-10{flex:0 0 auto;width:83.3333333333%} .col-11{flex:0 0 auto;width:91.6666666667%} .col-12{flex:0 0 auto;width:100%} .offset-1{margin-left:8.3333333333%} .offset-2{margin-left:16.6666666667%} .offset-3{margin-left:25%} .offset-4{margin-left:33.3333333333%} .offset-5{margin-left:41.6666666667%} .offset-6{margin-left:50%} .offset-7{margin-left:58.3333333333%} .offset-8{margin-left:66.6666666667%} .offset-9{margin-left:75%} .offset-10{margin-left:83.3333333333%} .offset-11{margin-left:91.6666666667%} .g-0,.gx-0{--bs-gutter-x:0} .g-1,.gx-1{--bs-gutter-x:0.25rem} .g-1,.gy-1{--bs-gutter-y:0.25rem} .g-2,.gx-2{--bs-gutter-x:0.5rem} .g-2,.gy-2{--bs-gutter-y:0.5rem} .g-3,.gx-3{--bs-gutter-x:1rem} .g-3,.gy-3{--bs-gutter-y:1rem} .g-4,.gx-4{--bs-gutter-x:1.5rem} .g-4,.gy-4{--bs-gutter-y:1.5rem} .g-5,.gx-5{--bs-gutter-x:3rem} .g-5,.gy-5{--bs-gutter-y:3rem} @media (min-width:576px){ .col-sm{flex:1 0 0%} .row-cols-sm-auto>*{flex:0 0 auto;width:auto} .row-cols-sm-1>*{flex:0 0 auto;width:100%} .row-cols-sm-2>*{flex:0 0 auto;width:50%} .row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-sm-4>*{flex:0 0 auto;width:25%} .row-cols-sm-5>*{flex:0 0 auto;width:20%} .row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%} .col-sm-auto{flex:0 0 auto;width:auto} .col-sm-1{flex:0 0 auto;width:8.3333333333%} .col-sm-2{flex:0 0 auto;width:16.6666666667%} .col-sm-3{flex:0 0 auto;width:25%} .col-sm-4{flex:0 0 auto;width:33.3333333333%} .col-sm-5{flex:0 0 auto;width:41.6666666667%} .col-sm-6{flex:0 0 auto;width:50%} .col-sm-7{flex:0 0 auto;width:58.3333333333%} .col-sm-8{flex:0 0 auto;width:66.6666666667%} .col-sm-9{flex:0 0 auto;width:75%} .col-sm-10{flex:0 0 auto;width:83.3333333333%} .col-sm-11{flex:0 0 auto;width:91.6666666667%} .col-sm-12{flex:0 0 auto;width:100%} .offset-sm-0{margin-left:0} .offset-sm-1{margin-left:8.3333333333%} .offset-sm-2{margin-left:16.6666666667%} .offset-sm-3{margin-left:25%} .offset-sm-4{margin-left:33.3333333333%} .offset-sm-5{margin-left:41.6666666667%} .offset-sm-6{margin-left:50%} .offset-sm-7{margin-left:58.3333333333%} .offset-sm-8{margin-left:66.6666666667%} .offset-sm-9{margin-left:75%} .offset-sm-10{margin-left:83.3333333333%} .offset-sm-11{margin-left:91.6666666667%} .g-sm-0,.gx-sm-0{--bs-gutter-x:0} .g-sm-0,.gy-sm-0{--bs-gutter-y:0} .g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem} .g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem} .g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem} .g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem} .g-sm-3,.gx-sm-3{--bs-gutter-x:1rem} .g-sm-3,.gy-sm-3{--bs-gutter-y:1rem} .g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem} .g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem} .g-sm-5,.gx-sm-5{--bs-gutter-x:3rem} .g-sm-5,.gy-sm-5{--bs-gutter-y:3rem} } @media (min-width:768px){ .col-md{flex:1 0 0%} .row-cols-md-auto>*{flex:0 0 auto;width:auto} .row-cols-md-1>*{flex:0 0 auto;width:100%} .row-cols-md-2>*{flex:0 0 auto;width:50%} .row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-md-4>*{flex:0 0 auto;width:25%} .row-cols-md-5>*{flex:0 0 auto;width:20%} .row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%} .col-md-auto{flex:0 0 auto;width:auto} .col-md-1{flex:0 0 auto;width:8.3333333333%} .col-md-2{flex:0 0 auto;width:16.6666666667%} .col-md-3{flex:0 0 auto;width:25%} .col-md-4{flex:0 0 auto;width:33.3333333333%} .col-md-5{flex:0 0 auto;width:41.6666666667%} .col-md-6{flex:0 0 auto;width:50%} .col-md-7{flex:0 0 auto;width:58.3333333333%} .col-md-8{flex:0 0 auto;width:66.6666666667%} .col-md-9{flex:0 0 auto;width:75%} .col-md-10{flex:0 0 auto;width:83.3333333333%} .col-md-11{flex:0 0 auto;width:91.6666666667%} .col-md-12{flex:0 0 auto;width:100%} .offset-md-0{margin-left:0} .offset-md-1{margin-left:8.3333333333%} .offset-md-2{margin-left:16.6666666667%} .offset-md-3{margin-left:25%} .offset-md-4{margin-left:33.3333333333%} .offset-md-5{margin-left:41.6666666667%} .offset-md-6{margin-left:50%} .offset-md-7{margin-left:58.3333333333%} .offset-md-8{margin-left:66.6666666667%} .offset-md-9{margin-left:75%} .offset-md-10{margin-left:83.3333333333%} .offset-md-11{margin-left:91.6666666667%} .g-md-0,.gx-md-0{--bs-gutter-x:0} .g-md-0,.gy-md-0{--bs-gutter-y:0} .g-md-1,.gx-md-1{--bs-gutter-x:0.25rem} .g-md-1,.gy-md-1{--bs-gutter-y:0.25rem} .g-md-2,.gx-md-2{--bs-gutter-x:0.5rem} .g-md-2,.gy-md-2{--bs-gutter-y:0.5rem} .g-md-3,.gx-md-3{--bs-gutter-x:1rem} .g-md-3,.gy-md-3{--bs-gutter-y:1rem} .g-md-4,.gx-md-4{--bs-gutter-x:1.5rem} .g-md-4,.gy-md-4{--bs-gutter-y:1.5rem} .g-md-5,.gx-md-5{--bs-gutter-x:3rem} .g-md-5,.gy-md-5{--bs-gutter-y:3rem} } @media (min-width:992px){ .col-lg{flex:1 0 0%} .row-cols-lg-auto>*{flex:0 0 auto;width:auto} .row-cols-lg-1>*{flex:0 0 auto;width:100%} .row-cols-lg-2>*{flex:0 0 auto;width:50%} .row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-lg-4>*{flex:0 0 auto;width:25%} .row-cols-lg-5>*{flex:0 0 auto;width:20%} .row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%} .col-lg-auto{flex:0 0 auto;width:auto} .col-lg-1{flex:0 0 auto;width:8.3333333333%} .col-lg-2{flex:0 0 auto;width:16.6666666667%} .col-lg-3{flex:0 0 auto;width:25%} .col-lg-4{flex:0 0 auto;width:33.3333333333%} .col-lg-5{flex:0 0 auto;width:41.6666666667%} .col-lg-6{flex:0 0 auto;width:50%} .col-lg-7{flex:0 0 auto;width:58.3333333333%} .col-lg-8{flex:0 0 auto;width:66.6666666667%} .col-lg-9{flex:0 0 auto;width:75%} .col-lg-10{flex:0 0 auto;width:83.3333333333%} .col-lg-11{flex:0 0 auto;width:91.6666666667%} .col-lg-12{flex:0 0 auto;width:100%} .offset-lg-0{margin-left:0} .offset-lg-1{margin-left:8.3333333333%} .offset-lg-2{margin-left:16.6666666667%} .offset-lg-3{margin-left:25%} .offset-lg-4{margin-left:33.3333333333%} .offset-lg-5{margin-left:41.6666666667%} .offset-lg-6{margin-left:50%} .offset-lg-7{margin-left:58.3333333333%} .offset-lg-8{margin-left:66.6666666667%} .offset-lg-9{margin-left:75%} .offset-lg-10{margin-left:83.3333333333%} .offset-lg-11{margin-left:91.6666666667%} .g-lg-0,.gx-lg-0{--bs-gutter-x:0} .g-lg-0,.gy-lg-0{--bs-gutter-y:0} .g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem} .g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem} .g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem} .g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem} .g-lg-3,.gx-lg-3{--bs-gutter-x:1rem} .g-lg-3,.gy-lg-3{--bs-gutter-y:1rem} .g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem} .g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem} .g-lg-5,.gx-lg-5{--bs-gutter-x:3rem} .g-lg-5,.gy-lg-5{--bs-gutter-y:3rem} } @media (min-width:1200px){ .col-xl{flex:1 0 0%} .row-cols-xl-auto>*{flex:0 0 auto;width:auto} .row-cols-xl-1>*{flex:0 0 auto;width:100%} .row-cols-xl-2>*{flex:0 0 auto;width:50%} .row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-xl-4>*{flex:0 0 auto;width:25%} .row-cols-xl-5>*{flex:0 0 auto;width:20%} .row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%} .col-xl-auto{flex:0 0 auto;width:auto} .col-xl-1{flex:0 0 auto;width:8.3333333333%} .col-xl-2{flex:0 0 auto;width:16.6666666667%} .col-xl-3{flex:0 0 auto;width:25%} .col-xl-4{flex:0 0 auto;width:33.3333333333%} .col-xl-5{flex:0 0 auto;width:41.6666666667%} .col-xl-6{flex:0 0 auto;width:50%} .col-xl-7{flex:0 0 auto;width:58.3333333333%} .col-xl-8{flex:0 0 auto;width:66.6666666667%} .col-xl-9{flex:0 0 auto;width:75%} .col-xl-10{flex:0 0 auto;width:83.3333333333%} .col-xl-11{flex:0 0 auto;width:91.6666666667%} .col-xl-12{flex:0 0 auto;width:100%} .offset-xl-0{margin-left:0} .offset-xl-1{margin-left:8.3333333333%} .offset-xl-2{margin-left:16.6666666667%} .offset-xl-3{margin-left:25%} .offset-xl-4{margin-left:33.3333333333%} .offset-xl-5{margin-left:41.6666666667%} .offset-xl-6{margin-left:50%} .offset-xl-7{margin-left:58.3333333333%} .offset-xl-8{margin-left:66.6666666667%} .offset-xl-9{margin-left:75%} .offset-xl-10{margin-left:83.3333333333%} .offset-xl-11{margin-left:91.6666666667%} .g-xl-0,.gx-xl-0{--bs-gutter-x:0} .g-xl-0,.gy-xl-0{--bs-gutter-y:0} .g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem} .g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem} .g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem} .g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem} .g-xl-3,.gx-xl-3{--bs-gutter-x:1rem} .g-xl-3,.gy-xl-3{--bs-gutter-y:1rem} .g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem} .g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem} .g-xl-5,.gx-xl-5{--bs-gutter-x:3rem} .g-xl-5,.gy-xl-5{--bs-gutter-y:3rem} } @media (min-width:1400px){ .col-xxl{flex:1 0 0%} .row-cols-xxl-auto>*{flex:0 0 auto;width:auto} .row-cols-xxl-1>*{flex:0 0 auto;width:100%} .row-cols-xxl-2>*{flex:0 0 auto;width:50%} .row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-xxl-4>*{flex:0 0 auto;width:25%} .row-cols-xxl-5>*{flex:0 0 auto;width:20%} .row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%} .col-xxl-auto{flex:0 0 auto;width:auto} .col-xxl-1{flex:0 0 auto;width:8.3333333333%} .col-xxl-2{flex:0 0 auto;width:16.6666666667%} .col-xxl-3{flex:0 0 auto;width:25%} .col-xxl-4{flex:0 0 auto;width:33.3333333333%} .col-xxl-5{flex:0 0 auto;width:41.6666666667%} .col-xxl-6{flex:0 0 auto;width:50%} .col-xxl-7{flex:0 0 auto;width:58.3333333333%} .col-xxl-8{flex:0 0 auto;width:66.6666666667%} .col-xxl-9{flex:0 0 auto;width:75%} .col-xxl-10{flex:0 0 auto;width:83.3333333333%} .col-xxl-11{flex:0 0 auto;width:91.6666666667%} .col-xxl-12{flex:0 0 auto;width:100%} .offset-xxl-0{margin-left:0} .offset-xxl-1{margin-left:8.3333333333%} .offset-xxl-2{margin-left:16.6666666667%} .offset-xxl-3{margin-left:25%} .offset-xxl-4{margin-left:33.3333333333%} .offset-xxl-5{margin-left:41.6666666667%} .offset-xxl-6{margin-left:50%} .offset-xxl-7{margin-left:58.3333333333%} .offset-xxl-8{margin-left:66.6666666667%} .offset-xxl-9{margin-left:75%} .offset-xxl-10{margin-left:83.3333333333%} .offset-xxl-11{margin-left:91.6666666667%} .g-xxl-0,.gx-xxl-0{--bs-gutter-x:0} .g-xxl-0,.gy-xxl-0{--bs-gutter-y:0} .g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem} .g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem} .g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem} .g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem} .g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem} .g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem} .g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem} .g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem} .g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem} .g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem} } .table{--bs-table-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6} .table>:not(caption)>*>*{padding:.5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)} .table>tbody{vertical-align:inherit} .table>thead{vertical-align:bottom} .table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor} .caption-top{caption-side:top} .table-sm>:not(caption)>*>*{padding:.25rem} .table-bordered>:not(caption)>*{border-width:1px 0} .table-bordered>:not(caption)>*>*{border-width:0 1px} .table-borderless>:not(caption)>*>*{border-bottom-width:0} .table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)} .table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)} .table-danger,.table-info,.table-light,.table-primary,.table-secondary,.table-success,.table-warning{--bs-table-striped-color:#000;--bs-table-active-color:#000;--bs-table-hover-color:#000;color:#000} .table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)} .table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-active-bg:#bacbe6;--bs-table-hover-bg:#bfd1ec;border-color:#bacbe6} .table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-active-bg:#cbccce;--bs-table-hover-bg:#d1d2d4;border-color:#cbccce} .table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-active-bg:#bcd0c7;--bs-table-hover-bg:#c1d6cc;border-color:#bcd0c7} .table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-active-bg:#badce3;--bs-table-hover-bg:#bfe2e9;border-color:#badce3} .table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-active-bg:#e6dbb9;--bs-table-hover-bg:#ece1be;border-color:#e6dbb9} .table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-active-bg:#dfc2c4;--bs-table-hover-bg:#e5c7ca;border-color:#dfc2c4} .table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-active-bg:#dfe0e1;--bs-table-hover-bg:#e5e6e7;border-color:#dfe0e1} .table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e} .table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch} @media (max-width:575.98px){ .table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:767.98px){ .table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:991.98px){ .table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:1199.98px){ .table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:1399.98px){ .table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch} } .collapsing,.form-control[type=file]{overflow:hidden} .form-label{margin-bottom:.5rem} .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5} .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem} .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem} .form-text{margin-top:.25rem;font-size:.875em;color:#6c757d} .form-control,.form-control:focus{color:#212529;background-color:#fff} .form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out} .form-control:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)} .form-control::-webkit-date-and-time-value{height:1.5em} .form-control::-webkit-input-placeholder{color:#6c757d;opacity:1} .form-control::-moz-placeholder{color:#6c757d;opacity:1} .form-control::placeholder{color:#6c757d;opacity:1} .form-control-plaintext,.form-select{width:100%;color:#212529;display:block;line-height:1.5} .form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1} .btn-close,.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5} .form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border:0 solid;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;border-color:inherit} @media (prefers-reduced-motion:reduce){ .form-control{transition:none} .form-control::file-selector-button{transition:none} } .form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3} .form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border:0 solid;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;border-color:inherit} .form-check-input:focus,.form-select:focus{border-color:#86b7fe;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0} @media (prefers-reduced-motion:reduce){ .form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none} } .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3} .form-control-plaintext{padding:.375rem 0;margin-bottom:0;background-color:transparent;border:solid transparent;border-width:1px 0} .form-check-input,.form-select{background-color:#fff;-moz-appearance:none;background-repeat:no-repeat} .form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0} .form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem} .form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem} .form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem} .form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem} .form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem} .form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem} textarea.form-control{min-height:calc(1.5em + .75rem + 2px)} textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)} textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)} .form-control-color{max-width:3rem;height:auto;padding:.375rem} .form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem} .form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem} .form-select{padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;appearance:none} .form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none} .form-select:disabled{color:#6c757d;background-color:#e9ecef} .form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529} .form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem} .form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem} .form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem} .form-check .form-check-input{float:left;margin-left:-1.5em} .form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact} .form-check-input[type=checkbox]{border-radius:.25em} .form-check-input[type=radio]{border-radius:50%} .form-check-input:active{filter:brightness(90%)} .form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd} .form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")} .form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")} .form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")} .form-check-input:disabled{pointer-events:none;filter:none;opacity:.5} .form-switch{padding-left:2.5em} .form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .form-switch .form-check-input{transition:none} } .form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")} .form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")} .form-check-inline{display:inline-block;margin-right:1rem} .btn-check{clip:rect(0,0,0,0)} .form-floating,.input-group,.input-group .btn{position:relative} .btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65} .form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none} .form-range:focus{outline:0} .form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)} .form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)} .form-range::-moz-focus-outer{border:0} .form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none} @media (prefers-reduced-motion:reduce){ .form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none} } .form-range::-webkit-slider-thumb:active{background-color:#b6d4fe} .form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem} .form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none} @media (prefers-reduced-motion:reduce){ .form-range::-moz-range-thumb{-moz-transition:none;transition:none} } .form-range::-moz-range-thumb:active{background-color:#b6d4fe} .form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem} .form-range:disabled{pointer-events:none} .form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd} .form-range:disabled::-moz-range-thumb{background-color:#adb5bd} .form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem} .form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem} .form-floating>label{top:0;left:0;height:100%;padding:1rem .75rem;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out} .form-floating>.form-control::-webkit-input-placeholder{color:transparent} .form-floating>.form-control::-moz-placeholder{color:transparent} .form-floating>.form-control::placeholder{color:transparent} .form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem} .form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem} .form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)} .form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)} .form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)} .input-group{display:flex;flex-wrap:wrap;align-items:stretch;width:100%} .input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0} .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem} .invalid-tooltip,.valid-tooltip{position:absolute;z-index:5;display:none;border-radius:.25rem;top:100%;max-width:100%} .input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem} .input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem} .input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem} .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0} .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0} .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754} .valid-tooltip{padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9)} .is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block} .form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)} .form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)} .was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)} .form-select.is-valid,.was-validated .form-select:valid{border-color:#198754;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)} .form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)} .form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754} .form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754} .form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)} .form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754} .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545} .invalid-tooltip{padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9)} .btn,.btn:hover{color:#212529} .is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block} .form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)} .form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)} .was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)} .form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)} .form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)} .form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545} .form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545} .form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)} .form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545} .dropdown-toggle:empty::after,.dropend .dropdown-toggle:empty::after,.dropstart .dropdown-toggle:empty::after,.dropup .dropdown-toggle:empty::after{margin-left:0} .btn{display:inline-block;line-height:1.5;text-align:center;text-decoration:none;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .btn,.form-floating>label{transition:none} } .btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)} .btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65} .btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca} .btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)} .btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be} .btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)} .btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-check:focus+.btn-secondary,.btn-secondary.active:focus,.btn-secondary:active:focus,.btn-secondary:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)} .btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-check:focus+.btn-secondary,.btn-secondary:focus,.btn-secondary:hover{background-color:#5c636a;border-color:#565e64;color:#fff} .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d} .btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e} .btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-check:focus+.btn-success,.btn-success.active:focus,.btn-success:active:focus,.btn-success:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)} .btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d} .btn-check:focus+.btn-success,.btn-success:focus,.btn-success:hover{background-color:#157347;border-color:#146c43;color:#fff} .btn-success{color:#fff;background-color:#198754;border-color:#198754} .btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f} .btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-check:focus+.btn-info,.btn-info.active:focus,.btn-info:active:focus,.btn-info:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)} .btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754} .btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0} .btn-check:focus+.btn-info,.btn-info:focus,.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2} .btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2} .btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0} .btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107} .btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720} .btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)} .btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720} .btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)} .btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-check:focus+.btn-danger,.btn-danger.active:focus,.btn-danger:active:focus,.btn-danger:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)} .btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107} .btn-check:focus+.btn-danger,.btn-danger:focus,.btn-danger:hover{background-color:#bb2d3b;border-color:#b02a37;color:#fff} .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545} .btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834} .btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-check:focus+.btn-light,.btn-light.active:focus,.btn-light:active:focus,.btn-light:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)} .btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545} .btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-check:focus+.btn-light,.btn-light.active,.btn-light:active,.btn-light:focus,.btn-light:hover,.show>.btn-light.dropdown-toggle{background-color:#f9fafb;border-color:#f9fafb;color:#000} .btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa} .btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-check:focus+.btn-dark,.btn-dark.active:focus,.btn-dark:active:focus,.btn-dark:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)} .btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa} .btn-check:focus+.btn-dark,.btn-dark:focus,.btn-dark:hover{background-color:#1c1f23;border-color:#1a1e21;color:#fff} .btn-dark{color:#fff;background-color:#212529;border-color:#212529} .btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f} .btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-check:focus+.btn-outline-primary,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)} .btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529} .btn-outline-primary{color:#0d6efd;border-color:#0d6efd} .btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)} .btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent} .btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active,.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d} .btn-outline-secondary{color:#6c757d;border-color:#6c757d} .btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-check:focus+.btn-outline-success,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)} .btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent} .btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active,.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754} .btn-outline-success{color:#198754;border-color:#198754} .btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-check:focus+.btn-outline-info,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)} .btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent} .btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active,.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0} .btn-outline-info{color:#0dcaf0;border-color:#0dcaf0} .btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-check:focus+.btn-outline-warning,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)} .btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent} .btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active,.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107} .btn-outline-warning{color:#ffc107;border-color:#ffc107} .btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-check:focus+.btn-outline-danger,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)} .btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent} .btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active,.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545} .btn-outline-danger{color:#dc3545;border-color:#dc3545} .btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-check:focus+.btn-outline-light,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)} .btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent} .btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active,.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa} .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa} .btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-check:focus+.btn-outline-dark,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)} .btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent} .btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active,.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529} .btn-outline-dark{color:#212529;border-color:#212529} .dropdown-toggle::after,.dropup .dropdown-toggle::after{vertical-align:.255em;content:"";border-right:.3em solid transparent;border-left:.3em solid transparent} .btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent} .btn-link{color:#0d6efd;text-decoration:underline} .card-link:hover,.dropdown-item,.nav-link,.navbar-brand,.navbar-toggler:focus,.navbar-toggler:hover,.page-link{text-decoration:none} .btn-link:hover{color:#0a58ca} .btn-link.disabled,.btn-link:disabled{color:#6c757d} .btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem} .btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem} .fade{transition:opacity .15s linear} @media (prefers-reduced-motion:reduce){ .fade{transition:none} } .fade:not(.show){opacity:0} .collapse:not(.show){display:none} .collapsing{height:0;transition:height .35s} @media (prefers-reduced-motion:reduce){ .collapsing{transition:none} } .dropdown,.dropend,.dropstart,.dropup{position:relative} .dropdown-menu,.navbar-expand .navbar-nav .dropdown-menu{position:absolute} .dropdown-toggle::after{display:inline-block;margin-left:.255em;border-top:.3em solid;border-bottom:0} .dropdown-menu{top:100%;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem} .dropdown-menu[data-bs-popper]{left:0;margin-top:.125rem} .dropdown-menu-start{--bs-position:start} .dropdown-menu-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-end{--bs-position:end} .dropdown-menu-end[data-bs-popper]{right:0;left:auto} @media (min-width:576px){ .dropdown-menu-sm-start{--bs-position:start} .dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-sm-end{--bs-position:end} .dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto} } @media (min-width:768px){ .dropdown-menu-md-start{--bs-position:start} .dropdown-menu-md-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-md-end{--bs-position:end} .dropdown-menu-md-end[data-bs-popper]{right:0;left:auto} } @media (min-width:992px){ .dropdown-menu-lg-start{--bs-position:start} .dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-lg-end{--bs-position:end} .dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto} } @media (min-width:1200px){ .dropdown-menu-xl-start{--bs-position:start} .dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-xl-end{--bs-position:end} .dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto} } @media (min-width:1400px){ .dropdown-menu-xxl-start{--bs-position:start} .dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-xxl-end{--bs-position:end} .dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto} } .dropup .dropdown-menu{top:auto;bottom:100%} .dropup .dropdown-menu[data-bs-popper]{margin-top:0;margin-bottom:.125rem} .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;border-top:0;border-bottom:.3em solid} .dropend .dropdown-toggle::after,.dropstart .dropdown-toggle::before{border-top:.3em solid transparent;border-bottom:.3em solid transparent;content:""} .dropend .dropdown-menu{top:0;right:auto;left:100%} .dropend .dropdown-menu[data-bs-popper]{margin-top:0;margin-left:.125rem} .dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;border-right:0;border-left:.3em solid;vertical-align:0} .dropstart .dropdown-menu{top:0;right:100%;left:auto} .dropstart .dropdown-menu[data-bs-popper]{margin-top:0;margin-right:.125rem} .dropstart .dropdown-toggle::after{margin-left:.255em;vertical-align:.255em;content:"";display:none} .dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;border-right:.3em solid;vertical-align:0} .card>hr,.dropstart .dropdown-toggle-split::before{margin-right:0} .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)} .dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;color:#212529;text-align:inherit;background-color:transparent;border:0} .alert-link,.badge{font-weight:700} .dropdown-menu-dark,.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)} .dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef} .dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd} .dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent} .dropdown-menu.show{display:block} .dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d} .dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529} .dropdown-menu-dark .dropdown-item,.dropdown-menu-dark .dropdown-item-text{color:#dee2e6} .dropdown-menu-dark{color:#dee2e6;background-color:#343a40} .dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)} .dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd} .dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd} .dropdown-menu-dark .dropdown-header{color:#adb5bd} .btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle} .btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto} .btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1} .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start} .btn-toolbar .input-group{width:auto} .btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px} .card>hr,.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0} .btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0} .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem} .btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem} .btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem} .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center} .btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%} .btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px} .btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0} .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0} .nav-link{display:block;padding:.5rem 1rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .nav-link{transition:none} } .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default} .nav-tabs{border-bottom:1px solid #dee2e6} .nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem} .nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate} .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent} .nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff} .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} .nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem} .nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd} .nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center} .nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center} .tab-content>.tab-pane{display:none} .tab-content>.active{display:block} .navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem} .navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between} .navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem} .card-header-pills,.card-header-tabs{margin-right:-.5rem;margin-left:-.5rem} .navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0} .navbar-nav .nav-link{padding-right:0;padding-left:0} .navbar-nav .dropdown-menu{position:static} .navbar-text{padding-top:.5rem;padding-bottom:.5rem} .navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center} .navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .navbar-toggler{transition:none} } .navbar-toggler:focus{outline:0;box-shadow:0 0 0 .25rem} .accordion-button:focus,.btn-close:focus,.page-link:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0} .navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%} .navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto} @media (min-width:576px){ .navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-sm .navbar-nav{flex-direction:row} .navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-sm .navbar-nav-scroll{overflow:visible} .navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-sm .navbar-toggler{display:none} } @media (min-width:768px){ .navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-md .navbar-nav{flex-direction:row} .navbar-expand-md .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-md .navbar-nav-scroll{overflow:visible} .navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-md .navbar-toggler{display:none} } @media (min-width:992px){ .navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-lg .navbar-nav{flex-direction:row} .navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-lg .navbar-nav-scroll{overflow:visible} .navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-lg .navbar-toggler{display:none} } @media (min-width:1200px){ .navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-xl .navbar-nav{flex-direction:row} .navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-xl .navbar-nav-scroll{overflow:visible} .navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-xl .navbar-toggler{display:none} } @media (min-width:1400px){ .navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-xxl .navbar-nav{flex-direction:row} .navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-xxl .navbar-nav-scroll{overflow:visible} .navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-xxl .navbar-toggler{display:none} } .navbar-expand{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand .navbar-nav{flex-direction:row} .navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand .navbar-nav-scroll{overflow:visible} .navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto} .badge:empty,.navbar-expand .navbar-toggler,.toast.hide{display:none} .card,.progress-bar{flex-direction:column} .navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)} .navbar-light .navbar-nav .nav-link,.navbar-light .navbar-text{color:rgba(0,0,0,.55)} .navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)} .navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)} .navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)} .navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)} .navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")} .navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff} .navbar-dark .navbar-nav .nav-link,.navbar-dark .navbar-text{color:rgba(255,255,255,.55)} .navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)} .navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)} .navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff} .navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)} .navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")} .card{position:relative;display:flex;min-width:0;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem} .card-img,.card-img-top,.card>.list-group:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} .card-img,.card-img-bottom,.card>.list-group:last-child{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)} .card>.list-group{border-top:inherit;border-bottom:inherit} .card>.list-group:first-child{border-top-width:0} .card>.list-group:last-child{border-bottom-width:0} .card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0} .card-body{flex:1 1 auto;padding:1rem} .card-footer,.card-header{padding:.5rem 1rem;background-color:rgba(0,0,0,.03)} .card-title{margin-bottom:.5rem} .card-header,.card-subtitle,.card-text:last-child{margin-bottom:0} .card-subtitle{margin-top:-.25rem} .card-link+.card-link{margin-left:1rem} .card-header{border-bottom:1px solid rgba(0,0,0,.125)} .card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0} .card-footer{border-top:1px solid rgba(0,0,0,.125)} .card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)} .card-header-tabs{margin-bottom:-.5rem;border-bottom:0} .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)} .accordion-button,.alert,.btn .badge,.list-group-item,.page-link{position:relative} .accordion-body,.accordion-button{padding:1rem 1.25rem} .card-img,.card-img-bottom,.card-img-top{width:100%} .card-group>.card{margin-bottom:.75rem} @media (min-width:576px){ .card-group{display:flex;flex-flow:row wrap} .card-group>.card{flex:1 0 0%;margin-bottom:0} .card-group>.card+.card{margin-left:0;border-left:0} .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0} .card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0} .card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0} .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} .card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0} .card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0} } .accordion-button{display:flex;align-items:center;width:100%;font-size:1rem;color:#212529;text-align:left;background-color:transparent;border:1px solid rgba(0,0,0,.125);border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s} .badge,.progress-bar{text-align:center;white-space:nowrap} .modal-open,.progress,.progress-bar{overflow:hidden} .accordion-button.collapsed{border-bottom-width:0} .accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff} .accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)} .accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out} @media (prefers-reduced-motion:reduce){ .accordion-button,.accordion-button::after{transition:none} } .accordion-button:focus{z-index:3;border-color:#86b7fe} .accordion-header{margin-bottom:0} .alert,.breadcrumb{margin-bottom:1rem} .accordion-item:first-of-type .accordion-button{border-top-left-radius:.25rem;border-top-right-radius:.25rem} .accordion-item:last-of-type .accordion-button.collapsed,.accordion-item:last-of-type .accordion-collapse{border-bottom-width:1px;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem} .accordion-collapse{border:solid rgba(0,0,0,.125);border-width:0 1px} .accordion-flush .accordion-button{border-right:0;border-left:0;border-radius:0} .accordion-flush .accordion-collapse{border-width:0} .accordion-flush .accordion-item:first-of-type .accordion-button{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0} .accordion-flush .accordion-item:last-of-type .accordion-button.collapsed{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0} .breadcrumb{display:flex;flex-wrap:wrap;padding:0} .breadcrumb-item+.breadcrumb-item{padding-left:.5rem} .breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")} .breadcrumb-item.active{color:#6c757d} .page-link:focus,.page-link:hover{color:#0a58ca;background-color:#e9ecef} .pagination{display:flex;padding-left:0} .page-link{display:block;color:#0d6efd;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;padding:.375rem .75rem} @media (prefers-reduced-motion:reduce){ .page-link{transition:none} } .page-link:hover{z-index:2;border-color:#dee2e6} .page-link:focus{z-index:3} .page-item:not(:first-child) .page-link{margin-left:-1px} .page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd} .page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6} .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem} .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem} .pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem} .pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem} .pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem} .pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem} .pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem} .pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem} .badge{display:inline-block;padding:.35em .65em;font-size:.75em;line-height:1;color:#fff;vertical-align:baseline;border-radius:.25rem} .btn .badge{top:-1px} .alert{padding:1rem;border:1px solid transparent;border-radius:.25rem} .list-group,.progress{display:flex;border-radius:.25rem} .alert-heading{color:inherit} .alert-dismissible{padding-right:3rem} .alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem} .alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe} .alert-primary .alert-link{color:#06357a} .alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8} .alert-secondary .alert-link{color:#34383c} .alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc} .alert-success .alert-link{color:#0c4128} .alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb} .alert-info .alert-link{color:#04414d} .alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5} .alert-warning .alert-link{color:#523e02} .alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7} .alert-danger .alert-link{color:#6a1a21} .alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe} .alert-light .alert-link{color:#4f5050} .alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf} .alert-dark .alert-link{color:#101214} @-webkit-keyframes progress-bar-stripes{ 0%{background-position-x:1rem} } @keyframes progress-bar-stripes{ 0%{background-position-x:1rem} } .progress{height:1rem;font-size:.75rem;background-color:#e9ecef} .progress-bar{display:flex;justify-content:center;color:#fff;background-color:#0d6efd;transition:width .6s} .popover,.tooltip{font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;text-decoration:none} .progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem} .progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes} .list-group{flex-direction:column;padding-left:0;margin-bottom:0} .list-group-item-action{width:100%;color:#495057;text-align:inherit} .list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa} .list-group-item-action:active{color:#212529;background-color:#e9ecef} .list-group-item{display:block;padding:.5rem 1rem;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)} .list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit} .list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit} .list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff} .list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd} .list-group-item+.list-group-item{border-top-width:0} .list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px} .list-group-horizontal{flex-direction:row} .list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal>.list-group-item.active{margin-top:0} .list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} @media (min-width:576px){ .list-group-horizontal-sm{flex-direction:row} .list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-sm>.list-group-item.active{margin-top:0} .list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:768px){ .list-group-horizontal-md{flex-direction:row} .list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-md>.list-group-item.active{margin-top:0} .list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:992px){ .list-group-horizontal-lg{flex-direction:row} .list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-lg>.list-group-item.active{margin-top:0} .list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:1200px){ .list-group-horizontal-xl{flex-direction:row} .list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-xl>.list-group-item.active{margin-top:0} .list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:1400px){ .list-group-horizontal-xxl{flex-direction:row} .list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-xxl>.list-group-item.active{margin-top:0} .list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } .list-group-flush{border-radius:0} .list-group-flush>.list-group-item{border-width:0 0 1px} .list-group-flush>.list-group-item:last-child{border-bottom-width:0} .list-group-item-primary{color:#084298;background-color:#cfe2ff} .list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6} .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298} .list-group-item-secondary{color:#41464b;background-color:#e2e3e5} .list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce} .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b} .list-group-item-success{color:#0f5132;background-color:#d1e7dd} .list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7} .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132} .list-group-item-info{color:#055160;background-color:#cff4fc} .list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3} .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160} .list-group-item-warning{color:#664d03;background-color:#fff3cd} .list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9} .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03} .list-group-item-danger{color:#842029;background-color:#f8d7da} .list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4} .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029} .list-group-item-light{color:#636464;background-color:#fefefe} .list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5} .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464} .list-group-item-dark{color:#141619;background-color:#d3d3d4} .list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf} .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619} .btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em;color:#000;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem} .toast,.toast-header{background-color:rgba(255,255,255,.85)} .modal-content,.toast,.toast-header{background-clip:padding-box} .btn-close:hover{color:#000;text-decoration:none;opacity:.75} .btn-close:focus{opacity:1} .btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25} .modal-backdrop.fade,.toast:not(.showing):not(.show),.tooltip{opacity:0} .btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)} .toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem} .toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none} .toast-container>:not(:last-child){margin-bottom:.75rem} .toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} .toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem} .toast-body{padding:.75rem;word-wrap:break-word} .modal-open .modal{overflow-x:hidden;overflow-y:auto} .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0} .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none} .modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)} @media (prefers-reduced-motion:reduce){ .progress-bar{transition:none} .progress-bar-animated{-webkit-animation:none;animation:none} .modal.fade .modal-dialog{transition:none} } .modal.show .modal-dialog{transform:none} .modal.modal-static .modal-dialog{transform:scale(1.02)} .modal-dialog-scrollable{height:calc(100% - 1rem)} .modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden} .modal-dialog-scrollable .modal-body,.modal-fullscreen .modal-body{overflow-y:auto} .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)} .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0} .carousel-dark .carousel-indicators [data-bs-target],.modal-backdrop,.tooltip-inner{background-color:#000} .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh} .modal-backdrop.show{opacity:.5} .modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)} .modal-header .btn-close{padding:.5rem;margin:-.5rem -.5rem -.5rem auto} .modal-title{margin-bottom:0;line-height:1.5} .modal-body{position:relative;flex:1 1 auto;padding:1rem} .modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)} .modal-footer>*{margin:.25rem} .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll} @media (min-width:576px){ .modal-dialog{max-width:500px;margin:1.75rem auto} .modal-dialog-scrollable{height:calc(100% - 3.5rem)} .modal-dialog-centered{min-height:calc(100% - 3.5rem)} .modal-sm{max-width:300px} } @media (min-width:992px){ .modal-lg,.modal-xl{max-width:800px} } @media (min-width:1200px){ .modal-xl{max-width:1140px} } .modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0} @media (max-width:575.98px){ .modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0} .modal-fullscreen-sm-down .modal-body{overflow-y:auto} } @media (max-width:767.98px){ .modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0} .modal-fullscreen-md-down .modal-body{overflow-y:auto} } @media (max-width:991.98px){ .modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0} .modal-fullscreen-lg-down .modal-body{overflow-y:auto} } @media (max-width:1199.98px){ .modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0} .modal-fullscreen-xl-down .modal-body{overflow-y:auto} } @media (max-width:1399.98px){ .modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0} .modal-fullscreen-xxl-down .modal-body{overflow-y:auto} } .tooltip{position:absolute;z-index:1070;display:block;margin:0;text-align:left;text-align:start} .tooltip.show{opacity:.9} .tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem} .tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid} .bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0} .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0} .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000} .bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem} .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem} .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000} .bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0} .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0} .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000} .bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem} .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem} .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000} .tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;border-radius:.25rem} .carousel-indicators [data-bs-target],.popover{background-color:#fff;background-clip:padding-box} .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;text-align:left;text-align:start;border:1px solid rgba(0,0,0,.2);border-radius:.3rem} .carousel,.carousel-inner,.carousel-item{position:relative} .popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem} .popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid} .bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)} .bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff} .bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem} .bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff} .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)} .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff} .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0} .bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem} .bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff} .popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)} .popover-header:empty{display:none} .popover-body{padding:1rem;color:#212529} .carousel.pointer-event{touch-action:pan-y} .carousel-inner{width:100%;overflow:hidden} .carousel-inner::after{display:block;clear:both;content:""} .carousel-item{display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out} .carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block} .active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)} .active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)} .carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none} .carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1} .carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s} @media (prefers-reduced-motion:reduce){ .carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start,.carousel-item{transition:none} } .carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s} .carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9} .carousel-control-prev{left:0} .carousel-control-next{right:0} .carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%} .carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")} .carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")} .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%} .spinner-border,.spinner-grow{display:inline-block;vertical-align:text-bottom} .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s} .carousel-indicators .active{opacity:1} .carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center} .carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)} .carousel-dark .carousel-caption{color:#000} @-webkit-keyframes spinner-border{ to{transform:rotate(360deg)} } @keyframes spinner-border{ to{transform:rotate(360deg)} } .spinner-border{width:2rem;height:2rem;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border} .spinner-border-sm{width:1rem;height:1rem;border-width:.2em} @-webkit-keyframes spinner-grow{ 0%{transform:scale(0)} 50%{opacity:1;transform:none} } @keyframes spinner-grow{ 0%{transform:scale(0)} 50%{opacity:1;transform:none} } .spinner-grow{width:2rem;height:2rem;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow} .spinner-grow-sm{width:1rem;height:1rem} @media (prefers-reduced-motion:reduce){ .carousel-control-next,.carousel-control-prev,.carousel-indicators [data-bs-target]{transition:none} .spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s} } .clearfix::after{display:block;clear:both;content:""} .link-primary{color:#0d6efd} .link-primary:focus,.link-primary:hover{color:#0a58ca} .link-secondary{color:#6c757d} .link-secondary:focus,.link-secondary:hover{color:#565e64} .link-success{color:#198754} .link-success:focus,.link-success:hover{color:#146c43} .link-info{color:#0dcaf0} .link-info:focus,.link-info:hover{color:#3dd5f3} .link-warning{color:#ffc107} .link-warning:focus,.link-warning:hover{color:#ffcd39} .link-danger{color:#dc3545} .link-danger:focus,.link-danger:hover{color:#b02a37} .link-light{color:#f8f9fa} .link-light:focus,.link-light:hover{color:#f9fafb} .link-dark{color:#212529} .link-dark:focus,.link-dark:hover{color:#1a1e21} .ratio{position:relative;width:100%} .ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""} .ratio>*{position:absolute;top:0;left:0;width:100%;height:100%} .fixed-bottom,.fixed-top{position:fixed;z-index:1030;right:0;left:0} .ratio-1x1{--bs-aspect-ratio:100%} .ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)} .ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)} .ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)} .fixed-top{top:0} .fixed-bottom{bottom:0} .sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} @media (min-width:576px){ .sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:768px){ .sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:992px){ .sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:1200px){ .sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:1400px){ .sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } .visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important} .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""} .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .align-baseline{vertical-align:baseline!important} .align-top{vertical-align:top!important} .align-middle{vertical-align:middle!important} .align-bottom{vertical-align:bottom!important} .align-text-bottom{vertical-align:text-bottom!important} .align-text-top{vertical-align:text-top!important} .float-start{float:left!important} .float-end{float:right!important} .float-none{float:none!important} .overflow-auto{overflow:auto!important} .overflow-hidden{overflow:hidden!important} .overflow-visible{overflow:visible!important} .overflow-scroll{overflow:scroll!important} .d-inline{display:inline!important} .d-inline-block{display:inline-block!important} .d-block{display:block!important} .d-grid{display:grid!important} .d-table{display:table!important} .d-table-row{display:table-row!important} .d-table-cell{display:table-cell!important} .d-flex{display:flex!important} .d-inline-flex{display:inline-flex!important} .d-none{display:none!important} .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important} .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important} .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important} .shadow-none{box-shadow:none!important} .position-static{position:static!important} .position-relative{position:relative!important} .position-absolute{position:absolute!important} .position-fixed{position:fixed!important} .position-sticky{position:-webkit-sticky!important;position:sticky!important} .top-0{top:0!important} .top-50{top:50%!important} .top-100{top:100%!important} .bottom-0{bottom:0!important} .bottom-50{bottom:50%!important} .bottom-100{bottom:100%!important} .start-0{left:0!important} .start-50{left:50%!important} .start-100{left:100%!important} .end-0{right:0!important} .end-50{right:50%!important} .end-100{right:100%!important} .translate-middle{transform:translate(-50%,-50%)!important} .translate-middle-x{transform:translateX(-50%)!important} .translate-middle-y{transform:translateY(-50%)!important} .border{border:1px solid #dee2e6!important} .border-0{border:0!important} .border-top{border-top:1px solid #dee2e6!important} .border-top-0{border-top:0!important} .border-end{border-right:1px solid #dee2e6!important} .border-end-0{border-right:0!important} .border-bottom{border-bottom:1px solid #dee2e6!important} .border-bottom-0{border-bottom:0!important} .border-start{border-left:1px solid #dee2e6!important} .border-start-0{border-left:0!important} .border-primary{border-color:#0d6efd!important} .border-secondary{border-color:#6c757d!important} .border-success{border-color:#198754!important} .border-info{border-color:#0dcaf0!important} .border-warning{border-color:#ffc107!important} .border-danger{border-color:#dc3545!important} .border-light{border-color:#f8f9fa!important} .border-dark{border-color:#212529!important} .border-white{border-color:#fff!important} .border-0{border-width:0!important} .border-1{border-width:1px!important} .border-2{border-width:2px!important} .border-3{border-width:3px!important} .border-4{border-width:4px!important} .border-5{border-width:5px!important} .w-25{width:25%!important} .w-50{width:50%!important} .w-75{width:75%!important} .w-100{width:100%!important} .w-auto{width:auto!important} .mw-100{max-width:100%!important} .vw-100{width:100vw!important} .min-vw-100{min-width:100vw!important} .h-25{height:25%!important} .h-50{height:50%!important} .h-75{height:75%!important} .h-100{height:100%!important} .h-auto{height:auto!important} .mh-100{max-height:100%!important} .vh-100{height:100vh!important} .min-vh-100{min-height:100vh!important} .flex-fill{flex:1 1 auto!important} .flex-row{flex-direction:row!important} .flex-column{flex-direction:column!important} .flex-row-reverse{flex-direction:row-reverse!important} .flex-column-reverse{flex-direction:column-reverse!important} .flex-grow-0{flex-grow:0!important} .flex-grow-1{flex-grow:1!important} .flex-shrink-0{flex-shrink:0!important} .flex-shrink-1{flex-shrink:1!important} .flex-wrap{flex-wrap:wrap!important} .flex-nowrap{flex-wrap:nowrap!important} .flex-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-0{gap:0!important} .gap-1{gap:.25rem!important} .gap-2{gap:.5rem!important} .gap-3{gap:1rem!important} .gap-4{gap:1.5rem!important} .gap-5{gap:3rem!important} .justify-content-start{justify-content:flex-start!important} .justify-content-end{justify-content:flex-end!important} .justify-content-center{justify-content:center!important} .justify-content-between{justify-content:space-between!important} .justify-content-around{justify-content:space-around!important} .justify-content-evenly{justify-content:space-evenly!important} .align-items-start{align-items:flex-start!important} .align-items-end{align-items:flex-end!important} .align-items-center{align-items:center!important} .align-items-baseline{align-items:baseline!important} .align-items-stretch{align-items:stretch!important} .align-content-start{align-content:flex-start!important} .align-content-end{align-content:flex-end!important} .align-content-center{align-content:center!important} .align-content-between{align-content:space-between!important} .align-content-around{align-content:space-around!important} .align-content-stretch{align-content:stretch!important} .align-self-auto{align-self:auto!important} .align-self-start{align-self:flex-start!important} .align-self-end{align-self:flex-end!important} .align-self-center{align-self:center!important} .align-self-baseline{align-self:baseline!important} .align-self-stretch{align-self:stretch!important} .order-first{order:-1!important} .order-0{order:0!important} .order-1{order:1!important} .order-2{order:2!important} .order-3{order:3!important} .order-4{order:4!important} .order-5{order:5!important} .order-last{order:6!important} .m-0{margin:0!important} .m-1{margin:.25rem!important} .m-2{margin:.5rem!important} .m-3{margin:1rem!important} .m-4{margin:1.5rem!important} .m-5{margin:3rem!important} .m-auto{margin:auto!important} .mx-0{margin-right:0!important;margin-left:0!important} .mx-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-3{margin-right:1rem!important;margin-left:1rem!important} .mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-5{margin-right:3rem!important;margin-left:3rem!important} .mx-auto{margin-right:auto!important;margin-left:auto!important} .my-0{margin-top:0!important;margin-bottom:0!important} .my-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-0{margin-top:0!important} .mt-1{margin-top:.25rem!important} .mt-2{margin-top:.5rem!important} .mt-3{margin-top:1rem!important} .mt-4{margin-top:1.5rem!important} .mt-5{margin-top:3rem!important} .mt-auto{margin-top:auto!important} .me-0{margin-right:0!important} .me-1{margin-right:.25rem!important} .me-2{margin-right:.5rem!important} .me-3{margin-right:1rem!important} .me-4{margin-right:1.5rem!important} .me-5{margin-right:3rem!important} .me-auto{margin-right:auto!important} .mb-0{margin-bottom:0!important} .mb-1{margin-bottom:.25rem!important} .mb-2{margin-bottom:.5rem!important} .mb-3{margin-bottom:1rem!important} .mb-4{margin-bottom:1.5rem!important} .mb-5{margin-bottom:3rem!important} .mb-auto{margin-bottom:auto!important} .ms-0{margin-left:0!important} .ms-1{margin-left:.25rem!important} .ms-2{margin-left:.5rem!important} .ms-3{margin-left:1rem!important} .ms-4{margin-left:1.5rem!important} .ms-5{margin-left:3rem!important} .ms-auto{margin-left:auto!important} .p-0{padding:0!important} .p-1{padding:.25rem!important} .p-2{padding:.5rem!important} .p-3{padding:1rem!important} .p-4{padding:1.5rem!important} .p-5{padding:3rem!important} .px-0{padding-right:0!important;padding-left:0!important} .px-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-3{padding-right:1rem!important;padding-left:1rem!important} .px-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-5{padding-right:3rem!important;padding-left:3rem!important} .py-0{padding-top:0!important;padding-bottom:0!important} .py-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-0{padding-top:0!important} .pt-1{padding-top:.25rem!important} .pt-2{padding-top:.5rem!important} .pt-3{padding-top:1rem!important} .pt-4{padding-top:1.5rem!important} .pt-5{padding-top:3rem!important} .pe-0{padding-right:0!important} .pe-1{padding-right:.25rem!important} .pe-2{padding-right:.5rem!important} .pe-3{padding-right:1rem!important} .pe-4{padding-right:1.5rem!important} .pe-5{padding-right:3rem!important} .pb-0{padding-bottom:0!important} .pb-1{padding-bottom:.25rem!important} .pb-2{padding-bottom:.5rem!important} .pb-3{padding-bottom:1rem!important} .pb-4{padding-bottom:1.5rem!important} .pb-5{padding-bottom:3rem!important} .ps-0{padding-left:0!important} .ps-1{padding-left:.25rem!important} .ps-2{padding-left:.5rem!important} .ps-3{padding-left:1rem!important} .ps-4{padding-left:1.5rem!important} .ps-5{padding-left:3rem!important} .fs-1{font-size:calc(1.375rem + 1.5vw)!important} .fs-2{font-size:calc(1.325rem + .9vw)!important} .fs-3{font-size:calc(1.3rem + .6vw)!important} .fs-4{font-size:calc(1.275rem + .3vw)!important} .fs-5{font-size:1.25rem!important} .fs-6{font-size:1rem!important} .fst-italic{font-style:italic!important} .fst-normal{font-style:normal!important} .fw-light{font-weight:300!important} .fw-lighter{font-weight:lighter!important} .fw-normal{font-weight:400!important} .fw-bold{font-weight:700!important} .fw-bolder{font-weight:bolder!important} .text-lowercase{text-transform:lowercase!important} .text-uppercase{text-transform:uppercase!important} .text-capitalize{text-transform:capitalize!important} .text-start{text-align:left!important} .text-end{text-align:right!important} .text-center{text-align:center!important} .text-primary{color:#0d6efd!important} .text-secondary{color:#6c757d!important} .text-success{color:#198754!important} .text-info{color:#0dcaf0!important} .text-warning{color:#ffc107!important} .text-danger{color:#dc3545!important} .text-light{color:#f8f9fa!important} .text-dark{color:#212529!important} .text-white{color:#fff!important} .text-body{color:#212529!important} .text-muted{color:#6c757d!important} .text-black-50{color:rgba(0,0,0,.5)!important} .text-white-50{color:rgba(255,255,255,.5)!important} .text-reset{color:inherit!important} .lh-1{line-height:1!important} .lh-sm{line-height:1.25!important} .lh-base{line-height:1.5!important} .lh-lg{line-height:2!important} .bg-primary{background-color:#0d6efd!important} .bg-secondary{background-color:#6c757d!important} .bg-success{background-color:#198754!important} .bg-info{background-color:#0dcaf0!important} .bg-warning{background-color:#ffc107!important} .bg-danger{background-color:#dc3545!important} .bg-light{background-color:#f8f9fa!important} .bg-dark{background-color:#212529!important} .bg-body,.bg-white{background-color:#fff!important} .bg-transparent{background-color:transparent!important} .bg-gradient{background-image:var(--bs-gradient)!important} .text-wrap{white-space:normal!important} .text-nowrap{white-space:nowrap!important} .text-decoration-none{text-decoration:none!important} .text-decoration-underline{text-decoration:underline!important} .text-decoration-line-through{text-decoration:line-through!important} .text-break{word-wrap:break-word!important;word-break:break-word!important} .font-monospace{font-family:var(--bs-font-monospace)!important} .user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important} .user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important} .user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important} .pe-none{pointer-events:none!important} .pe-auto{pointer-events:auto!important} .rounded{border-radius:.25rem!important} .rounded-0{border-radius:0!important} .rounded-1{border-radius:.2rem!important} .rounded-2{border-radius:.25rem!important} .rounded-3{border-radius:.3rem!important} .rounded-circle{border-radius:50%!important} .rounded-pill{border-radius:50rem!important} .rounded-end,.rounded-top{border-top-right-radius:.25rem!important} .rounded-bottom,.rounded-end{border-bottom-right-radius:.25rem!important} .rounded-bottom,.rounded-start{border-bottom-left-radius:.25rem!important} .rounded-start,.rounded-top{border-top-left-radius:.25rem!important} .visible{visibility:visible!important} .invisible{visibility:hidden!important} @media (min-width:576px){ .float-sm-start{float:left!important} .float-sm-end{float:right!important} .float-sm-none{float:none!important} .d-sm-inline{display:inline!important} .d-sm-inline-block{display:inline-block!important} .d-sm-block{display:block!important} .d-sm-grid{display:grid!important} .d-sm-table{display:table!important} .d-sm-table-row{display:table-row!important} .d-sm-table-cell{display:table-cell!important} .d-sm-flex{display:flex!important} .d-sm-inline-flex{display:inline-flex!important} .d-sm-none{display:none!important} .flex-sm-fill{flex:1 1 auto!important} .flex-sm-row{flex-direction:row!important} .flex-sm-column{flex-direction:column!important} .flex-sm-row-reverse{flex-direction:row-reverse!important} .flex-sm-column-reverse{flex-direction:column-reverse!important} .flex-sm-grow-0{flex-grow:0!important} .flex-sm-grow-1{flex-grow:1!important} .flex-sm-shrink-0{flex-shrink:0!important} .flex-sm-shrink-1{flex-shrink:1!important} .flex-sm-wrap{flex-wrap:wrap!important} .flex-sm-nowrap{flex-wrap:nowrap!important} .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-sm-0{gap:0!important} .gap-sm-1{gap:.25rem!important} .gap-sm-2{gap:.5rem!important} .gap-sm-3{gap:1rem!important} .gap-sm-4{gap:1.5rem!important} .gap-sm-5{gap:3rem!important} .justify-content-sm-start{justify-content:flex-start!important} .justify-content-sm-end{justify-content:flex-end!important} .justify-content-sm-center{justify-content:center!important} .justify-content-sm-between{justify-content:space-between!important} .justify-content-sm-around{justify-content:space-around!important} .justify-content-sm-evenly{justify-content:space-evenly!important} .align-items-sm-start{align-items:flex-start!important} .align-items-sm-end{align-items:flex-end!important} .align-items-sm-center{align-items:center!important} .align-items-sm-baseline{align-items:baseline!important} .align-items-sm-stretch{align-items:stretch!important} .align-content-sm-start{align-content:flex-start!important} .align-content-sm-end{align-content:flex-end!important} .align-content-sm-center{align-content:center!important} .align-content-sm-between{align-content:space-between!important} .align-content-sm-around{align-content:space-around!important} .align-content-sm-stretch{align-content:stretch!important} .align-self-sm-auto{align-self:auto!important} .align-self-sm-start{align-self:flex-start!important} .align-self-sm-end{align-self:flex-end!important} .align-self-sm-center{align-self:center!important} .align-self-sm-baseline{align-self:baseline!important} .align-self-sm-stretch{align-self:stretch!important} .order-sm-first{order:-1!important} .order-sm-0{order:0!important} .order-sm-1{order:1!important} .order-sm-2{order:2!important} .order-sm-3{order:3!important} .order-sm-4{order:4!important} .order-sm-5{order:5!important} .order-sm-last{order:6!important} .m-sm-0{margin:0!important} .m-sm-1{margin:.25rem!important} .m-sm-2{margin:.5rem!important} .m-sm-3{margin:1rem!important} .m-sm-4{margin:1.5rem!important} .m-sm-5{margin:3rem!important} .m-sm-auto{margin:auto!important} .mx-sm-0{margin-right:0!important;margin-left:0!important} .mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-sm-3{margin-right:1rem!important;margin-left:1rem!important} .mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-sm-5{margin-right:3rem!important;margin-left:3rem!important} .mx-sm-auto{margin-right:auto!important;margin-left:auto!important} .my-sm-0{margin-top:0!important;margin-bottom:0!important} .my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-sm-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-sm-0{margin-top:0!important} .mt-sm-1{margin-top:.25rem!important} .mt-sm-2{margin-top:.5rem!important} .mt-sm-3{margin-top:1rem!important} .mt-sm-4{margin-top:1.5rem!important} .mt-sm-5{margin-top:3rem!important} .mt-sm-auto{margin-top:auto!important} .me-sm-0{margin-right:0!important} .me-sm-1{margin-right:.25rem!important} .me-sm-2{margin-right:.5rem!important} .me-sm-3{margin-right:1rem!important} .me-sm-4{margin-right:1.5rem!important} .me-sm-5{margin-right:3rem!important} .me-sm-auto{margin-right:auto!important} .mb-sm-0{margin-bottom:0!important} .mb-sm-1{margin-bottom:.25rem!important} .mb-sm-2{margin-bottom:.5rem!important} .mb-sm-3{margin-bottom:1rem!important} .mb-sm-4{margin-bottom:1.5rem!important} .mb-sm-5{margin-bottom:3rem!important} .mb-sm-auto{margin-bottom:auto!important} .ms-sm-0{margin-left:0!important} .ms-sm-1{margin-left:.25rem!important} .ms-sm-2{margin-left:.5rem!important} .ms-sm-3{margin-left:1rem!important} .ms-sm-4{margin-left:1.5rem!important} .ms-sm-5{margin-left:3rem!important} .ms-sm-auto{margin-left:auto!important} .p-sm-0{padding:0!important} .p-sm-1{padding:.25rem!important} .p-sm-2{padding:.5rem!important} .p-sm-3{padding:1rem!important} .p-sm-4{padding:1.5rem!important} .p-sm-5{padding:3rem!important} .px-sm-0{padding-right:0!important;padding-left:0!important} .px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-sm-3{padding-right:1rem!important;padding-left:1rem!important} .px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-sm-5{padding-right:3rem!important;padding-left:3rem!important} .py-sm-0{padding-top:0!important;padding-bottom:0!important} .py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-sm-0{padding-top:0!important} .pt-sm-1{padding-top:.25rem!important} .pt-sm-2{padding-top:.5rem!important} .pt-sm-3{padding-top:1rem!important} .pt-sm-4{padding-top:1.5rem!important} .pt-sm-5{padding-top:3rem!important} .pe-sm-0{padding-right:0!important} .pe-sm-1{padding-right:.25rem!important} .pe-sm-2{padding-right:.5rem!important} .pe-sm-3{padding-right:1rem!important} .pe-sm-4{padding-right:1.5rem!important} .pe-sm-5{padding-right:3rem!important} .pb-sm-0{padding-bottom:0!important} .pb-sm-1{padding-bottom:.25rem!important} .pb-sm-2{padding-bottom:.5rem!important} .pb-sm-3{padding-bottom:1rem!important} .pb-sm-4{padding-bottom:1.5rem!important} .pb-sm-5{padding-bottom:3rem!important} .ps-sm-0{padding-left:0!important} .ps-sm-1{padding-left:.25rem!important} .ps-sm-2{padding-left:.5rem!important} .ps-sm-3{padding-left:1rem!important} .ps-sm-4{padding-left:1.5rem!important} .ps-sm-5{padding-left:3rem!important} .text-sm-start{text-align:left!important} .text-sm-end{text-align:right!important} .text-sm-center{text-align:center!important} } @media (min-width:768px){ .float-md-start{float:left!important} .float-md-end{float:right!important} .float-md-none{float:none!important} .d-md-inline{display:inline!important} .d-md-inline-block{display:inline-block!important} .d-md-block{display:block!important} .d-md-grid{display:grid!important} .d-md-table{display:table!important} .d-md-table-row{display:table-row!important} .d-md-table-cell{display:table-cell!important} .d-md-flex{display:flex!important} .d-md-inline-flex{display:inline-flex!important} .d-md-none{display:none!important} .flex-md-fill{flex:1 1 auto!important} .flex-md-row{flex-direction:row!important} .flex-md-column{flex-direction:column!important} .flex-md-row-reverse{flex-direction:row-reverse!important} .flex-md-column-reverse{flex-direction:column-reverse!important} .flex-md-grow-0{flex-grow:0!important} .flex-md-grow-1{flex-grow:1!important} .flex-md-shrink-0{flex-shrink:0!important} .flex-md-shrink-1{flex-shrink:1!important} .flex-md-wrap{flex-wrap:wrap!important} .flex-md-nowrap{flex-wrap:nowrap!important} .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-md-0{gap:0!important} .gap-md-1{gap:.25rem!important} .gap-md-2{gap:.5rem!important} .gap-md-3{gap:1rem!important} .gap-md-4{gap:1.5rem!important} .gap-md-5{gap:3rem!important} .justify-content-md-start{justify-content:flex-start!important} .justify-content-md-end{justify-content:flex-end!important} .justify-content-md-center{justify-content:center!important} .justify-content-md-between{justify-content:space-between!important} .justify-content-md-around{justify-content:space-around!important} .justify-content-md-evenly{justify-content:space-evenly!important} .align-items-md-start{align-items:flex-start!important} .align-items-md-end{align-items:flex-end!important} .align-items-md-center{align-items:center!important} .align-items-md-baseline{align-items:baseline!important} .align-items-md-stretch{align-items:stretch!important} .align-content-md-start{align-content:flex-start!important} .align-content-md-end{align-content:flex-end!important} .align-content-md-center{align-content:center!important} .align-content-md-between{align-content:space-between!important} .align-content-md-around{align-content:space-around!important} .align-content-md-stretch{align-content:stretch!important} .align-self-md-auto{align-self:auto!important} .align-self-md-start{align-self:flex-start!important} .align-self-md-end{align-self:flex-end!important} .align-self-md-center{align-self:center!important} .align-self-md-baseline{align-self:baseline!important} .align-self-md-stretch{align-self:stretch!important} .order-md-first{order:-1!important} .order-md-0{order:0!important} .order-md-1{order:1!important} .order-md-2{order:2!important} .order-md-3{order:3!important} .order-md-4{order:4!important} .order-md-5{order:5!important} .order-md-last{order:6!important} .m-md-0{margin:0!important} .m-md-1{margin:.25rem!important} .m-md-2{margin:.5rem!important} .m-md-3{margin:1rem!important} .m-md-4{margin:1.5rem!important} .m-md-5{margin:3rem!important} .m-md-auto{margin:auto!important} .mx-md-0{margin-right:0!important;margin-left:0!important} .mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-md-3{margin-right:1rem!important;margin-left:1rem!important} .mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-md-5{margin-right:3rem!important;margin-left:3rem!important} .mx-md-auto{margin-right:auto!important;margin-left:auto!important} .my-md-0{margin-top:0!important;margin-bottom:0!important} .my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-md-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-md-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-md-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-md-0{margin-top:0!important} .mt-md-1{margin-top:.25rem!important} .mt-md-2{margin-top:.5rem!important} .mt-md-3{margin-top:1rem!important} .mt-md-4{margin-top:1.5rem!important} .mt-md-5{margin-top:3rem!important} .mt-md-auto{margin-top:auto!important} .me-md-0{margin-right:0!important} .me-md-1{margin-right:.25rem!important} .me-md-2{margin-right:.5rem!important} .me-md-3{margin-right:1rem!important} .me-md-4{margin-right:1.5rem!important} .me-md-5{margin-right:3rem!important} .me-md-auto{margin-right:auto!important} .mb-md-0{margin-bottom:0!important} .mb-md-1{margin-bottom:.25rem!important} .mb-md-2{margin-bottom:.5rem!important} .mb-md-3{margin-bottom:1rem!important} .mb-md-4{margin-bottom:1.5rem!important} .mb-md-5{margin-bottom:3rem!important} .mb-md-auto{margin-bottom:auto!important} .ms-md-0{margin-left:0!important} .ms-md-1{margin-left:.25rem!important} .ms-md-2{margin-left:.5rem!important} .ms-md-3{margin-left:1rem!important} .ms-md-4{margin-left:1.5rem!important} .ms-md-5{margin-left:3rem!important} .ms-md-auto{margin-left:auto!important} .p-md-0{padding:0!important} .p-md-1{padding:.25rem!important} .p-md-2{padding:.5rem!important} .p-md-3{padding:1rem!important} .p-md-4{padding:1.5rem!important} .p-md-5{padding:3rem!important} .px-md-0{padding-right:0!important;padding-left:0!important} .px-md-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-md-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-md-3{padding-right:1rem!important;padding-left:1rem!important} .px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-md-5{padding-right:3rem!important;padding-left:3rem!important} .py-md-0{padding-top:0!important;padding-bottom:0!important} .py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-md-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-md-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-md-0{padding-top:0!important} .pt-md-1{padding-top:.25rem!important} .pt-md-2{padding-top:.5rem!important} .pt-md-3{padding-top:1rem!important} .pt-md-4{padding-top:1.5rem!important} .pt-md-5{padding-top:3rem!important} .pe-md-0{padding-right:0!important} .pe-md-1{padding-right:.25rem!important} .pe-md-2{padding-right:.5rem!important} .pe-md-3{padding-right:1rem!important} .pe-md-4{padding-right:1.5rem!important} .pe-md-5{padding-right:3rem!important} .pb-md-0{padding-bottom:0!important} .pb-md-1{padding-bottom:.25rem!important} .pb-md-2{padding-bottom:.5rem!important} .pb-md-3{padding-bottom:1rem!important} .pb-md-4{padding-bottom:1.5rem!important} .pb-md-5{padding-bottom:3rem!important} .ps-md-0{padding-left:0!important} .ps-md-1{padding-left:.25rem!important} .ps-md-2{padding-left:.5rem!important} .ps-md-3{padding-left:1rem!important} .ps-md-4{padding-left:1.5rem!important} .ps-md-5{padding-left:3rem!important} .text-md-start{text-align:left!important} .text-md-end{text-align:right!important} .text-md-center{text-align:center!important} } @media (min-width:992px){ .float-lg-start{float:left!important} .float-lg-end{float:right!important} .float-lg-none{float:none!important} .d-lg-inline{display:inline!important} .d-lg-inline-block{display:inline-block!important} .d-lg-block{display:block!important} .d-lg-grid{display:grid!important} .d-lg-table{display:table!important} .d-lg-table-row{display:table-row!important} .d-lg-table-cell{display:table-cell!important} .d-lg-flex{display:flex!important} .d-lg-inline-flex{display:inline-flex!important} .d-lg-none{display:none!important} .flex-lg-fill{flex:1 1 auto!important} .flex-lg-row{flex-direction:row!important} .flex-lg-column{flex-direction:column!important} .flex-lg-row-reverse{flex-direction:row-reverse!important} .flex-lg-column-reverse{flex-direction:column-reverse!important} .flex-lg-grow-0{flex-grow:0!important} .flex-lg-grow-1{flex-grow:1!important} .flex-lg-shrink-0{flex-shrink:0!important} .flex-lg-shrink-1{flex-shrink:1!important} .flex-lg-wrap{flex-wrap:wrap!important} .flex-lg-nowrap{flex-wrap:nowrap!important} .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-lg-0{gap:0!important} .gap-lg-1{gap:.25rem!important} .gap-lg-2{gap:.5rem!important} .gap-lg-3{gap:1rem!important} .gap-lg-4{gap:1.5rem!important} .gap-lg-5{gap:3rem!important} .justify-content-lg-start{justify-content:flex-start!important} .justify-content-lg-end{justify-content:flex-end!important} .justify-content-lg-center{justify-content:center!important} .justify-content-lg-between{justify-content:space-between!important} .justify-content-lg-around{justify-content:space-around!important} .justify-content-lg-evenly{justify-content:space-evenly!important} .align-items-lg-start{align-items:flex-start!important} .align-items-lg-end{align-items:flex-end!important} .align-items-lg-center{align-items:center!important} .align-items-lg-baseline{align-items:baseline!important} .align-items-lg-stretch{align-items:stretch!important} .align-content-lg-start{align-content:flex-start!important} .align-content-lg-end{align-content:flex-end!important} .align-content-lg-center{align-content:center!important} .align-content-lg-between{align-content:space-between!important} .align-content-lg-around{align-content:space-around!important} .align-content-lg-stretch{align-content:stretch!important} .align-self-lg-auto{align-self:auto!important} .align-self-lg-start{align-self:flex-start!important} .align-self-lg-end{align-self:flex-end!important} .align-self-lg-center{align-self:center!important} .align-self-lg-baseline{align-self:baseline!important} .align-self-lg-stretch{align-self:stretch!important} .order-lg-first{order:-1!important} .order-lg-0{order:0!important} .order-lg-1{order:1!important} .order-lg-2{order:2!important} .order-lg-3{order:3!important} .order-lg-4{order:4!important} .order-lg-5{order:5!important} .order-lg-last{order:6!important} .m-lg-0{margin:0!important} .m-lg-1{margin:.25rem!important} .m-lg-2{margin:.5rem!important} .m-lg-3{margin:1rem!important} .m-lg-4{margin:1.5rem!important} .m-lg-5{margin:3rem!important} .m-lg-auto{margin:auto!important} .mx-lg-0{margin-right:0!important;margin-left:0!important} .mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-lg-3{margin-right:1rem!important;margin-left:1rem!important} .mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-lg-5{margin-right:3rem!important;margin-left:3rem!important} .mx-lg-auto{margin-right:auto!important;margin-left:auto!important} .my-lg-0{margin-top:0!important;margin-bottom:0!important} .my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-lg-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-lg-0{margin-top:0!important} .mt-lg-1{margin-top:.25rem!important} .mt-lg-2{margin-top:.5rem!important} .mt-lg-3{margin-top:1rem!important} .mt-lg-4{margin-top:1.5rem!important} .mt-lg-5{margin-top:3rem!important} .mt-lg-auto{margin-top:auto!important} .me-lg-0{margin-right:0!important} .me-lg-1{margin-right:.25rem!important} .me-lg-2{margin-right:.5rem!important} .me-lg-3{margin-right:1rem!important} .me-lg-4{margin-right:1.5rem!important} .me-lg-5{margin-right:3rem!important} .me-lg-auto{margin-right:auto!important} .mb-lg-0{margin-bottom:0!important} .mb-lg-1{margin-bottom:.25rem!important} .mb-lg-2{margin-bottom:.5rem!important} .mb-lg-3{margin-bottom:1rem!important} .mb-lg-4{margin-bottom:1.5rem!important} .mb-lg-5{margin-bottom:3rem!important} .mb-lg-auto{margin-bottom:auto!important} .ms-lg-0{margin-left:0!important} .ms-lg-1{margin-left:.25rem!important} .ms-lg-2{margin-left:.5rem!important} .ms-lg-3{margin-left:1rem!important} .ms-lg-4{margin-left:1.5rem!important} .ms-lg-5{margin-left:3rem!important} .ms-lg-auto{margin-left:auto!important} .p-lg-0{padding:0!important} .p-lg-1{padding:.25rem!important} .p-lg-2{padding:.5rem!important} .p-lg-3{padding:1rem!important} .p-lg-4{padding:1.5rem!important} .p-lg-5{padding:3rem!important} .px-lg-0{padding-right:0!important;padding-left:0!important} .px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-lg-3{padding-right:1rem!important;padding-left:1rem!important} .px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-lg-5{padding-right:3rem!important;padding-left:3rem!important} .py-lg-0{padding-top:0!important;padding-bottom:0!important} .py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-lg-0{padding-top:0!important} .pt-lg-1{padding-top:.25rem!important} .pt-lg-2{padding-top:.5rem!important} .pt-lg-3{padding-top:1rem!important} .pt-lg-4{padding-top:1.5rem!important} .pt-lg-5{padding-top:3rem!important} .pe-lg-0{padding-right:0!important} .pe-lg-1{padding-right:.25rem!important} .pe-lg-2{padding-right:.5rem!important} .pe-lg-3{padding-right:1rem!important} .pe-lg-4{padding-right:1.5rem!important} .pe-lg-5{padding-right:3rem!important} .pb-lg-0{padding-bottom:0!important} .pb-lg-1{padding-bottom:.25rem!important} .pb-lg-2{padding-bottom:.5rem!important} .pb-lg-3{padding-bottom:1rem!important} .pb-lg-4{padding-bottom:1.5rem!important} .pb-lg-5{padding-bottom:3rem!important} .ps-lg-0{padding-left:0!important} .ps-lg-1{padding-left:.25rem!important} .ps-lg-2{padding-left:.5rem!important} .ps-lg-3{padding-left:1rem!important} .ps-lg-4{padding-left:1.5rem!important} .ps-lg-5{padding-left:3rem!important} .text-lg-start{text-align:left!important} .text-lg-end{text-align:right!important} .text-lg-center{text-align:center!important} } @media (min-width:1200px){ .float-xl-start{float:left!important} .float-xl-end{float:right!important} .float-xl-none{float:none!important} .d-xl-inline{display:inline!important} .d-xl-inline-block{display:inline-block!important} .d-xl-block{display:block!important} .d-xl-grid{display:grid!important} .d-xl-table{display:table!important} .d-xl-table-row{display:table-row!important} .d-xl-table-cell{display:table-cell!important} .d-xl-flex{display:flex!important} .d-xl-inline-flex{display:inline-flex!important} .d-xl-none{display:none!important} .flex-xl-fill{flex:1 1 auto!important} .flex-xl-row{flex-direction:row!important} .flex-xl-column{flex-direction:column!important} .flex-xl-row-reverse{flex-direction:row-reverse!important} .flex-xl-column-reverse{flex-direction:column-reverse!important} .flex-xl-grow-0{flex-grow:0!important} .flex-xl-grow-1{flex-grow:1!important} .flex-xl-shrink-0{flex-shrink:0!important} .flex-xl-shrink-1{flex-shrink:1!important} .flex-xl-wrap{flex-wrap:wrap!important} .flex-xl-nowrap{flex-wrap:nowrap!important} .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-xl-0{gap:0!important} .gap-xl-1{gap:.25rem!important} .gap-xl-2{gap:.5rem!important} .gap-xl-3{gap:1rem!important} .gap-xl-4{gap:1.5rem!important} .gap-xl-5{gap:3rem!important} .justify-content-xl-start{justify-content:flex-start!important} .justify-content-xl-end{justify-content:flex-end!important} .justify-content-xl-center{justify-content:center!important} .justify-content-xl-between{justify-content:space-between!important} .justify-content-xl-around{justify-content:space-around!important} .justify-content-xl-evenly{justify-content:space-evenly!important} .align-items-xl-start{align-items:flex-start!important} .align-items-xl-end{align-items:flex-end!important} .align-items-xl-center{align-items:center!important} .align-items-xl-baseline{align-items:baseline!important} .align-items-xl-stretch{align-items:stretch!important} .align-content-xl-start{align-content:flex-start!important} .align-content-xl-end{align-content:flex-end!important} .align-content-xl-center{align-content:center!important} .align-content-xl-between{align-content:space-between!important} .align-content-xl-around{align-content:space-around!important} .align-content-xl-stretch{align-content:stretch!important} .align-self-xl-auto{align-self:auto!important} .align-self-xl-start{align-self:flex-start!important} .align-self-xl-end{align-self:flex-end!important} .align-self-xl-center{align-self:center!important} .align-self-xl-baseline{align-self:baseline!important} .align-self-xl-stretch{align-self:stretch!important} .order-xl-first{order:-1!important} .order-xl-0{order:0!important} .order-xl-1{order:1!important} .order-xl-2{order:2!important} .order-xl-3{order:3!important} .order-xl-4{order:4!important} .order-xl-5{order:5!important} .order-xl-last{order:6!important} .m-xl-0{margin:0!important} .m-xl-1{margin:.25rem!important} .m-xl-2{margin:.5rem!important} .m-xl-3{margin:1rem!important} .m-xl-4{margin:1.5rem!important} .m-xl-5{margin:3rem!important} .m-xl-auto{margin:auto!important} .mx-xl-0{margin-right:0!important;margin-left:0!important} .mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-xl-3{margin-right:1rem!important;margin-left:1rem!important} .mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-xl-5{margin-right:3rem!important;margin-left:3rem!important} .mx-xl-auto{margin-right:auto!important;margin-left:auto!important} .my-xl-0{margin-top:0!important;margin-bottom:0!important} .my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-xl-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-xl-0{margin-top:0!important} .mt-xl-1{margin-top:.25rem!important} .mt-xl-2{margin-top:.5rem!important} .mt-xl-3{margin-top:1rem!important} .mt-xl-4{margin-top:1.5rem!important} .mt-xl-5{margin-top:3rem!important} .mt-xl-auto{margin-top:auto!important} .me-xl-0{margin-right:0!important} .me-xl-1{margin-right:.25rem!important} .me-xl-2{margin-right:.5rem!important} .me-xl-3{margin-right:1rem!important} .me-xl-4{margin-right:1.5rem!important} .me-xl-5{margin-right:3rem!important} .me-xl-auto{margin-right:auto!important} .mb-xl-0{margin-bottom:0!important} .mb-xl-1{margin-bottom:.25rem!important} .mb-xl-2{margin-bottom:.5rem!important} .mb-xl-3{margin-bottom:1rem!important} .mb-xl-4{margin-bottom:1.5rem!important} .mb-xl-5{margin-bottom:3rem!important} .mb-xl-auto{margin-bottom:auto!important} .ms-xl-0{margin-left:0!important} .ms-xl-1{margin-left:.25rem!important} .ms-xl-2{margin-left:.5rem!important} .ms-xl-3{margin-left:1rem!important} .ms-xl-4{margin-left:1.5rem!important} .ms-xl-5{margin-left:3rem!important} .ms-xl-auto{margin-left:auto!important} .p-xl-0{padding:0!important} .p-xl-1{padding:.25rem!important} .p-xl-2{padding:.5rem!important} .p-xl-3{padding:1rem!important} .p-xl-4{padding:1.5rem!important} .p-xl-5{padding:3rem!important} .px-xl-0{padding-right:0!important;padding-left:0!important} .px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-xl-3{padding-right:1rem!important;padding-left:1rem!important} .px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-xl-5{padding-right:3rem!important;padding-left:3rem!important} .py-xl-0{padding-top:0!important;padding-bottom:0!important} .py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-xl-0{padding-top:0!important} .pt-xl-1{padding-top:.25rem!important} .pt-xl-2{padding-top:.5rem!important} .pt-xl-3{padding-top:1rem!important} .pt-xl-4{padding-top:1.5rem!important} .pt-xl-5{padding-top:3rem!important} .pe-xl-0{padding-right:0!important} .pe-xl-1{padding-right:.25rem!important} .pe-xl-2{padding-right:.5rem!important} .pe-xl-3{padding-right:1rem!important} .pe-xl-4{padding-right:1.5rem!important} .pe-xl-5{padding-right:3rem!important} .pb-xl-0{padding-bottom:0!important} .pb-xl-1{padding-bottom:.25rem!important} .pb-xl-2{padding-bottom:.5rem!important} .pb-xl-3{padding-bottom:1rem!important} .pb-xl-4{padding-bottom:1.5rem!important} .pb-xl-5{padding-bottom:3rem!important} .ps-xl-0{padding-left:0!important} .ps-xl-1{padding-left:.25rem!important} .ps-xl-2{padding-left:.5rem!important} .ps-xl-3{padding-left:1rem!important} .ps-xl-4{padding-left:1.5rem!important} .ps-xl-5{padding-left:3rem!important} .text-xl-start{text-align:left!important} .text-xl-end{text-align:right!important} .text-xl-center{text-align:center!important} .fs-1{font-size:2.5rem!important} .fs-2{font-size:2rem!important} .fs-3{font-size:1.75rem!important} .fs-4{font-size:1.5rem!important} } @media (min-width:1400px){ .float-xxl-start{float:left!important} .float-xxl-end{float:right!important} .float-xxl-none{float:none!important} .d-xxl-inline{display:inline!important} .d-xxl-inline-block{display:inline-block!important} .d-xxl-block{display:block!important} .d-xxl-grid{display:grid!important} .d-xxl-table{display:table!important} .d-xxl-table-row{display:table-row!important} .d-xxl-table-cell{display:table-cell!important} .d-xxl-flex{display:flex!important} .d-xxl-inline-flex{display:inline-flex!important} .d-xxl-none{display:none!important} .flex-xxl-fill{flex:1 1 auto!important} .flex-xxl-row{flex-direction:row!important} .flex-xxl-column{flex-direction:column!important} .flex-xxl-row-reverse{flex-direction:row-reverse!important} .flex-xxl-column-reverse{flex-direction:column-reverse!important} .flex-xxl-grow-0{flex-grow:0!important} .flex-xxl-grow-1{flex-grow:1!important} .flex-xxl-shrink-0{flex-shrink:0!important} .flex-xxl-shrink-1{flex-shrink:1!important} .flex-xxl-wrap{flex-wrap:wrap!important} .flex-xxl-nowrap{flex-wrap:nowrap!important} .flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-xxl-0{gap:0!important} .gap-xxl-1{gap:.25rem!important} .gap-xxl-2{gap:.5rem!important} .gap-xxl-3{gap:1rem!important} .gap-xxl-4{gap:1.5rem!important} .gap-xxl-5{gap:3rem!important} .justify-content-xxl-start{justify-content:flex-start!important} .justify-content-xxl-end{justify-content:flex-end!important} .justify-content-xxl-center{justify-content:center!important} .justify-content-xxl-between{justify-content:space-between!important} .justify-content-xxl-around{justify-content:space-around!important} .justify-content-xxl-evenly{justify-content:space-evenly!important} .align-items-xxl-start{align-items:flex-start!important} .align-items-xxl-end{align-items:flex-end!important} .align-items-xxl-center{align-items:center!important} .align-items-xxl-baseline{align-items:baseline!important} .align-items-xxl-stretch{align-items:stretch!important} .align-content-xxl-start{align-content:flex-start!important} .align-content-xxl-end{align-content:flex-end!important} .align-content-xxl-center{align-content:center!important} .align-content-xxl-between{align-content:space-between!important} .align-content-xxl-around{align-content:space-around!important} .align-content-xxl-stretch{align-content:stretch!important} .align-self-xxl-auto{align-self:auto!important} .align-self-xxl-start{align-self:flex-start!important} .align-self-xxl-end{align-self:flex-end!important} .align-self-xxl-center{align-self:center!important} .align-self-xxl-baseline{align-self:baseline!important} .align-self-xxl-stretch{align-self:stretch!important} .order-xxl-first{order:-1!important} .order-xxl-0{order:0!important} .order-xxl-1{order:1!important} .order-xxl-2{order:2!important} .order-xxl-3{order:3!important} .order-xxl-4{order:4!important} .order-xxl-5{order:5!important} .order-xxl-last{order:6!important} .m-xxl-0{margin:0!important} .m-xxl-1{margin:.25rem!important} .m-xxl-2{margin:.5rem!important} .m-xxl-3{margin:1rem!important} .m-xxl-4{margin:1.5rem!important} .m-xxl-5{margin:3rem!important} .m-xxl-auto{margin:auto!important} .mx-xxl-0{margin-right:0!important;margin-left:0!important} .mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important} .mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important} .mx-xxl-auto{margin-right:auto!important;margin-left:auto!important} .my-xxl-0{margin-top:0!important;margin-bottom:0!important} .my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-xxl-0{margin-top:0!important} .mt-xxl-1{margin-top:.25rem!important} .mt-xxl-2{margin-top:.5rem!important} .mt-xxl-3{margin-top:1rem!important} .mt-xxl-4{margin-top:1.5rem!important} .mt-xxl-5{margin-top:3rem!important} .mt-xxl-auto{margin-top:auto!important} .me-xxl-0{margin-right:0!important} .me-xxl-1{margin-right:.25rem!important} .me-xxl-2{margin-right:.5rem!important} .me-xxl-3{margin-right:1rem!important} .me-xxl-4{margin-right:1.5rem!important} .me-xxl-5{margin-right:3rem!important} .me-xxl-auto{margin-right:auto!important} .mb-xxl-0{margin-bottom:0!important} .mb-xxl-1{margin-bottom:.25rem!important} .mb-xxl-2{margin-bottom:.5rem!important} .mb-xxl-3{margin-bottom:1rem!important} .mb-xxl-4{margin-bottom:1.5rem!important} .mb-xxl-5{margin-bottom:3rem!important} .mb-xxl-auto{margin-bottom:auto!important} .ms-xxl-0{margin-left:0!important} .ms-xxl-1{margin-left:.25rem!important} .ms-xxl-2{margin-left:.5rem!important} .ms-xxl-3{margin-left:1rem!important} .ms-xxl-4{margin-left:1.5rem!important} .ms-xxl-5{margin-left:3rem!important} .ms-xxl-auto{margin-left:auto!important} .p-xxl-0{padding:0!important} .p-xxl-1{padding:.25rem!important} .p-xxl-2{padding:.5rem!important} .p-xxl-3{padding:1rem!important} .p-xxl-4{padding:1.5rem!important} .p-xxl-5{padding:3rem!important} .px-xxl-0{padding-right:0!important;padding-left:0!important} .px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-xxl-3{padding-right:1rem!important;padding-left:1rem!important} .px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-xxl-5{padding-right:3rem!important;padding-left:3rem!important} .py-xxl-0{padding-top:0!important;padding-bottom:0!important} .py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-xxl-0{padding-top:0!important} .pt-xxl-1{padding-top:.25rem!important} .pt-xxl-2{padding-top:.5rem!important} .pt-xxl-3{padding-top:1rem!important} .pt-xxl-4{padding-top:1.5rem!important} .pt-xxl-5{padding-top:3rem!important} .pe-xxl-0{padding-right:0!important} .pe-xxl-1{padding-right:.25rem!important} .pe-xxl-2{padding-right:.5rem!important} .pe-xxl-3{padding-right:1rem!important} .pe-xxl-4{padding-right:1.5rem!important} .pe-xxl-5{padding-right:3rem!important} .pb-xxl-0{padding-bottom:0!important} .pb-xxl-1{padding-bottom:.25rem!important} .pb-xxl-2{padding-bottom:.5rem!important} .pb-xxl-3{padding-bottom:1rem!important} .pb-xxl-4{padding-bottom:1.5rem!important} .pb-xxl-5{padding-bottom:3rem!important} .ps-xxl-0{padding-left:0!important} .ps-xxl-1{padding-left:.25rem!important} .ps-xxl-2{padding-left:.5rem!important} .ps-xxl-3{padding-left:1rem!important} .ps-xxl-4{padding-left:1.5rem!important} .ps-xxl-5{padding-left:3rem!important} .text-xxl-start{text-align:left!important} .text-xxl-end{text-align:right!important} .text-xxl-center{text-align:center!important} } @media print{ .d-print-inline{display:inline!important} .d-print-inline-block{display:inline-block!important} .d-print-block{display:block!important} .d-print-grid{display:grid!important} .d-print-table{display:table!important} .d-print-table-row{display:table-row!important} .d-print-table-cell{display:table-cell!important} .d-print-flex{display:flex!important} .d-print-inline-flex{display:inline-flex!important} .d-print-none{display:none!important} } clean-css-5.3.3/test/fixtures/bootstrap-v5.css 0000664 0000000 0000000 00000571440 14532047255 0021323 0 ustar 00root root 0000000 0000000 @charset "UTF-8"; /*! * Bootstrap v5.0.0-beta2 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ :root { --bs-blue: #0d6efd; --bs-indigo: #6610f2; --bs-purple: #6f42c1; --bs-pink: #d63384; --bs-red: #dc3545; --bs-orange: #fd7e14; --bs-yellow: #ffc107; --bs-green: #198754; --bs-teal: #20c997; --bs-cyan: #0dcaf0; --bs-white: #fff; --bs-gray: #6c757d; --bs-gray-dark: #343a40; --bs-primary: #0d6efd; --bs-secondary: #6c757d; --bs-success: #198754; --bs-info: #0dcaf0; --bs-warning: #ffc107; --bs-danger: #dc3545; --bs-light: #f8f9fa; --bs-dark: #212529; --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); } *, *::before, *::after { box-sizing: border-box; } @media (prefers-reduced-motion: no-preference) { :root { scroll-behavior: smooth; } } body { margin: 0; font-family: var(--bs-font-sans-serif); font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } [tabindex="-1"]:focus:not(:focus-visible) { outline: 0 !important; } hr { margin: 1rem 0; color: inherit; background-color: currentColor; border: 0; opacity: 0.25; } hr:not([size]) { height: 1px; } h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { margin-top: 0; margin-bottom: 0.5rem; font-weight: 500; line-height: 1.2; } h1, .h1 { font-size: calc(1.375rem + 1.5vw); } @media (min-width: 1200px) { h1, .h1 { font-size: 2.5rem; } } h2, .h2 { font-size: calc(1.325rem + 0.9vw); } @media (min-width: 1200px) { h2, .h2 { font-size: 2rem; } } h3, .h3 { font-size: calc(1.3rem + 0.6vw); } @media (min-width: 1200px) { h3, .h3 { font-size: 1.75rem; } } h4, .h4 { font-size: calc(1.275rem + 0.3vw); } @media (min-width: 1200px) { h4, .h4 { font-size: 1.5rem; } } h5, .h5 { font-size: 1.25rem; } h6, .h6 { font-size: 1rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-bs-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; cursor: help; -webkit-text-decoration-skip-ink: none; text-decoration-skip-ink: none; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul { padding-left: 2rem; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: 700; } dd { margin-bottom: 0.5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } b, strong { font-weight: bolder; } small, .small { font-size: 0.875em; } mark, .mark { padding: 0.2em; background-color: #fcf8e3; } sub, sup { position: relative; font-size: 0.75em; line-height: 0; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } a { color: #0d6efd; text-decoration: underline; } a:hover { color: #0a58ca; } a:not([href]):not([class]), a:not([href]):not([class]):hover { color: inherit; text-decoration: none; } pre, code, kbd, samp { font-family: var(--bs-font-monospace); font-size: 1em; direction: ltr /* rtl:ignore */; unicode-bidi: bidi-override; } pre { display: block; margin-top: 0; margin-bottom: 1rem; overflow: auto; font-size: 0.875em; } pre code { font-size: inherit; color: inherit; word-break: normal; } code { font-size: 0.875em; color: #d63384; word-wrap: break-word; } a > code { color: inherit; } kbd { padding: 0.2rem 0.4rem; font-size: 0.875em; color: #fff; background-color: #212529; border-radius: 0.2rem; } kbd kbd { padding: 0; font-size: 1em; font-weight: 700; } figure { margin: 0 0 1rem; } img, svg { vertical-align: middle; } table { caption-side: bottom; border-collapse: collapse; } caption { padding-top: 0.5rem; padding-bottom: 0.5rem; color: #6c757d; text-align: left; } th { text-align: inherit; text-align: -webkit-match-parent; } thead, tbody, tfoot, tr, td, th { border-color: inherit; border-style: solid; border-width: 0; } label { display: inline-block; } button { border-radius: 0; } button:focus:not(:focus-visible) { outline: 0; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, select { text-transform: none; } [role=button] { cursor: pointer; } select { word-wrap: normal; } [list]::-webkit-calendar-picker-indicator { display: none; } button, [type=button], [type=reset], [type=submit] { -webkit-appearance: button; } button:not(:disabled), [type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled) { cursor: pointer; } ::-moz-focus-inner { padding: 0; border-style: none; } textarea { resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { float: left; width: 100%; padding: 0; margin-bottom: 0.5rem; font-size: calc(1.275rem + 0.3vw); line-height: inherit; } @media (min-width: 1200px) { legend { font-size: 1.5rem; } } legend + * { clear: left; } ::-webkit-datetime-edit-fields-wrapper, ::-webkit-datetime-edit-text, ::-webkit-datetime-edit-minute, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-year-field { padding: 0; } ::-webkit-inner-spin-button { height: auto; } [type=search] { outline-offset: -2px; -webkit-appearance: textfield; } /* rtl:raw: [type="tel"], [type="url"], [type="email"], [type="number"] { direction: ltr; } */ ::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-color-swatch-wrapper { padding: 0; } ::file-selector-button { font: inherit; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } iframe { border: 0; } summary { display: list-item; cursor: pointer; } progress { vertical-align: baseline; } [hidden] { display: none !important; } .lead { font-size: 1.25rem; font-weight: 300; } .display-1 { font-size: calc(1.625rem + 4.5vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-1 { font-size: 5rem; } } .display-2 { font-size: calc(1.575rem + 3.9vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-2 { font-size: 4.5rem; } } .display-3 { font-size: calc(1.525rem + 3.3vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-3 { font-size: 4rem; } } .display-4 { font-size: calc(1.475rem + 2.7vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-4 { font-size: 3.5rem; } } .display-5 { font-size: calc(1.425rem + 2.1vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-5 { font-size: 3rem; } } .display-6 { font-size: calc(1.375rem + 1.5vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-6 { font-size: 2.5rem; } } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline-item { display: inline-block; } .list-inline-item:not(:last-child) { margin-right: 0.5rem; } .initialism { font-size: 0.875em; text-transform: uppercase; } .blockquote { margin-bottom: 1rem; font-size: 1.25rem; } .blockquote > :last-child { margin-bottom: 0; } .blockquote-footer { margin-top: -1rem; margin-bottom: 1rem; font-size: 0.875em; color: #6c757d; } .blockquote-footer::before { content: "— "; } .img-fluid { max-width: 100%; height: auto; } .img-thumbnail { padding: 0.25rem; background-color: #fff; border: 1px solid #dee2e6; border-radius: 0.25rem; max-width: 100%; height: auto; } .figure { display: inline-block; } .figure-img { margin-bottom: 0.5rem; line-height: 1; } .figure-caption { font-size: 0.875em; color: #6c757d; } .container, .container-fluid, .container-xxl, .container-xl, .container-lg, .container-md, .container-sm { width: 100%; padding-right: var(--bs-gutter-x, 0.75rem); padding-left: var(--bs-gutter-x, 0.75rem); margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container-sm, .container { max-width: 540px; } } @media (min-width: 768px) { .container-md, .container-sm, .container { max-width: 720px; } } @media (min-width: 992px) { .container-lg, .container-md, .container-sm, .container { max-width: 960px; } } @media (min-width: 1200px) { .container-xl, .container-lg, .container-md, .container-sm, .container { max-width: 1140px; } } @media (min-width: 1400px) { .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { max-width: 1320px; } } .row { --bs-gutter-x: 1.5rem; --bs-gutter-y: 0; display: flex; flex-wrap: wrap; margin-top: calc(var(--bs-gutter-y) * -1); margin-right: calc(var(--bs-gutter-x) / -2); margin-left: calc(var(--bs-gutter-x) / -2); } .row > * { flex-shrink: 0; width: 100%; max-width: 100%; padding-right: calc(var(--bs-gutter-x) / 2); padding-left: calc(var(--bs-gutter-x) / 2); margin-top: var(--bs-gutter-y); } .col { flex: 1 0 0%; } .row-cols-auto > * { flex: 0 0 auto; width: auto; } .row-cols-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-auto { flex: 0 0 auto; width: auto; } .col-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-3 { flex: 0 0 auto; width: 25%; } .col-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-6 { flex: 0 0 auto; width: 50%; } .col-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-9 { flex: 0 0 auto; width: 75%; } .col-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-12 { flex: 0 0 auto; width: 100%; } .offset-1 { margin-left: 8.3333333333%; } .offset-2 { margin-left: 16.6666666667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.3333333333%; } .offset-5 { margin-left: 41.6666666667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.3333333333%; } .offset-8 { margin-left: 66.6666666667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.3333333333%; } .offset-11 { margin-left: 91.6666666667%; } .g-0, .gx-0 { --bs-gutter-x: 0; } .g-0, .gy-0 { --bs-gutter-y: 0; } .g-1, .gx-1 { --bs-gutter-x: 0.25rem; } .g-1, .gy-1 { --bs-gutter-y: 0.25rem; } .g-2, .gx-2 { --bs-gutter-x: 0.5rem; } .g-2, .gy-2 { --bs-gutter-y: 0.5rem; } .g-3, .gx-3 { --bs-gutter-x: 1rem; } .g-3, .gy-3 { --bs-gutter-y: 1rem; } .g-4, .gx-4 { --bs-gutter-x: 1.5rem; } .g-4, .gy-4 { --bs-gutter-y: 1.5rem; } .g-5, .gx-5 { --bs-gutter-x: 3rem; } .g-5, .gy-5 { --bs-gutter-y: 3rem; } @media (min-width: 576px) { .col-sm { flex: 1 0 0%; } .row-cols-sm-auto > * { flex: 0 0 auto; width: auto; } .row-cols-sm-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-sm-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-sm-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-sm-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-sm-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-sm-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-sm-auto { flex: 0 0 auto; width: auto; } .col-sm-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-sm-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-sm-3 { flex: 0 0 auto; width: 25%; } .col-sm-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-sm-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-sm-6 { flex: 0 0 auto; width: 50%; } .col-sm-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-sm-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-sm-9 { flex: 0 0 auto; width: 75%; } .col-sm-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-sm-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-sm-12 { flex: 0 0 auto; width: 100%; } .offset-sm-0 { margin-left: 0; } .offset-sm-1 { margin-left: 8.3333333333%; } .offset-sm-2 { margin-left: 16.6666666667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.3333333333%; } .offset-sm-5 { margin-left: 41.6666666667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.3333333333%; } .offset-sm-8 { margin-left: 66.6666666667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.3333333333%; } .offset-sm-11 { margin-left: 91.6666666667%; } .g-sm-0, .gx-sm-0 { --bs-gutter-x: 0; } .g-sm-0, .gy-sm-0 { --bs-gutter-y: 0; } .g-sm-1, .gx-sm-1 { --bs-gutter-x: 0.25rem; } .g-sm-1, .gy-sm-1 { --bs-gutter-y: 0.25rem; } .g-sm-2, .gx-sm-2 { --bs-gutter-x: 0.5rem; } .g-sm-2, .gy-sm-2 { --bs-gutter-y: 0.5rem; } .g-sm-3, .gx-sm-3 { --bs-gutter-x: 1rem; } .g-sm-3, .gy-sm-3 { --bs-gutter-y: 1rem; } .g-sm-4, .gx-sm-4 { --bs-gutter-x: 1.5rem; } .g-sm-4, .gy-sm-4 { --bs-gutter-y: 1.5rem; } .g-sm-5, .gx-sm-5 { --bs-gutter-x: 3rem; } .g-sm-5, .gy-sm-5 { --bs-gutter-y: 3rem; } } @media (min-width: 768px) { .col-md { flex: 1 0 0%; } .row-cols-md-auto > * { flex: 0 0 auto; width: auto; } .row-cols-md-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-md-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-md-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-md-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-md-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-md-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-md-auto { flex: 0 0 auto; width: auto; } .col-md-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-md-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-md-3 { flex: 0 0 auto; width: 25%; } .col-md-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-md-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-md-6 { flex: 0 0 auto; width: 50%; } .col-md-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-md-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-md-9 { flex: 0 0 auto; width: 75%; } .col-md-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-md-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-md-12 { flex: 0 0 auto; width: 100%; } .offset-md-0 { margin-left: 0; } .offset-md-1 { margin-left: 8.3333333333%; } .offset-md-2 { margin-left: 16.6666666667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.3333333333%; } .offset-md-5 { margin-left: 41.6666666667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.3333333333%; } .offset-md-8 { margin-left: 66.6666666667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.3333333333%; } .offset-md-11 { margin-left: 91.6666666667%; } .g-md-0, .gx-md-0 { --bs-gutter-x: 0; } .g-md-0, .gy-md-0 { --bs-gutter-y: 0; } .g-md-1, .gx-md-1 { --bs-gutter-x: 0.25rem; } .g-md-1, .gy-md-1 { --bs-gutter-y: 0.25rem; } .g-md-2, .gx-md-2 { --bs-gutter-x: 0.5rem; } .g-md-2, .gy-md-2 { --bs-gutter-y: 0.5rem; } .g-md-3, .gx-md-3 { --bs-gutter-x: 1rem; } .g-md-3, .gy-md-3 { --bs-gutter-y: 1rem; } .g-md-4, .gx-md-4 { --bs-gutter-x: 1.5rem; } .g-md-4, .gy-md-4 { --bs-gutter-y: 1.5rem; } .g-md-5, .gx-md-5 { --bs-gutter-x: 3rem; } .g-md-5, .gy-md-5 { --bs-gutter-y: 3rem; } } @media (min-width: 992px) { .col-lg { flex: 1 0 0%; } .row-cols-lg-auto > * { flex: 0 0 auto; width: auto; } .row-cols-lg-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-lg-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-lg-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-lg-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-lg-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-lg-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-lg-auto { flex: 0 0 auto; width: auto; } .col-lg-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-lg-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-lg-3 { flex: 0 0 auto; width: 25%; } .col-lg-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-lg-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-lg-6 { flex: 0 0 auto; width: 50%; } .col-lg-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-lg-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-lg-9 { flex: 0 0 auto; width: 75%; } .col-lg-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-lg-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-lg-12 { flex: 0 0 auto; width: 100%; } .offset-lg-0 { margin-left: 0; } .offset-lg-1 { margin-left: 8.3333333333%; } .offset-lg-2 { margin-left: 16.6666666667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.3333333333%; } .offset-lg-5 { margin-left: 41.6666666667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.3333333333%; } .offset-lg-8 { margin-left: 66.6666666667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.3333333333%; } .offset-lg-11 { margin-left: 91.6666666667%; } .g-lg-0, .gx-lg-0 { --bs-gutter-x: 0; } .g-lg-0, .gy-lg-0 { --bs-gutter-y: 0; } .g-lg-1, .gx-lg-1 { --bs-gutter-x: 0.25rem; } .g-lg-1, .gy-lg-1 { --bs-gutter-y: 0.25rem; } .g-lg-2, .gx-lg-2 { --bs-gutter-x: 0.5rem; } .g-lg-2, .gy-lg-2 { --bs-gutter-y: 0.5rem; } .g-lg-3, .gx-lg-3 { --bs-gutter-x: 1rem; } .g-lg-3, .gy-lg-3 { --bs-gutter-y: 1rem; } .g-lg-4, .gx-lg-4 { --bs-gutter-x: 1.5rem; } .g-lg-4, .gy-lg-4 { --bs-gutter-y: 1.5rem; } .g-lg-5, .gx-lg-5 { --bs-gutter-x: 3rem; } .g-lg-5, .gy-lg-5 { --bs-gutter-y: 3rem; } } @media (min-width: 1200px) { .col-xl { flex: 1 0 0%; } .row-cols-xl-auto > * { flex: 0 0 auto; width: auto; } .row-cols-xl-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-xl-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-xl-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-xl-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-xl-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-xl-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-xl-auto { flex: 0 0 auto; width: auto; } .col-xl-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-xl-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-xl-3 { flex: 0 0 auto; width: 25%; } .col-xl-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-xl-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-xl-6 { flex: 0 0 auto; width: 50%; } .col-xl-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-xl-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-xl-9 { flex: 0 0 auto; width: 75%; } .col-xl-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-xl-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-xl-12 { flex: 0 0 auto; width: 100%; } .offset-xl-0 { margin-left: 0; } .offset-xl-1 { margin-left: 8.3333333333%; } .offset-xl-2 { margin-left: 16.6666666667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.3333333333%; } .offset-xl-5 { margin-left: 41.6666666667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.3333333333%; } .offset-xl-8 { margin-left: 66.6666666667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.3333333333%; } .offset-xl-11 { margin-left: 91.6666666667%; } .g-xl-0, .gx-xl-0 { --bs-gutter-x: 0; } .g-xl-0, .gy-xl-0 { --bs-gutter-y: 0; } .g-xl-1, .gx-xl-1 { --bs-gutter-x: 0.25rem; } .g-xl-1, .gy-xl-1 { --bs-gutter-y: 0.25rem; } .g-xl-2, .gx-xl-2 { --bs-gutter-x: 0.5rem; } .g-xl-2, .gy-xl-2 { --bs-gutter-y: 0.5rem; } .g-xl-3, .gx-xl-3 { --bs-gutter-x: 1rem; } .g-xl-3, .gy-xl-3 { --bs-gutter-y: 1rem; } .g-xl-4, .gx-xl-4 { --bs-gutter-x: 1.5rem; } .g-xl-4, .gy-xl-4 { --bs-gutter-y: 1.5rem; } .g-xl-5, .gx-xl-5 { --bs-gutter-x: 3rem; } .g-xl-5, .gy-xl-5 { --bs-gutter-y: 3rem; } } @media (min-width: 1400px) { .col-xxl { flex: 1 0 0%; } .row-cols-xxl-auto > * { flex: 0 0 auto; width: auto; } .row-cols-xxl-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-xxl-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-xxl-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-xxl-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-xxl-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-xxl-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-xxl-auto { flex: 0 0 auto; width: auto; } .col-xxl-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-xxl-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-xxl-3 { flex: 0 0 auto; width: 25%; } .col-xxl-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-xxl-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-xxl-6 { flex: 0 0 auto; width: 50%; } .col-xxl-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-xxl-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-xxl-9 { flex: 0 0 auto; width: 75%; } .col-xxl-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-xxl-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-xxl-12 { flex: 0 0 auto; width: 100%; } .offset-xxl-0 { margin-left: 0; } .offset-xxl-1 { margin-left: 8.3333333333%; } .offset-xxl-2 { margin-left: 16.6666666667%; } .offset-xxl-3 { margin-left: 25%; } .offset-xxl-4 { margin-left: 33.3333333333%; } .offset-xxl-5 { margin-left: 41.6666666667%; } .offset-xxl-6 { margin-left: 50%; } .offset-xxl-7 { margin-left: 58.3333333333%; } .offset-xxl-8 { margin-left: 66.6666666667%; } .offset-xxl-9 { margin-left: 75%; } .offset-xxl-10 { margin-left: 83.3333333333%; } .offset-xxl-11 { margin-left: 91.6666666667%; } .g-xxl-0, .gx-xxl-0 { --bs-gutter-x: 0; } .g-xxl-0, .gy-xxl-0 { --bs-gutter-y: 0; } .g-xxl-1, .gx-xxl-1 { --bs-gutter-x: 0.25rem; } .g-xxl-1, .gy-xxl-1 { --bs-gutter-y: 0.25rem; } .g-xxl-2, .gx-xxl-2 { --bs-gutter-x: 0.5rem; } .g-xxl-2, .gy-xxl-2 { --bs-gutter-y: 0.5rem; } .g-xxl-3, .gx-xxl-3 { --bs-gutter-x: 1rem; } .g-xxl-3, .gy-xxl-3 { --bs-gutter-y: 1rem; } .g-xxl-4, .gx-xxl-4 { --bs-gutter-x: 1.5rem; } .g-xxl-4, .gy-xxl-4 { --bs-gutter-y: 1.5rem; } .g-xxl-5, .gx-xxl-5 { --bs-gutter-x: 3rem; } .g-xxl-5, .gy-xxl-5 { --bs-gutter-y: 3rem; } } .table { --bs-table-bg: transparent; --bs-table-striped-color: #212529; --bs-table-striped-bg: rgba(0, 0, 0, 0.05); --bs-table-active-color: #212529; --bs-table-active-bg: rgba(0, 0, 0, 0.1); --bs-table-hover-color: #212529; --bs-table-hover-bg: rgba(0, 0, 0, 0.075); width: 100%; margin-bottom: 1rem; color: #212529; vertical-align: top; border-color: #dee2e6; } .table > :not(caption) > * > * { padding: 0.5rem 0.5rem; background-color: var(--bs-table-bg); border-bottom-width: 1px; box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); } .table > tbody { vertical-align: inherit; } .table > thead { vertical-align: bottom; } .table > :not(:last-child) > :last-child > * { border-bottom-color: currentColor; } .caption-top { caption-side: top; } .table-sm > :not(caption) > * > * { padding: 0.25rem 0.25rem; } .table-bordered > :not(caption) > * { border-width: 1px 0; } .table-bordered > :not(caption) > * > * { border-width: 0 1px; } .table-borderless > :not(caption) > * > * { border-bottom-width: 0; } .table-striped > tbody > tr:nth-of-type(odd) { --bs-table-accent-bg: var(--bs-table-striped-bg); color: var(--bs-table-striped-color); } .table-active { --bs-table-accent-bg: var(--bs-table-active-bg); color: var(--bs-table-active-color); } .table-hover > tbody > tr:hover { --bs-table-accent-bg: var(--bs-table-hover-bg); color: var(--bs-table-hover-color); } .table-primary { --bs-table-bg: #cfe2ff; --bs-table-striped-bg: #c5d7f2; --bs-table-striped-color: #000; --bs-table-active-bg: #bacbe6; --bs-table-active-color: #000; --bs-table-hover-bg: #bfd1ec; --bs-table-hover-color: #000; color: #000; border-color: #bacbe6; } .table-secondary { --bs-table-bg: #e2e3e5; --bs-table-striped-bg: #d7d8da; --bs-table-striped-color: #000; --bs-table-active-bg: #cbccce; --bs-table-active-color: #000; --bs-table-hover-bg: #d1d2d4; --bs-table-hover-color: #000; color: #000; border-color: #cbccce; } .table-success { --bs-table-bg: #d1e7dd; --bs-table-striped-bg: #c7dbd2; --bs-table-striped-color: #000; --bs-table-active-bg: #bcd0c7; --bs-table-active-color: #000; --bs-table-hover-bg: #c1d6cc; --bs-table-hover-color: #000; color: #000; border-color: #bcd0c7; } .table-info { --bs-table-bg: #cff4fc; --bs-table-striped-bg: #c5e8ef; --bs-table-striped-color: #000; --bs-table-active-bg: #badce3; --bs-table-active-color: #000; --bs-table-hover-bg: #bfe2e9; --bs-table-hover-color: #000; color: #000; border-color: #badce3; } .table-warning { --bs-table-bg: #fff3cd; --bs-table-striped-bg: #f2e7c3; --bs-table-striped-color: #000; --bs-table-active-bg: #e6dbb9; --bs-table-active-color: #000; --bs-table-hover-bg: #ece1be; --bs-table-hover-color: #000; color: #000; border-color: #e6dbb9; } .table-danger { --bs-table-bg: #f8d7da; --bs-table-striped-bg: #eccccf; --bs-table-striped-color: #000; --bs-table-active-bg: #dfc2c4; --bs-table-active-color: #000; --bs-table-hover-bg: #e5c7ca; --bs-table-hover-color: #000; color: #000; border-color: #dfc2c4; } .table-light { --bs-table-bg: #f8f9fa; --bs-table-striped-bg: #ecedee; --bs-table-striped-color: #000; --bs-table-active-bg: #dfe0e1; --bs-table-active-color: #000; --bs-table-hover-bg: #e5e6e7; --bs-table-hover-color: #000; color: #000; border-color: #dfe0e1; } .table-dark { --bs-table-bg: #212529; --bs-table-striped-bg: #2c3034; --bs-table-striped-color: #fff; --bs-table-active-bg: #373b3e; --bs-table-active-color: #fff; --bs-table-hover-bg: #323539; --bs-table-hover-color: #fff; color: #fff; border-color: #373b3e; } .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } @media (max-width: 575.98px) { .table-responsive-sm { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 767.98px) { .table-responsive-md { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 991.98px) { .table-responsive-lg { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 1199.98px) { .table-responsive-xl { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 1399.98px) { .table-responsive-xxl { overflow-x: auto; -webkit-overflow-scrolling: touch; } } .form-label { margin-bottom: 0.5rem; } .col-form-label { padding-top: calc(0.375rem + 1px); padding-bottom: calc(0.375rem + 1px); margin-bottom: 0; font-size: inherit; line-height: 1.5; } .col-form-label-lg { padding-top: calc(0.5rem + 1px); padding-bottom: calc(0.5rem + 1px); font-size: 1.25rem; } .col-form-label-sm { padding-top: calc(0.25rem + 1px); padding-bottom: calc(0.25rem + 1px); font-size: 0.875rem; } .form-text { margin-top: 0.25rem; font-size: 0.875em; color: #6c757d; } .form-control { display: block; width: 100%; padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; background-clip: padding-box; border: 1px solid #ced4da; -webkit-appearance: none; -moz-appearance: none; appearance: none; border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control[type=file] { overflow: hidden; } .form-control[type=file]:not(:disabled):not([readonly]) { cursor: pointer; } .form-control:focus { color: #212529; background-color: #fff; border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-control::-webkit-date-and-time-value { height: 1.5em; } .form-control::-webkit-input-placeholder { color: #6c757d; opacity: 1; } .form-control::-moz-placeholder { color: #6c757d; opacity: 1; } .form-control::placeholder { color: #6c757d; opacity: 1; } .form-control:disabled, .form-control[readonly] { background-color: #e9ecef; opacity: 1; } .form-control::file-selector-button { padding: 0.375rem 0.75rem; margin: -0.375rem -0.75rem; -webkit-margin-end: 0.75rem; margin-inline-end: 0.75rem; color: #212529; background-color: #e9ecef; pointer-events: none; border-color: inherit; border-style: solid; border-width: 0; border-inline-end-width: 1px; border-radius: 0; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control::file-selector-button { transition: none; } } .form-control:hover:not(:disabled):not([readonly])::file-selector-button { background-color: #dde0e3; } .form-control::-webkit-file-upload-button { padding: 0.375rem 0.75rem; margin: -0.375rem -0.75rem; -webkit-margin-end: 0.75rem; margin-inline-end: 0.75rem; color: #212529; background-color: #e9ecef; pointer-events: none; border-color: inherit; border-style: solid; border-width: 0; border-inline-end-width: 1px; border-radius: 0; -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control::-webkit-file-upload-button { -webkit-transition: none; transition: none; } } .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { background-color: #dde0e3; } .form-control-plaintext { display: block; width: 100%; padding: 0.375rem 0; margin-bottom: 0; line-height: 1.5; color: #212529; background-color: transparent; border: solid transparent; border-width: 1px 0; } .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { padding-right: 0; padding-left: 0; } .form-control-sm { min-height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .form-control-sm::file-selector-button { padding: 0.25rem 0.5rem; margin: -0.25rem -0.5rem; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .form-control-sm::-webkit-file-upload-button { padding: 0.25rem 0.5rem; margin: -0.25rem -0.5rem; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .form-control-lg { min-height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .form-control-lg::file-selector-button { padding: 0.5rem 1rem; margin: -0.5rem -1rem; -webkit-margin-end: 1rem; margin-inline-end: 1rem; } .form-control-lg::-webkit-file-upload-button { padding: 0.5rem 1rem; margin: -0.5rem -1rem; -webkit-margin-end: 1rem; margin-inline-end: 1rem; } textarea.form-control { min-height: calc(1.5em + 0.75rem + 2px); } textarea.form-control-sm { min-height: calc(1.5em + 0.5rem + 2px); } textarea.form-control-lg { min-height: calc(1.5em + 1rem + 2px); } .form-control-color { max-width: 3rem; height: auto; padding: 0.375rem; } .form-control-color:not(:disabled):not([readonly]) { cursor: pointer; } .form-control-color::-moz-color-swatch { height: 1.5em; border-radius: 0.25rem; } .form-control-color::-webkit-color-swatch { height: 1.5em; border-radius: 0.25rem; } .form-select { display: block; width: 100%; padding: 0.375rem 2.25rem 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 0.75rem center; background-size: 16px 12px; border: 1px solid #ced4da; border-radius: 0.25rem; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .form-select:focus { border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-select[multiple], .form-select[size]:not([size="1"]) { padding-right: 0.75rem; background-image: none; } .form-select:disabled { color: #6c757d; background-color: #e9ecef; } .form-select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #212529; } .form-select-sm { padding-top: 0.25rem; padding-bottom: 0.25rem; padding-left: 0.5rem; font-size: 0.875rem; } .form-select-lg { padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; font-size: 1.25rem; } .form-check { display: block; min-height: 1.5rem; padding-left: 1.5em; margin-bottom: 0.125rem; } .form-check .form-check-input { float: left; margin-left: -1.5em; } .form-check-input { width: 1em; height: 1em; margin-top: 0.25em; vertical-align: top; background-color: #fff; background-repeat: no-repeat; background-position: center; background-size: contain; border: 1px solid rgba(0, 0, 0, 0.25); -webkit-appearance: none; -moz-appearance: none; appearance: none; -webkit-print-color-adjust: exact; color-adjust: exact; } .form-check-input[type=checkbox] { border-radius: 0.25em; } .form-check-input[type=radio] { border-radius: 50%; } .form-check-input:active { filter: brightness(90%); } .form-check-input:focus { border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-check-input:checked { background-color: #0d6efd; border-color: #0d6efd; } .form-check-input:checked[type=checkbox] { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); } .form-check-input:checked[type=radio] { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); } .form-check-input[type=checkbox]:indeterminate { background-color: #0d6efd; border-color: #0d6efd; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); } .form-check-input:disabled { pointer-events: none; filter: none; opacity: 0.5; } .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { opacity: 0.5; } .form-switch { padding-left: 2.5em; } .form-switch .form-check-input { width: 2em; margin-left: -2.5em; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); background-position: left center; border-radius: 2em; transition: background-position 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-switch .form-check-input { transition: none; } } .form-switch .form-check-input:focus { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); } .form-switch .form-check-input:checked { background-position: right center; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .form-check-inline { display: inline-block; margin-right: 1rem; } .btn-check { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .btn-check[disabled] + .btn, .btn-check:disabled + .btn { pointer-events: none; filter: none; opacity: 0.65; } .form-range { width: 100%; height: 1.5rem; padding: 0; background-color: transparent; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .form-range:focus { outline: 0; } .form-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-range::-moz-focus-outer { border: 0; } .form-range::-webkit-slider-thumb { width: 1rem; height: 1rem; margin-top: -0.25rem; background-color: #0d6efd; border: 0; border-radius: 1rem; -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -webkit-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .form-range::-webkit-slider-thumb { -webkit-transition: none; transition: none; } } .form-range::-webkit-slider-thumb:active { background-color: #b6d4fe; } .form-range::-webkit-slider-runnable-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .form-range::-moz-range-thumb { width: 1rem; height: 1rem; background-color: #0d6efd; border: 0; border-radius: 1rem; -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -moz-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .form-range::-moz-range-thumb { -moz-transition: none; transition: none; } } .form-range::-moz-range-thumb:active { background-color: #b6d4fe; } .form-range::-moz-range-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .form-range:disabled { pointer-events: none; } .form-range:disabled::-webkit-slider-thumb { background-color: #adb5bd; } .form-range:disabled::-moz-range-thumb { background-color: #adb5bd; } .form-floating { position: relative; } .form-floating > .form-control, .form-floating > .form-select { height: calc(3.5rem + 2px); padding: 1rem 0.75rem; } .form-floating > label { position: absolute; top: 0; left: 0; height: 100%; padding: 1rem 0.75rem; pointer-events: none; border: 1px solid transparent; transform-origin: 0 0; transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-floating > label { transition: none; } } .form-floating > .form-control::-webkit-input-placeholder { color: transparent; } .form-floating > .form-control::-moz-placeholder { color: transparent; } .form-floating > .form-control::placeholder { color: transparent; } .form-floating > .form-control:not(:-moz-placeholder-shown) { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:-webkit-autofill { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-select { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-select ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .form-floating > .form-control:-webkit-autofill ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .input-group { position: relative; display: flex; flex-wrap: wrap; align-items: stretch; width: 100%; } .input-group > .form-control, .input-group > .form-select { position: relative; flex: 1 1 auto; width: 1%; min-width: 0; } .input-group > .form-control:focus, .input-group > .form-select:focus { z-index: 3; } .input-group .btn { position: relative; z-index: 2; } .input-group .btn:focus { z-index: 3; } .input-group-text { display: flex; align-items: center; padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; text-align: center; white-space: nowrap; background-color: #e9ecef; border: 1px solid #ced4da; border-radius: 0.25rem; } .input-group-lg > .form-control, .input-group-lg > .form-select, .input-group-lg > .input-group-text, .input-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .input-group-sm > .form-control, .input-group-sm > .form-select, .input-group-sm > .input-group-text, .input-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .input-group-lg > .form-select, .input-group-sm > .form-select { padding-right: 3rem; } .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; } .valid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #198754; } .valid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.875rem; color: #fff; background-color: rgba(25, 135, 84, 0.9); border-radius: 0.25rem; } .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip, .is-valid ~ .valid-feedback, .is-valid ~ .valid-tooltip { display: block; } .was-validated .form-control:valid, .form-control.is-valid { border-color: #198754; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #198754; box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated textarea.form-control:valid, textarea.form-control.is-valid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .form-select:valid, .form-select.is-valid { border-color: #198754; padding-right: 4.125rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-select:valid:focus, .form-select.is-valid:focus { border-color: #198754; box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated .form-check-input:valid, .form-check-input.is-valid { border-color: #198754; } .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { background-color: #198754; } .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: #198754; } .form-check-inline .form-check-input ~ .valid-feedback { margin-left: 0.5em; } .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #dc3545; } .invalid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.875rem; color: #fff; background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip, .is-invalid ~ .invalid-feedback, .is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-control:invalid, .form-control.is-invalid { border-color: #dc3545; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .form-select:invalid, .form-select.is-invalid { border-color: #dc3545; padding-right: 4.125rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated .form-check-input:invalid, .form-check-input.is-invalid { border-color: #dc3545; } .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { background-color: #dc3545; } .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: #dc3545; } .form-check-inline .form-check-input ~ .invalid-feedback { margin-left: 0.5em; } .btn { display: inline-block; font-weight: 400; line-height: 1.5; color: #212529; text-align: center; text-decoration: none; vertical-align: middle; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } .btn:hover { color: #212529; } .btn-check:focus + .btn, .btn:focus { outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .btn:disabled, .btn.disabled, fieldset:disabled .btn { pointer-events: none; opacity: 0.65; } .btn-primary { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-primary:hover { color: #fff; background-color: #0b5ed7; border-color: #0a58ca; } .btn-check:focus + .btn-primary, .btn-primary:focus { color: #fff; background-color: #0b5ed7; border-color: #0a58ca; box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); } .btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { color: #fff; background-color: #0a58ca; border-color: #0a53be; } .btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); } .btn-primary:disabled, .btn-primary.disabled { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-secondary { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-secondary:hover { color: #fff; background-color: #5c636a; border-color: #565e64; } .btn-check:focus + .btn-secondary, .btn-secondary:focus { color: #fff; background-color: #5c636a; border-color: #565e64; box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); } .btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { color: #fff; background-color: #565e64; border-color: #51585e; } .btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); } .btn-secondary:disabled, .btn-secondary.disabled { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-success { color: #fff; background-color: #198754; border-color: #198754; } .btn-success:hover { color: #fff; background-color: #157347; border-color: #146c43; } .btn-check:focus + .btn-success, .btn-success:focus { color: #fff; background-color: #157347; border-color: #146c43; box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); } .btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { color: #fff; background-color: #146c43; border-color: #13653f; } .btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); } .btn-success:disabled, .btn-success.disabled { color: #fff; background-color: #198754; border-color: #198754; } .btn-info { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-info:hover { color: #000; background-color: #31d2f2; border-color: #25cff2; } .btn-check:focus + .btn-info, .btn-info:focus { color: #000; background-color: #31d2f2; border-color: #25cff2; box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); } .btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { color: #000; background-color: #3dd5f3; border-color: #25cff2; } .btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); } .btn-info:disabled, .btn-info.disabled { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-warning { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-warning:hover { color: #000; background-color: #ffca2c; border-color: #ffc720; } .btn-check:focus + .btn-warning, .btn-warning:focus { color: #000; background-color: #ffca2c; border-color: #ffc720; box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { color: #000; background-color: #ffcd39; border-color: #ffc720; } .btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-warning:disabled, .btn-warning.disabled { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-danger { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-danger:hover { color: #fff; background-color: #bb2d3b; border-color: #b02a37; } .btn-check:focus + .btn-danger, .btn-danger:focus { color: #fff; background-color: #bb2d3b; border-color: #b02a37; box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); } .btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { color: #fff; background-color: #b02a37; border-color: #a52834; } .btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); } .btn-danger:disabled, .btn-danger.disabled { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-light { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:hover { color: #000; background-color: #f9fafb; border-color: #f9fafb; } .btn-check:focus + .btn-light, .btn-light:focus { color: #000; background-color: #f9fafb; border-color: #f9fafb; box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); } .btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { color: #000; background-color: #f9fafb; border-color: #f9fafb; } .btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); } .btn-light:disabled, .btn-light.disabled { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-dark { color: #fff; background-color: #212529; border-color: #212529; } .btn-dark:hover { color: #fff; background-color: #1c1f23; border-color: #1a1e21; } .btn-check:focus + .btn-dark, .btn-dark:focus { color: #fff; background-color: #1c1f23; border-color: #1a1e21; box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); } .btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { color: #fff; background-color: #1a1e21; border-color: #191c1f; } .btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); } .btn-dark:disabled, .btn-dark.disabled { color: #fff; background-color: #212529; border-color: #212529; } .btn-outline-primary { color: #0d6efd; border-color: #0d6efd; } .btn-outline-primary:hover { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); } .btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); } .btn-outline-primary:disabled, .btn-outline-primary.disabled { color: #0d6efd; background-color: transparent; } .btn-outline-secondary { color: #6c757d; border-color: #6c757d; } .btn-outline-secondary:hover { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); } .btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); } .btn-outline-secondary:disabled, .btn-outline-secondary.disabled { color: #6c757d; background-color: transparent; } .btn-outline-success { color: #198754; border-color: #198754; } .btn-outline-success:hover { color: #fff; background-color: #198754; border-color: #198754; } .btn-check:focus + .btn-outline-success, .btn-outline-success:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); } .btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { color: #fff; background-color: #198754; border-color: #198754; } .btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); } .btn-outline-success:disabled, .btn-outline-success.disabled { color: #198754; background-color: transparent; } .btn-outline-info { color: #0dcaf0; border-color: #0dcaf0; } .btn-outline-info:hover { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-check:focus + .btn-outline-info, .btn-outline-info:focus { box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); } .btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); } .btn-outline-info:disabled, .btn-outline-info.disabled { color: #0dcaf0; background-color: transparent; } .btn-outline-warning { color: #ffc107; border-color: #ffc107; } .btn-outline-warning:hover { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); } .btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); } .btn-outline-warning:disabled, .btn-outline-warning.disabled { color: #ffc107; background-color: transparent; } .btn-outline-danger { color: #dc3545; border-color: #dc3545; } .btn-outline-danger:hover { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); } .btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); } .btn-outline-danger:disabled, .btn-outline-danger.disabled { color: #dc3545; background-color: transparent; } .btn-outline-light { color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:hover { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-check:focus + .btn-outline-light, .btn-outline-light:focus { box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); } .btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); } .btn-outline-light:disabled, .btn-outline-light.disabled { color: #f8f9fa; background-color: transparent; } .btn-outline-dark { color: #212529; border-color: #212529; } .btn-outline-dark:hover { color: #fff; background-color: #212529; border-color: #212529; } .btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); } .btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { color: #fff; background-color: #212529; border-color: #212529; } .btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); } .btn-outline-dark:disabled, .btn-outline-dark.disabled { color: #212529; background-color: transparent; } .btn-link { font-weight: 400; color: #0d6efd; text-decoration: underline; } .btn-link:hover { color: #0a58ca; } .btn-link:disabled, .btn-link.disabled { color: #6c757d; } .btn-lg, .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .fade { transition: opacity 0.15s linear; } @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { opacity: 0; } .collapse:not(.show) { display: none; } .collapsing { height: 0; overflow: hidden; transition: height 0.35s ease; } @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } .dropup, .dropend, .dropdown, .dropstart { position: relative; } .dropdown-toggle { white-space: nowrap; } .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid; border-right: 0.3em solid transparent; border-bottom: 0; border-left: 0.3em solid transparent; } .dropdown-toggle:empty::after { margin-left: 0; } .dropdown-menu { position: absolute; top: 100%; z-index: 1000; display: none; min-width: 10rem; padding: 0.5rem 0; margin: 0; font-size: 1rem; color: #212529; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .dropdown-menu[data-bs-popper] { left: 0; margin-top: 0.125rem; } .dropdown-menu-start { --bs-position: start; } .dropdown-menu-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-end { --bs-position: end; } .dropdown-menu-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } @media (min-width: 576px) { .dropdown-menu-sm-start { --bs-position: start; } .dropdown-menu-sm-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-sm-end { --bs-position: end; } .dropdown-menu-sm-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 768px) { .dropdown-menu-md-start { --bs-position: start; } .dropdown-menu-md-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-md-end { --bs-position: end; } .dropdown-menu-md-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 992px) { .dropdown-menu-lg-start { --bs-position: start; } .dropdown-menu-lg-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-lg-end { --bs-position: end; } .dropdown-menu-lg-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 1200px) { .dropdown-menu-xl-start { --bs-position: start; } .dropdown-menu-xl-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-xl-end { --bs-position: end; } .dropdown-menu-xl-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 1400px) { .dropdown-menu-xxl-start { --bs-position: start; } .dropdown-menu-xxl-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-xxl-end { --bs-position: end; } .dropdown-menu-xxl-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } .dropup .dropdown-menu { top: auto; bottom: 100%; } .dropup .dropdown-menu[data-bs-popper] { margin-top: 0; margin-bottom: 0.125rem; } .dropup .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0; border-right: 0.3em solid transparent; border-bottom: 0.3em solid; border-left: 0.3em solid transparent; } .dropup .dropdown-toggle:empty::after { margin-left: 0; } .dropend .dropdown-menu { top: 0; right: auto; left: 100%; } .dropend .dropdown-menu[data-bs-popper] { margin-top: 0; margin-left: 0.125rem; } .dropend .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0; border-bottom: 0.3em solid transparent; border-left: 0.3em solid; } .dropend .dropdown-toggle:empty::after { margin-left: 0; } .dropend .dropdown-toggle::after { vertical-align: 0; } .dropstart .dropdown-menu { top: 0; right: 100%; left: auto; } .dropstart .dropdown-menu[data-bs-popper] { margin-top: 0; margin-right: 0.125rem; } .dropstart .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } .dropstart .dropdown-toggle::after { display: none; } .dropstart .dropdown-toggle::before { display: inline-block; margin-right: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0.3em solid; border-bottom: 0.3em solid transparent; } .dropstart .dropdown-toggle:empty::after { margin-left: 0; } .dropstart .dropdown-toggle::before { vertical-align: 0; } .dropdown-divider { height: 0; margin: 0.5rem 0; overflow: hidden; border-top: 1px solid rgba(0, 0, 0, 0.15); } .dropdown-item { display: block; width: 100%; padding: 0.25rem 1rem; clear: both; font-weight: 400; color: #212529; text-align: inherit; text-decoration: none; white-space: nowrap; background-color: transparent; border: 0; } .dropdown-item:hover, .dropdown-item:focus { color: #1e2125; background-color: #e9ecef; } .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #0d6efd; } .dropdown-item.disabled, .dropdown-item:disabled { color: #adb5bd; pointer-events: none; background-color: transparent; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1rem; margin-bottom: 0; font-size: 0.875rem; color: #6c757d; white-space: nowrap; } .dropdown-item-text { display: block; padding: 0.25rem 1rem; color: #212529; } .dropdown-menu-dark { color: #dee2e6; background-color: #343a40; border-color: rgba(0, 0, 0, 0.15); } .dropdown-menu-dark .dropdown-item { color: #dee2e6; } .dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { color: #fff; background-color: rgba(255, 255, 255, 0.15); } .dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { color: #fff; background-color: #0d6efd; } .dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { color: #adb5bd; } .dropdown-menu-dark .dropdown-divider { border-color: rgba(0, 0, 0, 0.15); } .dropdown-menu-dark .dropdown-item-text { color: #dee2e6; } .dropdown-menu-dark .dropdown-header { color: #adb5bd; } .btn-group, .btn-group-vertical { position: relative; display: inline-flex; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; flex: 1 1 auto; } .btn-group > .btn-check:checked + .btn, .btn-group > .btn-check:focus + .btn, .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn-check:checked + .btn, .btn-group-vertical > .btn-check:focus + .btn, .btn-group-vertical > .btn:hover, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } .btn-toolbar { display: flex; flex-wrap: wrap; justify-content: flex-start; } .btn-toolbar .input-group { width: auto; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) { margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:nth-child(n+3), .btn-group > :not(.btn-check) + .btn, .btn-group > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .dropdown-toggle-split { padding-right: 0.5625rem; padding-left: 0.5625rem; } .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { margin-left: 0; } .dropstart .dropdown-toggle-split::before { margin-right: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { padding-right: 0.375rem; padding-left: 0.375rem; } .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; padding-left: 0.75rem; } .btn-group-vertical { flex-direction: column; align-items: flex-start; justify-content: center; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group { width: 100%; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) { margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn ~ .btn, .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-top-right-radius: 0; } .nav { display: flex; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: 0.5rem 1rem; text-decoration: none; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .nav-link { transition: none; } } .nav-link.disabled { color: #6c757d; pointer-events: none; cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } .nav-tabs .nav-link { margin-bottom: -1px; background: none; border: 1px solid transparent; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { border-color: #e9ecef #e9ecef #dee2e6; isolation: isolate; } .nav-tabs .nav-link.disabled { color: #6c757d; background-color: transparent; border-color: transparent; } .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: #495057; background-color: #fff; border-color: #dee2e6 #dee2e6 #fff; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { background: none; border: 0; border-radius: 0.25rem; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #0d6efd; } .nav-fill > .nav-link, .nav-fill .nav-item { flex: 1 1 auto; text-align: center; } .nav-justified > .nav-link, .nav-justified .nav-item { flex-basis: 0; flex-grow: 1; text-align: center; } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .navbar { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar > .container, .navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl { display: flex; flex-wrap: inherit; align-items: center; justify-content: space-between; } .navbar-brand { padding-top: 0.3125rem; padding-bottom: 0.3125rem; margin-right: 1rem; font-size: 1.25rem; text-decoration: none; white-space: nowrap; } .navbar-nav { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; list-style: none; } .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } .navbar-nav .dropdown-menu { position: static; } .navbar-text { padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar-collapse { flex-basis: 100%; flex-grow: 1; align-items: center; } .navbar-toggler { padding: 0.25rem 0.75rem; font-size: 1.25rem; line-height: 1; background-color: transparent; border: 1px solid transparent; border-radius: 0.25rem; transition: box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .navbar-toggler { transition: none; } } .navbar-toggler:hover { text-decoration: none; } .navbar-toggler:focus { text-decoration: none; outline: 0; box-shadow: 0 0 0 0.25rem; } .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; background-repeat: no-repeat; background-position: center; background-size: 100%; } .navbar-nav-scroll { max-height: var(--bs-scroll-height, 75vh); overflow-y: auto; } @media (min-width: 576px) { .navbar-expand-sm { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-sm .navbar-nav { flex-direction: row; } .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-sm .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-sm .navbar-nav-scroll { overflow: visible; } .navbar-expand-sm .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-sm .navbar-toggler { display: none; } } @media (min-width: 768px) { .navbar-expand-md { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-md .navbar-nav { flex-direction: row; } .navbar-expand-md .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-md .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-md .navbar-nav-scroll { overflow: visible; } .navbar-expand-md .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-md .navbar-toggler { display: none; } } @media (min-width: 992px) { .navbar-expand-lg { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-lg .navbar-nav { flex-direction: row; } .navbar-expand-lg .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-lg .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-lg .navbar-nav-scroll { overflow: visible; } .navbar-expand-lg .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-lg .navbar-toggler { display: none; } } @media (min-width: 1200px) { .navbar-expand-xl { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-xl .navbar-nav { flex-direction: row; } .navbar-expand-xl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xl .navbar-nav-scroll { overflow: visible; } .navbar-expand-xl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xl .navbar-toggler { display: none; } } @media (min-width: 1400px) { .navbar-expand-xxl { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-xxl .navbar-nav { flex-direction: row; } .navbar-expand-xxl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xxl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xxl .navbar-nav-scroll { overflow: visible; } .navbar-expand-xxl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xxl .navbar-toggler { display: none; } } .navbar-expand { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand .navbar-nav { flex-direction: row; } .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand .navbar-nav-scroll { overflow: visible; } .navbar-expand .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand .navbar-toggler { display: none; } .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.55); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.7); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.55); border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.55); } .navbar-light .navbar-text a, .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { color: rgba(0, 0, 0, 0.9); } .navbar-dark .navbar-brand { color: #fff; } .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { color: #fff; } .navbar-dark .navbar-nav .nav-link { color: rgba(255, 255, 255, 0.55); } .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { color: rgba(255, 255, 255, 0.75); } .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .nav-link.active { color: #fff; } .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.55); border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.55); } .navbar-dark .navbar-text a, .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { color: #fff; } .card { position: relative; display: flex; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: #fff; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; } .card > hr { margin-right: 0; margin-left: 0; } .card > .list-group { border-top: inherit; border-bottom: inherit; } .card > .list-group:first-child { border-top-width: 0; border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .card > .list-group:last-child { border-bottom-width: 0; border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-left-radius: calc(0.25rem - 1px); } .card > .card-header + .list-group, .card > .list-group + .card-footer { border-top: 0; } .card-body { flex: 1 1 auto; padding: 1rem 1rem; } .card-title { margin-bottom: 0.5rem; } .card-subtitle { margin-top: -0.25rem; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link:hover { text-decoration: none; } .card-link + .card-link { margin-left: 1rem /* rtl:ignore */; } .card-header { padding: 0.5rem 1rem; margin-bottom: 0; background-color: rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.125); } .card-header:first-child { border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } .card-footer { padding: 0.5rem 1rem; background-color: rgba(0, 0, 0, 0.03); border-top: 1px solid rgba(0, 0, 0, 0.125); } .card-footer:last-child { border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); } .card-header-tabs { margin-right: -0.5rem; margin-bottom: -0.5rem; margin-left: -0.5rem; border-bottom: 0; } .card-header-pills { margin-right: -0.5rem; margin-left: -0.5rem; } .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: 1rem; border-radius: calc(0.25rem - 1px); } .card-img, .card-img-top, .card-img-bottom { width: 100%; } .card-img, .card-img-top { border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .card-img, .card-img-bottom { border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-left-radius: calc(0.25rem - 1px); } .card-group > .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-group { display: flex; flex-flow: row wrap; } .card-group > .card { flex: 1 0 0%; margin-bottom: 0; } .card-group > .card + .card { margin-left: 0; border-left: 0; } .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-bottom, .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-bottom, .card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 0; } } .accordion-button { position: relative; display: flex; align-items: center; width: 100%; padding: 1rem 1.25rem; font-size: 1rem; color: #212529; text-align: left; background-color: transparent; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0; overflow-anchor: none; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; } @media (prefers-reduced-motion: reduce) { .accordion-button { transition: none; } } .accordion-button.collapsed { border-bottom-width: 0; } .accordion-button:not(.collapsed) { color: #0c63e4; background-color: #e7f1ff; } .accordion-button:not(.collapsed)::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); transform: rotate(180deg); } .accordion-button::after { flex-shrink: 0; width: 1.25rem; height: 1.25rem; margin-left: auto; content: ""; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-size: 1.25rem; transition: transform 0.2s ease-in-out; } @media (prefers-reduced-motion: reduce) { .accordion-button::after { transition: none; } } .accordion-button:hover { z-index: 2; } .accordion-button:focus { z-index: 3; border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .accordion-header { margin-bottom: 0; } .accordion-item:first-of-type .accordion-button { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .accordion-item:last-of-type .accordion-button.collapsed { border-bottom-width: 1px; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .accordion-item:last-of-type .accordion-collapse { border-bottom-width: 1px; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .accordion-collapse { border: solid rgba(0, 0, 0, 0.125); border-width: 0 1px; } .accordion-body { padding: 1rem 1.25rem; } .accordion-flush .accordion-button { border-right: 0; border-left: 0; border-radius: 0; } .accordion-flush .accordion-collapse { border-width: 0; } .accordion-flush .accordion-item:first-of-type .accordion-button { border-top-width: 0; border-top-left-radius: 0; border-top-right-radius: 0; } .accordion-flush .accordion-item:last-of-type .accordion-button.collapsed { border-bottom-width: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .breadcrumb { display: flex; flex-wrap: wrap; padding: 0 0; margin-bottom: 1rem; list-style: none; } .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { float: left; padding-right: 0.5rem; color: #6c757d; content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } .breadcrumb-item.active { color: #6c757d; } .pagination { display: flex; padding-left: 0; list-style: none; } .page-link { position: relative; display: block; color: #0d6efd; text-decoration: none; background-color: #fff; border: 1px solid #dee2e6; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .page-link { transition: none; } } .page-link:hover { z-index: 2; color: #0a58ca; background-color: #e9ecef; border-color: #dee2e6; } .page-link:focus { z-index: 3; color: #0a58ca; background-color: #e9ecef; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .page-item:not(:first-child) .page-link { margin-left: -1px; } .page-item.active .page-link { z-index: 3; color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .page-item.disabled .page-link { color: #6c757d; pointer-events: none; background-color: #fff; border-color: #dee2e6; } .page-link { padding: 0.375rem 0.75rem; } .page-item:first-child .page-link { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .page-item:last-child .page-link { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.25rem; } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.875rem; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .badge { display: inline-block; padding: 0.35em 0.65em; font-size: 0.75em; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.25rem; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .alert { position: relative; padding: 1rem 1rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 3rem; } .alert-dismissible .btn-close { position: absolute; top: 0; right: 0; z-index: 2; padding: 1.25rem 1rem; } .alert-primary { color: #084298; background-color: #cfe2ff; border-color: #b6d4fe; } .alert-primary .alert-link { color: #06357a; } .alert-secondary { color: #41464b; background-color: #e2e3e5; border-color: #d3d6d8; } .alert-secondary .alert-link { color: #34383c; } .alert-success { color: #0f5132; background-color: #d1e7dd; border-color: #badbcc; } .alert-success .alert-link { color: #0c4128; } .alert-info { color: #055160; background-color: #cff4fc; border-color: #b6effb; } .alert-info .alert-link { color: #04414d; } .alert-warning { color: #664d03; background-color: #fff3cd; border-color: #ffecb5; } .alert-warning .alert-link { color: #523e02; } .alert-danger { color: #842029; background-color: #f8d7da; border-color: #f5c2c7; } .alert-danger .alert-link { color: #6a1a21; } .alert-light { color: #636464; background-color: #fefefe; border-color: #fdfdfe; } .alert-light .alert-link { color: #4f5050; } .alert-dark { color: #141619; background-color: #d3d3d4; border-color: #bcbebf; } .alert-dark .alert-link { color: #101214; } @-webkit-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } .progress { display: flex; height: 1rem; overflow: hidden; font-size: 0.75rem; background-color: #e9ecef; border-radius: 0.25rem; } .progress-bar { display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: #fff; text-align: center; white-space: nowrap; background-color: #0d6efd; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { -webkit-animation: 1s linear infinite progress-bar-stripes; animation: 1s linear infinite progress-bar-stripes; } @media (prefers-reduced-motion: reduce) { .progress-bar-animated { -webkit-animation: none; animation: none; } } .list-group { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; border-radius: 0.25rem; } .list-group-item-action { width: 100%; color: #495057; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { z-index: 1; color: #495057; text-decoration: none; background-color: #f8f9fa; } .list-group-item-action:active { color: #212529; background-color: #e9ecef; } .list-group-item { position: relative; display: block; padding: 0.5rem 1rem; text-decoration: none; background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.125); } .list-group-item:first-child { border-top-left-radius: inherit; border-top-right-radius: inherit; } .list-group-item:last-child { border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; } .list-group-item.disabled, .list-group-item:disabled { color: #6c757d; pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .list-group-item + .list-group-item { border-top-width: 0; } .list-group-item + .list-group-item.active { margin-top: -1px; border-top-width: 1px; } .list-group-horizontal { flex-direction: row; } .list-group-horizontal > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal > .list-group-item.active { margin-top: 0; } .list-group-horizontal > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } @media (min-width: 576px) { .list-group-horizontal-sm { flex-direction: row; } .list-group-horizontal-sm > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-sm > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-sm > .list-group-item.active { margin-top: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 768px) { .list-group-horizontal-md { flex-direction: row; } .list-group-horizontal-md > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-md > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-md > .list-group-item.active { margin-top: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 992px) { .list-group-horizontal-lg { flex-direction: row; } .list-group-horizontal-lg > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-lg > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-lg > .list-group-item.active { margin-top: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 1200px) { .list-group-horizontal-xl { flex-direction: row; } .list-group-horizontal-xl > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xl > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-xl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 1400px) { .list-group-horizontal-xxl { flex-direction: row; } .list-group-horizontal-xxl > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xxl > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-xxl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xxl > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } .list-group-flush { border-radius: 0; } .list-group-flush > .list-group-item { border-width: 0 0 1px; } .list-group-flush > .list-group-item:last-child { border-bottom-width: 0; } .list-group-item-primary { color: #084298; background-color: #cfe2ff; } .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #084298; background-color: #bacbe6; } .list-group-item-primary.list-group-item-action.active { color: #fff; background-color: #084298; border-color: #084298; } .list-group-item-secondary { color: #41464b; background-color: #e2e3e5; } .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #41464b; background-color: #cbccce; } .list-group-item-secondary.list-group-item-action.active { color: #fff; background-color: #41464b; border-color: #41464b; } .list-group-item-success { color: #0f5132; background-color: #d1e7dd; } .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #0f5132; background-color: #bcd0c7; } .list-group-item-success.list-group-item-action.active { color: #fff; background-color: #0f5132; border-color: #0f5132; } .list-group-item-info { color: #055160; background-color: #cff4fc; } .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #055160; background-color: #badce3; } .list-group-item-info.list-group-item-action.active { color: #fff; background-color: #055160; border-color: #055160; } .list-group-item-warning { color: #664d03; background-color: #fff3cd; } .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #664d03; background-color: #e6dbb9; } .list-group-item-warning.list-group-item-action.active { color: #fff; background-color: #664d03; border-color: #664d03; } .list-group-item-danger { color: #842029; background-color: #f8d7da; } .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #842029; background-color: #dfc2c4; } .list-group-item-danger.list-group-item-action.active { color: #fff; background-color: #842029; border-color: #842029; } .list-group-item-light { color: #636464; background-color: #fefefe; } .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #636464; background-color: #e5e5e5; } .list-group-item-light.list-group-item-action.active { color: #fff; background-color: #636464; border-color: #636464; } .list-group-item-dark { color: #141619; background-color: #d3d3d4; } .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #141619; background-color: #bebebf; } .list-group-item-dark.list-group-item-action.active { color: #fff; background-color: #141619; border-color: #141619; } .btn-close { box-sizing: content-box; width: 1em; height: 1em; padding: 0.25em 0.25em; color: #000; background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; border: 0; border-radius: 0.25rem; opacity: 0.5; } .btn-close:hover { color: #000; text-decoration: none; opacity: 0.75; } .btn-close:focus { outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); opacity: 1; } .btn-close:disabled, .btn-close.disabled { pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; opacity: 0.25; } .btn-close-white { filter: invert(1) grayscale(100%) brightness(200%); } .toast { width: 350px; max-width: 100%; font-size: 0.875rem; pointer-events: auto; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .toast:not(.showing):not(.show) { opacity: 0; } .toast.hide { display: none; } .toast-container { width: -webkit-max-content; width: -moz-max-content; width: max-content; max-width: 100%; pointer-events: none; } .toast-container > :not(:last-child) { margin-bottom: 0.75rem; } .toast-header { display: flex; align-items: center; padding: 0.5rem 0.75rem; color: #6c757d; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border-bottom: 1px solid rgba(0, 0, 0, 0.05); border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .toast-header .btn-close { margin-right: -0.375rem; margin-left: 0.75rem; } .toast-body { padding: 0.75rem; word-wrap: break-word; } .modal-open { overflow: hidden; } .modal-open .modal { overflow-x: hidden; overflow-y: auto; } .modal { position: fixed; top: 0; left: 0; z-index: 1050; display: none; width: 100%; height: 100%; overflow: hidden; outline: 0; } .modal-dialog { position: relative; width: auto; margin: 0.5rem; pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; transform: translate(0, -50px); } @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { transform: none; } .modal.modal-static .modal-dialog { transform: scale(1.02); } .modal-dialog-scrollable { height: calc(100% - 1rem); } .modal-dialog-scrollable .modal-content { max-height: 100%; overflow: hidden; } .modal-dialog-scrollable .modal-body { overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; min-height: calc(100% - 1rem); } .modal-content { position: relative; display: flex; flex-direction: column; width: 100%; pointer-events: auto; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-backdrop { position: fixed; top: 0; left: 0; z-index: 1040; width: 100vw; height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop.show { opacity: 0.5; } .modal-header { display: flex; flex-shrink: 0; align-items: center; justify-content: space-between; padding: 1rem 1rem; border-bottom: 1px solid #dee2e6; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .modal-header .btn-close { padding: 0.5rem 0.5rem; margin: -0.5rem -0.5rem -0.5rem auto; } .modal-title { margin-bottom: 0; line-height: 1.5; } .modal-body { position: relative; flex: 1 1 auto; padding: 1rem; } .modal-footer { display: flex; flex-wrap: wrap; flex-shrink: 0; align-items: center; justify-content: flex-end; padding: 0.75rem; border-top: 1px solid #dee2e6; border-bottom-right-radius: calc(0.3rem - 1px); border-bottom-left-radius: calc(0.3rem - 1px); } .modal-footer > * { margin: 0.25rem; } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } .modal-dialog-scrollable { height: calc(100% - 3.5rem); } .modal-dialog-centered { min-height: calc(100% - 3.5rem); } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { .modal-lg, .modal-xl { max-width: 800px; } } @media (min-width: 1200px) { .modal-xl { max-width: 1140px; } } .modal-fullscreen { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen .modal-header { border-radius: 0; } .modal-fullscreen .modal-body { overflow-y: auto; } .modal-fullscreen .modal-footer { border-radius: 0; } @media (max-width: 575.98px) { .modal-fullscreen-sm-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-sm-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-sm-down .modal-header { border-radius: 0; } .modal-fullscreen-sm-down .modal-body { overflow-y: auto; } .modal-fullscreen-sm-down .modal-footer { border-radius: 0; } } @media (max-width: 767.98px) { .modal-fullscreen-md-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-md-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-md-down .modal-header { border-radius: 0; } .modal-fullscreen-md-down .modal-body { overflow-y: auto; } .modal-fullscreen-md-down .modal-footer { border-radius: 0; } } @media (max-width: 991.98px) { .modal-fullscreen-lg-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-lg-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-lg-down .modal-header { border-radius: 0; } .modal-fullscreen-lg-down .modal-body { overflow-y: auto; } .modal-fullscreen-lg-down .modal-footer { border-radius: 0; } } @media (max-width: 1199.98px) { .modal-fullscreen-xl-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-xl-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-xl-down .modal-header { border-radius: 0; } .modal-fullscreen-xl-down .modal-body { overflow-y: auto; } .modal-fullscreen-xl-down .modal-footer { border-radius: 0; } } @media (max-width: 1399.98px) { .modal-fullscreen-xxl-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-xxl-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-xxl-down .modal-header { border-radius: 0; } .modal-fullscreen-xxl-down .modal-body { overflow-y: auto; } .modal-fullscreen-xxl-down .modal-footer { border-radius: 0; } } .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; font-family: var(--bs-font-sans-serif); font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; opacity: 0; } .tooltip.show { opacity: 0.9; } .tooltip .tooltip-arrow { position: absolute; display: block; width: 0.8rem; height: 0.4rem; } .tooltip .tooltip-arrow::before { position: absolute; content: ""; border-color: transparent; border-style: solid; } .bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] { padding: 0.4rem 0; } .bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { bottom: 0; } .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { top: -1px; border-width: 0.4rem 0.4rem 0; border-top-color: #000; } .bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] { padding: 0 0.4rem; } .bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { left: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { right: -1px; border-width: 0.4rem 0.4rem 0.4rem 0; border-right-color: #000; } .bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] { padding: 0.4rem 0; } .bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { top: 0; } .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { bottom: -1px; border-width: 0 0.4rem 0.4rem; border-bottom-color: #000; } .bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] { padding: 0 0.4rem; } .bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { right: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { left: -1px; border-width: 0.4rem 0 0.4rem 0.4rem; border-left-color: #000; } .tooltip-inner { max-width: 200px; padding: 0.25rem 0.5rem; color: #fff; text-align: center; background-color: #000; border-radius: 0.25rem; } .popover { position: absolute; top: 0; left: 0 /* rtl:ignore */; z-index: 1060; display: block; max-width: 276px; font-family: var(--bs-font-sans-serif); font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; } .popover .popover-arrow { position: absolute; display: block; width: 1rem; height: 0.5rem; } .popover .popover-arrow::before, .popover .popover-arrow::after { position: absolute; display: block; content: ""; border-color: transparent; border-style: solid; } .bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { bottom: calc(-0.5rem - 1px); } .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { bottom: 0; border-width: 0.5rem 0.5rem 0; border-top-color: rgba(0, 0, 0, 0.25); } .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { bottom: 1px; border-width: 0.5rem 0.5rem 0; border-top-color: #fff; } .bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { left: calc(-0.5rem - 1px); width: 0.5rem; height: 1rem; } .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { left: 0; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: rgba(0, 0, 0, 0.25); } .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { left: 1px; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: #fff; } .bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { top: calc(-0.5rem - 1px); } .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { top: 0; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: rgba(0, 0, 0, 0.25); } .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { top: 1px; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: 1rem; margin-left: -0.5rem; content: ""; border-bottom: 1px solid #f0f0f0; } .bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { right: calc(-0.5rem - 1px); width: 0.5rem; height: 1rem; } .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { right: 0; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: rgba(0, 0, 0, 0.25); } .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { right: 1px; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: #fff; } .popover-header { padding: 0.5rem 1rem; margin-bottom: 0; font-size: 1rem; background-color: #f0f0f0; border-bottom: 1px solid #d8d8d8; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .popover-header:empty { display: none; } .popover-body { padding: 1rem 1rem; color: #212529; } .carousel { position: relative; } .carousel.pointer-event { touch-action: pan-y; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner::after { display: block; clear: both; content: ""; } .carousel-item { position: relative; display: none; float: left; width: 100%; margin-right: -100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; transition: transform 0.6s ease-in-out; } @media (prefers-reduced-motion: reduce) { .carousel-item { transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { display: block; } /* rtl:begin:ignore */ .carousel-item-next:not(.carousel-item-start), .active.carousel-item-end { transform: translateX(100%); } .carousel-item-prev:not(.carousel-item-end), .active.carousel-item-start { transform: translateX(-100%); } /* rtl:end:ignore */ .carousel-fade .carousel-item { opacity: 0; transition-property: opacity; transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-start, .carousel-fade .carousel-item-prev.carousel-item-end { z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-start, .carousel-fade .active.carousel-item-end { z-index: 0; opacity: 0; transition: opacity 0s 0.6s; } @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-start, .carousel-fade .active.carousel-item-end { transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; padding: 0; color: #fff; text-align: center; background: none; border: 0; opacity: 0.5; transition: opacity 0.15s ease; } @media (prefers-reduced-motion: reduce) { .carousel-control-prev, .carousel-control-next { transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; opacity: 0.9; } .carousel-control-prev { left: 0; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 2rem; height: 2rem; background-repeat: no-repeat; background-position: 50%; background-size: 100% 100%; } /* rtl:options: { "autoRename": true, "stringMap":[ { "name" : "prev-next", "search" : "prev", "replace" : "next" } ] } */ .carousel-control-prev-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; bottom: 0; left: 0; z-index: 2; display: flex; justify-content: center; padding: 0; margin-right: 15%; margin-bottom: 1rem; margin-left: 15%; list-style: none; } .carousel-indicators [data-bs-target] { box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; padding: 0; margin-right: 3px; margin-left: 3px; text-indent: -999px; cursor: pointer; background-color: #fff; background-clip: padding-box; border: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; opacity: 0.5; transition: opacity 0.6s ease; } @media (prefers-reduced-motion: reduce) { .carousel-indicators [data-bs-target] { transition: none; } } .carousel-indicators .active { opacity: 1; } .carousel-caption { position: absolute; right: 15%; bottom: 1.25rem; left: 15%; padding-top: 1.25rem; padding-bottom: 1.25rem; color: #fff; text-align: center; } .carousel-dark .carousel-control-prev-icon, .carousel-dark .carousel-control-next-icon { filter: invert(1) grayscale(100); } .carousel-dark .carousel-indicators [data-bs-target] { background-color: #000; } .carousel-dark .carousel-caption { color: #000; } @-webkit-keyframes spinner-border { to { transform: rotate(360deg) /* rtl:ignore */; } } @keyframes spinner-border { to { transform: rotate(360deg) /* rtl:ignore */; } } .spinner-border { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; -webkit-animation: 0.75s linear infinite spinner-border; animation: 0.75s linear infinite spinner-border; } .spinner-border-sm { width: 1rem; height: 1rem; border-width: 0.2em; } @-webkit-keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } @keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } .spinner-grow { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; background-color: currentColor; border-radius: 50%; opacity: 0; -webkit-animation: 0.75s linear infinite spinner-grow; animation: 0.75s linear infinite spinner-grow; } .spinner-grow-sm { width: 1rem; height: 1rem; } @media (prefers-reduced-motion: reduce) { .spinner-border, .spinner-grow { -webkit-animation-duration: 1.5s; animation-duration: 1.5s; } } .clearfix::after { display: block; clear: both; content: ""; } .link-primary { color: #0d6efd; } .link-primary:hover, .link-primary:focus { color: #0a58ca; } .link-secondary { color: #6c757d; } .link-secondary:hover, .link-secondary:focus { color: #565e64; } .link-success { color: #198754; } .link-success:hover, .link-success:focus { color: #146c43; } .link-info { color: #0dcaf0; } .link-info:hover, .link-info:focus { color: #3dd5f3; } .link-warning { color: #ffc107; } .link-warning:hover, .link-warning:focus { color: #ffcd39; } .link-danger { color: #dc3545; } .link-danger:hover, .link-danger:focus { color: #b02a37; } .link-light { color: #f8f9fa; } .link-light:hover, .link-light:focus { color: #f9fafb; } .link-dark { color: #212529; } .link-dark:hover, .link-dark:focus { color: #1a1e21; } .ratio { position: relative; width: 100%; } .ratio::before { display: block; padding-top: var(--bs-aspect-ratio); content: ""; } .ratio > * { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .ratio-1x1 { --bs-aspect-ratio: 100%; } .ratio-4x3 { --bs-aspect-ratio: calc(3 / 4 * 100%); } .ratio-16x9 { --bs-aspect-ratio: calc(9 / 16 * 100%); } .ratio-21x9 { --bs-aspect-ratio: calc(9 / 21 * 100%); } .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: 1030; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: 1030; } .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } @media (min-width: 576px) { .sticky-sm-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 768px) { .sticky-md-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 992px) { .sticky-lg-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 1200px) { .sticky-xl-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 1400px) { .sticky-xxl-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } .visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } .stretched-link::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; content: ""; } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .align-baseline { vertical-align: baseline !important; } .align-top { vertical-align: top !important; } .align-middle { vertical-align: middle !important; } .align-bottom { vertical-align: bottom !important; } .align-text-bottom { vertical-align: text-bottom !important; } .align-text-top { vertical-align: text-top !important; } .float-start { float: left !important; } .float-end { float: right !important; } .float-none { float: none !important; } .overflow-auto { overflow: auto !important; } .overflow-hidden { overflow: hidden !important; } .overflow-visible { overflow: visible !important; } .overflow-scroll { overflow: scroll !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-grid { display: grid !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: flex !important; } .d-inline-flex { display: inline-flex !important; } .d-none { display: none !important; } .shadow { box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; } .shadow-sm { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } .shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; } .shadow-none { box-shadow: none !important; } .position-static { position: static !important; } .position-relative { position: relative !important; } .position-absolute { position: absolute !important; } .position-fixed { position: fixed !important; } .position-sticky { position: -webkit-sticky !important; position: sticky !important; } .top-0 { top: 0 !important; } .top-50 { top: 50% !important; } .top-100 { top: 100% !important; } .bottom-0 { bottom: 0 !important; } .bottom-50 { bottom: 50% !important; } .bottom-100 { bottom: 100% !important; } .start-0 { left: 0 !important; } .start-50 { left: 50% !important; } .start-100 { left: 100% !important; } .end-0 { right: 0 !important; } .end-50 { right: 50% !important; } .end-100 { right: 100% !important; } .translate-middle { transform: translate(-50%, -50%) !important; } .translate-middle-x { transform: translateX(-50%) !important; } .translate-middle-y { transform: translateY(-50%) !important; } .border { border: 1px solid #dee2e6 !important; } .border-0 { border: 0 !important; } .border-top { border-top: 1px solid #dee2e6 !important; } .border-top-0 { border-top: 0 !important; } .border-end { border-right: 1px solid #dee2e6 !important; } .border-end-0 { border-right: 0 !important; } .border-bottom { border-bottom: 1px solid #dee2e6 !important; } .border-bottom-0 { border-bottom: 0 !important; } .border-start { border-left: 1px solid #dee2e6 !important; } .border-start-0 { border-left: 0 !important; } .border-primary { border-color: #0d6efd !important; } .border-secondary { border-color: #6c757d !important; } .border-success { border-color: #198754 !important; } .border-info { border-color: #0dcaf0 !important; } .border-warning { border-color: #ffc107 !important; } .border-danger { border-color: #dc3545 !important; } .border-light { border-color: #f8f9fa !important; } .border-dark { border-color: #212529 !important; } .border-white { border-color: #fff !important; } .border-0 { border-width: 0 !important; } .border-1 { border-width: 1px !important; } .border-2 { border-width: 2px !important; } .border-3 { border-width: 3px !important; } .border-4 { border-width: 4px !important; } .border-5 { border-width: 5px !important; } .w-25 { width: 25% !important; } .w-50 { width: 50% !important; } .w-75 { width: 75% !important; } .w-100 { width: 100% !important; } .w-auto { width: auto !important; } .mw-100 { max-width: 100% !important; } .vw-100 { width: 100vw !important; } .min-vw-100 { min-width: 100vw !important; } .h-25 { height: 25% !important; } .h-50 { height: 50% !important; } .h-75 { height: 75% !important; } .h-100 { height: 100% !important; } .h-auto { height: auto !important; } .mh-100 { max-height: 100% !important; } .vh-100 { height: 100vh !important; } .min-vh-100 { min-height: 100vh !important; } .flex-fill { flex: 1 1 auto !important; } .flex-row { flex-direction: row !important; } .flex-column { flex-direction: column !important; } .flex-row-reverse { flex-direction: row-reverse !important; } .flex-column-reverse { flex-direction: column-reverse !important; } .flex-grow-0 { flex-grow: 0 !important; } .flex-grow-1 { flex-grow: 1 !important; } .flex-shrink-0 { flex-shrink: 0 !important; } .flex-shrink-1 { flex-shrink: 1 !important; } .flex-wrap { flex-wrap: wrap !important; } .flex-nowrap { flex-wrap: nowrap !important; } .flex-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-0 { gap: 0 !important; } .gap-1 { gap: 0.25rem !important; } .gap-2 { gap: 0.5rem !important; } .gap-3 { gap: 1rem !important; } .gap-4 { gap: 1.5rem !important; } .gap-5 { gap: 3rem !important; } .justify-content-start { justify-content: flex-start !important; } .justify-content-end { justify-content: flex-end !important; } .justify-content-center { justify-content: center !important; } .justify-content-between { justify-content: space-between !important; } .justify-content-around { justify-content: space-around !important; } .justify-content-evenly { justify-content: space-evenly !important; } .align-items-start { align-items: flex-start !important; } .align-items-end { align-items: flex-end !important; } .align-items-center { align-items: center !important; } .align-items-baseline { align-items: baseline !important; } .align-items-stretch { align-items: stretch !important; } .align-content-start { align-content: flex-start !important; } .align-content-end { align-content: flex-end !important; } .align-content-center { align-content: center !important; } .align-content-between { align-content: space-between !important; } .align-content-around { align-content: space-around !important; } .align-content-stretch { align-content: stretch !important; } .align-self-auto { align-self: auto !important; } .align-self-start { align-self: flex-start !important; } .align-self-end { align-self: flex-end !important; } .align-self-center { align-self: center !important; } .align-self-baseline { align-self: baseline !important; } .align-self-stretch { align-self: stretch !important; } .order-first { order: -1 !important; } .order-0 { order: 0 !important; } .order-1 { order: 1 !important; } .order-2 { order: 2 !important; } .order-3 { order: 3 !important; } .order-4 { order: 4 !important; } .order-5 { order: 5 !important; } .order-last { order: 6 !important; } .m-0 { margin: 0 !important; } .m-1 { margin: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .m-3 { margin: 1rem !important; } .m-4 { margin: 1.5rem !important; } .m-5 { margin: 3rem !important; } .m-auto { margin: auto !important; } .mx-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-auto { margin-right: auto !important; margin-left: auto !important; } .my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-0 { margin-top: 0 !important; } .mt-1 { margin-top: 0.25rem !important; } .mt-2 { margin-top: 0.5rem !important; } .mt-3 { margin-top: 1rem !important; } .mt-4 { margin-top: 1.5rem !important; } .mt-5 { margin-top: 3rem !important; } .mt-auto { margin-top: auto !important; } .me-0 { margin-right: 0 !important; } .me-1 { margin-right: 0.25rem !important; } .me-2 { margin-right: 0.5rem !important; } .me-3 { margin-right: 1rem !important; } .me-4 { margin-right: 1.5rem !important; } .me-5 { margin-right: 3rem !important; } .me-auto { margin-right: auto !important; } .mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: 0.25rem !important; } .mb-2 { margin-bottom: 0.5rem !important; } .mb-3 { margin-bottom: 1rem !important; } .mb-4 { margin-bottom: 1.5rem !important; } .mb-5 { margin-bottom: 3rem !important; } .mb-auto { margin-bottom: auto !important; } .ms-0 { margin-left: 0 !important; } .ms-1 { margin-left: 0.25rem !important; } .ms-2 { margin-left: 0.5rem !important; } .ms-3 { margin-left: 1rem !important; } .ms-4 { margin-left: 1.5rem !important; } .ms-5 { margin-left: 3rem !important; } .ms-auto { margin-left: auto !important; } .p-0 { padding: 0 !important; } .p-1 { padding: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .p-3 { padding: 1rem !important; } .p-4 { padding: 1.5rem !important; } .p-5 { padding: 3rem !important; } .px-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-0 { padding-top: 0 !important; } .pt-1 { padding-top: 0.25rem !important; } .pt-2 { padding-top: 0.5rem !important; } .pt-3 { padding-top: 1rem !important; } .pt-4 { padding-top: 1.5rem !important; } .pt-5 { padding-top: 3rem !important; } .pe-0 { padding-right: 0 !important; } .pe-1 { padding-right: 0.25rem !important; } .pe-2 { padding-right: 0.5rem !important; } .pe-3 { padding-right: 1rem !important; } .pe-4 { padding-right: 1.5rem !important; } .pe-5 { padding-right: 3rem !important; } .pb-0 { padding-bottom: 0 !important; } .pb-1 { padding-bottom: 0.25rem !important; } .pb-2 { padding-bottom: 0.5rem !important; } .pb-3 { padding-bottom: 1rem !important; } .pb-4 { padding-bottom: 1.5rem !important; } .pb-5 { padding-bottom: 3rem !important; } .ps-0 { padding-left: 0 !important; } .ps-1 { padding-left: 0.25rem !important; } .ps-2 { padding-left: 0.5rem !important; } .ps-3 { padding-left: 1rem !important; } .ps-4 { padding-left: 1.5rem !important; } .ps-5 { padding-left: 3rem !important; } .fs-1 { font-size: calc(1.375rem + 1.5vw) !important; } .fs-2 { font-size: calc(1.325rem + 0.9vw) !important; } .fs-3 { font-size: calc(1.3rem + 0.6vw) !important; } .fs-4 { font-size: calc(1.275rem + 0.3vw) !important; } .fs-5 { font-size: 1.25rem !important; } .fs-6 { font-size: 1rem !important; } .fst-italic { font-style: italic !important; } .fst-normal { font-style: normal !important; } .fw-light { font-weight: 300 !important; } .fw-lighter { font-weight: lighter !important; } .fw-normal { font-weight: 400 !important; } .fw-bold { font-weight: 700 !important; } .fw-bolder { font-weight: bolder !important; } .text-lowercase { text-transform: lowercase !important; } .text-uppercase { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } .text-start { text-align: left !important; } .text-end { text-align: right !important; } .text-center { text-align: center !important; } .text-primary { color: #0d6efd !important; } .text-secondary { color: #6c757d !important; } .text-success { color: #198754 !important; } .text-info { color: #0dcaf0 !important; } .text-warning { color: #ffc107 !important; } .text-danger { color: #dc3545 !important; } .text-light { color: #f8f9fa !important; } .text-dark { color: #212529 !important; } .text-white { color: #fff !important; } .text-body { color: #212529 !important; } .text-muted { color: #6c757d !important; } .text-black-50 { color: rgba(0, 0, 0, 0.5) !important; } .text-white-50 { color: rgba(255, 255, 255, 0.5) !important; } .text-reset { color: inherit !important; } .lh-1 { line-height: 1 !important; } .lh-sm { line-height: 1.25 !important; } .lh-base { line-height: 1.5 !important; } .lh-lg { line-height: 2 !important; } .bg-primary { background-color: #0d6efd !important; } .bg-secondary { background-color: #6c757d !important; } .bg-success { background-color: #198754 !important; } .bg-info { background-color: #0dcaf0 !important; } .bg-warning { background-color: #ffc107 !important; } .bg-danger { background-color: #dc3545 !important; } .bg-light { background-color: #f8f9fa !important; } .bg-dark { background-color: #212529 !important; } .bg-body { background-color: #fff !important; } .bg-white { background-color: #fff !important; } .bg-transparent { background-color: transparent !important; } .bg-gradient { background-image: var(--bs-gradient) !important; } .text-wrap { white-space: normal !important; } .text-nowrap { white-space: nowrap !important; } .text-decoration-none { text-decoration: none !important; } .text-decoration-underline { text-decoration: underline !important; } .text-decoration-line-through { text-decoration: line-through !important; } /* rtl:begin:remove */ .text-break { word-wrap: break-word !important; word-break: break-word !important; } /* rtl:end:remove */ .font-monospace { font-family: var(--bs-font-monospace) !important; } .user-select-all { -webkit-user-select: all !important; -moz-user-select: all !important; user-select: all !important; } .user-select-auto { -webkit-user-select: auto !important; -moz-user-select: auto !important; user-select: auto !important; } .user-select-none { -webkit-user-select: none !important; -moz-user-select: none !important; user-select: none !important; } .pe-none { pointer-events: none !important; } .pe-auto { pointer-events: auto !important; } .rounded { border-radius: 0.25rem !important; } .rounded-0 { border-radius: 0 !important; } .rounded-1 { border-radius: 0.2rem !important; } .rounded-2 { border-radius: 0.25rem !important; } .rounded-3 { border-radius: 0.3rem !important; } .rounded-circle { border-radius: 50% !important; } .rounded-pill { border-radius: 50rem !important; } .rounded-top { border-top-left-radius: 0.25rem !important; border-top-right-radius: 0.25rem !important; } .rounded-end { border-top-right-radius: 0.25rem !important; border-bottom-right-radius: 0.25rem !important; } .rounded-bottom { border-bottom-right-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-start { border-bottom-left-radius: 0.25rem !important; border-top-left-radius: 0.25rem !important; } .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } @media (min-width: 576px) { .float-sm-start { float: left !important; } .float-sm-end { float: right !important; } .float-sm-none { float: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-grid { display: grid !important; } .d-sm-table { display: table !important; } .d-sm-table-row { display: table-row !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: flex !important; } .d-sm-inline-flex { display: inline-flex !important; } .d-sm-none { display: none !important; } .flex-sm-fill { flex: 1 1 auto !important; } .flex-sm-row { flex-direction: row !important; } .flex-sm-column { flex-direction: column !important; } .flex-sm-row-reverse { flex-direction: row-reverse !important; } .flex-sm-column-reverse { flex-direction: column-reverse !important; } .flex-sm-grow-0 { flex-grow: 0 !important; } .flex-sm-grow-1 { flex-grow: 1 !important; } .flex-sm-shrink-0 { flex-shrink: 0 !important; } .flex-sm-shrink-1 { flex-shrink: 1 !important; } .flex-sm-wrap { flex-wrap: wrap !important; } .flex-sm-nowrap { flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-sm-0 { gap: 0 !important; } .gap-sm-1 { gap: 0.25rem !important; } .gap-sm-2 { gap: 0.5rem !important; } .gap-sm-3 { gap: 1rem !important; } .gap-sm-4 { gap: 1.5rem !important; } .gap-sm-5 { gap: 3rem !important; } .justify-content-sm-start { justify-content: flex-start !important; } .justify-content-sm-end { justify-content: flex-end !important; } .justify-content-sm-center { justify-content: center !important; } .justify-content-sm-between { justify-content: space-between !important; } .justify-content-sm-around { justify-content: space-around !important; } .justify-content-sm-evenly { justify-content: space-evenly !important; } .align-items-sm-start { align-items: flex-start !important; } .align-items-sm-end { align-items: flex-end !important; } .align-items-sm-center { align-items: center !important; } .align-items-sm-baseline { align-items: baseline !important; } .align-items-sm-stretch { align-items: stretch !important; } .align-content-sm-start { align-content: flex-start !important; } .align-content-sm-end { align-content: flex-end !important; } .align-content-sm-center { align-content: center !important; } .align-content-sm-between { align-content: space-between !important; } .align-content-sm-around { align-content: space-around !important; } .align-content-sm-stretch { align-content: stretch !important; } .align-self-sm-auto { align-self: auto !important; } .align-self-sm-start { align-self: flex-start !important; } .align-self-sm-end { align-self: flex-end !important; } .align-self-sm-center { align-self: center !important; } .align-self-sm-baseline { align-self: baseline !important; } .align-self-sm-stretch { align-self: stretch !important; } .order-sm-first { order: -1 !important; } .order-sm-0 { order: 0 !important; } .order-sm-1 { order: 1 !important; } .order-sm-2 { order: 2 !important; } .order-sm-3 { order: 3 !important; } .order-sm-4 { order: 4 !important; } .order-sm-5 { order: 5 !important; } .order-sm-last { order: 6 !important; } .m-sm-0 { margin: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .m-sm-auto { margin: auto !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-sm-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-sm-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-sm-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-sm-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-sm-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-sm-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-sm-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-sm-0 { margin-top: 0 !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mt-sm-3 { margin-top: 1rem !important; } .mt-sm-4 { margin-top: 1.5rem !important; } .mt-sm-5 { margin-top: 3rem !important; } .mt-sm-auto { margin-top: auto !important; } .me-sm-0 { margin-right: 0 !important; } .me-sm-1 { margin-right: 0.25rem !important; } .me-sm-2 { margin-right: 0.5rem !important; } .me-sm-3 { margin-right: 1rem !important; } .me-sm-4 { margin-right: 1.5rem !important; } .me-sm-5 { margin-right: 3rem !important; } .me-sm-auto { margin-right: auto !important; } .mb-sm-0 { margin-bottom: 0 !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .mb-sm-3 { margin-bottom: 1rem !important; } .mb-sm-4 { margin-bottom: 1.5rem !important; } .mb-sm-5 { margin-bottom: 3rem !important; } .mb-sm-auto { margin-bottom: auto !important; } .ms-sm-0 { margin-left: 0 !important; } .ms-sm-1 { margin-left: 0.25rem !important; } .ms-sm-2 { margin-left: 0.5rem !important; } .ms-sm-3 { margin-left: 1rem !important; } .ms-sm-4 { margin-left: 1.5rem !important; } .ms-sm-5 { margin-left: 3rem !important; } .ms-sm-auto { margin-left: auto !important; } .p-sm-0 { padding: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-sm-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-sm-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-sm-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-sm-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-sm-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-sm-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-sm-0 { padding-top: 0 !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pt-sm-3 { padding-top: 1rem !important; } .pt-sm-4 { padding-top: 1.5rem !important; } .pt-sm-5 { padding-top: 3rem !important; } .pe-sm-0 { padding-right: 0 !important; } .pe-sm-1 { padding-right: 0.25rem !important; } .pe-sm-2 { padding-right: 0.5rem !important; } .pe-sm-3 { padding-right: 1rem !important; } .pe-sm-4 { padding-right: 1.5rem !important; } .pe-sm-5 { padding-right: 3rem !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pb-sm-3 { padding-bottom: 1rem !important; } .pb-sm-4 { padding-bottom: 1.5rem !important; } .pb-sm-5 { padding-bottom: 3rem !important; } .ps-sm-0 { padding-left: 0 !important; } .ps-sm-1 { padding-left: 0.25rem !important; } .ps-sm-2 { padding-left: 0.5rem !important; } .ps-sm-3 { padding-left: 1rem !important; } .ps-sm-4 { padding-left: 1.5rem !important; } .ps-sm-5 { padding-left: 3rem !important; } .text-sm-start { text-align: left !important; } .text-sm-end { text-align: right !important; } .text-sm-center { text-align: center !important; } } @media (min-width: 768px) { .float-md-start { float: left !important; } .float-md-end { float: right !important; } .float-md-none { float: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-grid { display: grid !important; } .d-md-table { display: table !important; } .d-md-table-row { display: table-row !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: flex !important; } .d-md-inline-flex { display: inline-flex !important; } .d-md-none { display: none !important; } .flex-md-fill { flex: 1 1 auto !important; } .flex-md-row { flex-direction: row !important; } .flex-md-column { flex-direction: column !important; } .flex-md-row-reverse { flex-direction: row-reverse !important; } .flex-md-column-reverse { flex-direction: column-reverse !important; } .flex-md-grow-0 { flex-grow: 0 !important; } .flex-md-grow-1 { flex-grow: 1 !important; } .flex-md-shrink-0 { flex-shrink: 0 !important; } .flex-md-shrink-1 { flex-shrink: 1 !important; } .flex-md-wrap { flex-wrap: wrap !important; } .flex-md-nowrap { flex-wrap: nowrap !important; } .flex-md-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-md-0 { gap: 0 !important; } .gap-md-1 { gap: 0.25rem !important; } .gap-md-2 { gap: 0.5rem !important; } .gap-md-3 { gap: 1rem !important; } .gap-md-4 { gap: 1.5rem !important; } .gap-md-5 { gap: 3rem !important; } .justify-content-md-start { justify-content: flex-start !important; } .justify-content-md-end { justify-content: flex-end !important; } .justify-content-md-center { justify-content: center !important; } .justify-content-md-between { justify-content: space-between !important; } .justify-content-md-around { justify-content: space-around !important; } .justify-content-md-evenly { justify-content: space-evenly !important; } .align-items-md-start { align-items: flex-start !important; } .align-items-md-end { align-items: flex-end !important; } .align-items-md-center { align-items: center !important; } .align-items-md-baseline { align-items: baseline !important; } .align-items-md-stretch { align-items: stretch !important; } .align-content-md-start { align-content: flex-start !important; } .align-content-md-end { align-content: flex-end !important; } .align-content-md-center { align-content: center !important; } .align-content-md-between { align-content: space-between !important; } .align-content-md-around { align-content: space-around !important; } .align-content-md-stretch { align-content: stretch !important; } .align-self-md-auto { align-self: auto !important; } .align-self-md-start { align-self: flex-start !important; } .align-self-md-end { align-self: flex-end !important; } .align-self-md-center { align-self: center !important; } .align-self-md-baseline { align-self: baseline !important; } .align-self-md-stretch { align-self: stretch !important; } .order-md-first { order: -1 !important; } .order-md-0 { order: 0 !important; } .order-md-1 { order: 1 !important; } .order-md-2 { order: 2 !important; } .order-md-3 { order: 3 !important; } .order-md-4 { order: 4 !important; } .order-md-5 { order: 5 !important; } .order-md-last { order: 6 !important; } .m-md-0 { margin: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .m-md-auto { margin: auto !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-md-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-md-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-md-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-md-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-md-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-md-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-md-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-md-0 { margin-top: 0 !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mt-md-3 { margin-top: 1rem !important; } .mt-md-4 { margin-top: 1.5rem !important; } .mt-md-5 { margin-top: 3rem !important; } .mt-md-auto { margin-top: auto !important; } .me-md-0 { margin-right: 0 !important; } .me-md-1 { margin-right: 0.25rem !important; } .me-md-2 { margin-right: 0.5rem !important; } .me-md-3 { margin-right: 1rem !important; } .me-md-4 { margin-right: 1.5rem !important; } .me-md-5 { margin-right: 3rem !important; } .me-md-auto { margin-right: auto !important; } .mb-md-0 { margin-bottom: 0 !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .mb-md-3 { margin-bottom: 1rem !important; } .mb-md-4 { margin-bottom: 1.5rem !important; } .mb-md-5 { margin-bottom: 3rem !important; } .mb-md-auto { margin-bottom: auto !important; } .ms-md-0 { margin-left: 0 !important; } .ms-md-1 { margin-left: 0.25rem !important; } .ms-md-2 { margin-left: 0.5rem !important; } .ms-md-3 { margin-left: 1rem !important; } .ms-md-4 { margin-left: 1.5rem !important; } .ms-md-5 { margin-left: 3rem !important; } .ms-md-auto { margin-left: auto !important; } .p-md-0 { padding: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-md-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-md-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-md-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-md-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-md-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-md-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-md-0 { padding-top: 0 !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pt-md-3 { padding-top: 1rem !important; } .pt-md-4 { padding-top: 1.5rem !important; } .pt-md-5 { padding-top: 3rem !important; } .pe-md-0 { padding-right: 0 !important; } .pe-md-1 { padding-right: 0.25rem !important; } .pe-md-2 { padding-right: 0.5rem !important; } .pe-md-3 { padding-right: 1rem !important; } .pe-md-4 { padding-right: 1.5rem !important; } .pe-md-5 { padding-right: 3rem !important; } .pb-md-0 { padding-bottom: 0 !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pb-md-3 { padding-bottom: 1rem !important; } .pb-md-4 { padding-bottom: 1.5rem !important; } .pb-md-5 { padding-bottom: 3rem !important; } .ps-md-0 { padding-left: 0 !important; } .ps-md-1 { padding-left: 0.25rem !important; } .ps-md-2 { padding-left: 0.5rem !important; } .ps-md-3 { padding-left: 1rem !important; } .ps-md-4 { padding-left: 1.5rem !important; } .ps-md-5 { padding-left: 3rem !important; } .text-md-start { text-align: left !important; } .text-md-end { text-align: right !important; } .text-md-center { text-align: center !important; } } @media (min-width: 992px) { .float-lg-start { float: left !important; } .float-lg-end { float: right !important; } .float-lg-none { float: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-grid { display: grid !important; } .d-lg-table { display: table !important; } .d-lg-table-row { display: table-row !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: flex !important; } .d-lg-inline-flex { display: inline-flex !important; } .d-lg-none { display: none !important; } .flex-lg-fill { flex: 1 1 auto !important; } .flex-lg-row { flex-direction: row !important; } .flex-lg-column { flex-direction: column !important; } .flex-lg-row-reverse { flex-direction: row-reverse !important; } .flex-lg-column-reverse { flex-direction: column-reverse !important; } .flex-lg-grow-0 { flex-grow: 0 !important; } .flex-lg-grow-1 { flex-grow: 1 !important; } .flex-lg-shrink-0 { flex-shrink: 0 !important; } .flex-lg-shrink-1 { flex-shrink: 1 !important; } .flex-lg-wrap { flex-wrap: wrap !important; } .flex-lg-nowrap { flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-lg-0 { gap: 0 !important; } .gap-lg-1 { gap: 0.25rem !important; } .gap-lg-2 { gap: 0.5rem !important; } .gap-lg-3 { gap: 1rem !important; } .gap-lg-4 { gap: 1.5rem !important; } .gap-lg-5 { gap: 3rem !important; } .justify-content-lg-start { justify-content: flex-start !important; } .justify-content-lg-end { justify-content: flex-end !important; } .justify-content-lg-center { justify-content: center !important; } .justify-content-lg-between { justify-content: space-between !important; } .justify-content-lg-around { justify-content: space-around !important; } .justify-content-lg-evenly { justify-content: space-evenly !important; } .align-items-lg-start { align-items: flex-start !important; } .align-items-lg-end { align-items: flex-end !important; } .align-items-lg-center { align-items: center !important; } .align-items-lg-baseline { align-items: baseline !important; } .align-items-lg-stretch { align-items: stretch !important; } .align-content-lg-start { align-content: flex-start !important; } .align-content-lg-end { align-content: flex-end !important; } .align-content-lg-center { align-content: center !important; } .align-content-lg-between { align-content: space-between !important; } .align-content-lg-around { align-content: space-around !important; } .align-content-lg-stretch { align-content: stretch !important; } .align-self-lg-auto { align-self: auto !important; } .align-self-lg-start { align-self: flex-start !important; } .align-self-lg-end { align-self: flex-end !important; } .align-self-lg-center { align-self: center !important; } .align-self-lg-baseline { align-self: baseline !important; } .align-self-lg-stretch { align-self: stretch !important; } .order-lg-first { order: -1 !important; } .order-lg-0 { order: 0 !important; } .order-lg-1 { order: 1 !important; } .order-lg-2 { order: 2 !important; } .order-lg-3 { order: 3 !important; } .order-lg-4 { order: 4 !important; } .order-lg-5 { order: 5 !important; } .order-lg-last { order: 6 !important; } .m-lg-0 { margin: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .m-lg-auto { margin: auto !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-lg-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-lg-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-lg-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-lg-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-lg-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-lg-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-lg-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-lg-0 { margin-top: 0 !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mt-lg-3 { margin-top: 1rem !important; } .mt-lg-4 { margin-top: 1.5rem !important; } .mt-lg-5 { margin-top: 3rem !important; } .mt-lg-auto { margin-top: auto !important; } .me-lg-0 { margin-right: 0 !important; } .me-lg-1 { margin-right: 0.25rem !important; } .me-lg-2 { margin-right: 0.5rem !important; } .me-lg-3 { margin-right: 1rem !important; } .me-lg-4 { margin-right: 1.5rem !important; } .me-lg-5 { margin-right: 3rem !important; } .me-lg-auto { margin-right: auto !important; } .mb-lg-0 { margin-bottom: 0 !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .mb-lg-3 { margin-bottom: 1rem !important; } .mb-lg-4 { margin-bottom: 1.5rem !important; } .mb-lg-5 { margin-bottom: 3rem !important; } .mb-lg-auto { margin-bottom: auto !important; } .ms-lg-0 { margin-left: 0 !important; } .ms-lg-1 { margin-left: 0.25rem !important; } .ms-lg-2 { margin-left: 0.5rem !important; } .ms-lg-3 { margin-left: 1rem !important; } .ms-lg-4 { margin-left: 1.5rem !important; } .ms-lg-5 { margin-left: 3rem !important; } .ms-lg-auto { margin-left: auto !important; } .p-lg-0 { padding: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-lg-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-lg-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-lg-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-lg-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-lg-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-lg-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-lg-0 { padding-top: 0 !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pt-lg-3 { padding-top: 1rem !important; } .pt-lg-4 { padding-top: 1.5rem !important; } .pt-lg-5 { padding-top: 3rem !important; } .pe-lg-0 { padding-right: 0 !important; } .pe-lg-1 { padding-right: 0.25rem !important; } .pe-lg-2 { padding-right: 0.5rem !important; } .pe-lg-3 { padding-right: 1rem !important; } .pe-lg-4 { padding-right: 1.5rem !important; } .pe-lg-5 { padding-right: 3rem !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pb-lg-3 { padding-bottom: 1rem !important; } .pb-lg-4 { padding-bottom: 1.5rem !important; } .pb-lg-5 { padding-bottom: 3rem !important; } .ps-lg-0 { padding-left: 0 !important; } .ps-lg-1 { padding-left: 0.25rem !important; } .ps-lg-2 { padding-left: 0.5rem !important; } .ps-lg-3 { padding-left: 1rem !important; } .ps-lg-4 { padding-left: 1.5rem !important; } .ps-lg-5 { padding-left: 3rem !important; } .text-lg-start { text-align: left !important; } .text-lg-end { text-align: right !important; } .text-lg-center { text-align: center !important; } } @media (min-width: 1200px) { .float-xl-start { float: left !important; } .float-xl-end { float: right !important; } .float-xl-none { float: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-grid { display: grid !important; } .d-xl-table { display: table !important; } .d-xl-table-row { display: table-row !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: flex !important; } .d-xl-inline-flex { display: inline-flex !important; } .d-xl-none { display: none !important; } .flex-xl-fill { flex: 1 1 auto !important; } .flex-xl-row { flex-direction: row !important; } .flex-xl-column { flex-direction: column !important; } .flex-xl-row-reverse { flex-direction: row-reverse !important; } .flex-xl-column-reverse { flex-direction: column-reverse !important; } .flex-xl-grow-0 { flex-grow: 0 !important; } .flex-xl-grow-1 { flex-grow: 1 !important; } .flex-xl-shrink-0 { flex-shrink: 0 !important; } .flex-xl-shrink-1 { flex-shrink: 1 !important; } .flex-xl-wrap { flex-wrap: wrap !important; } .flex-xl-nowrap { flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-xl-0 { gap: 0 !important; } .gap-xl-1 { gap: 0.25rem !important; } .gap-xl-2 { gap: 0.5rem !important; } .gap-xl-3 { gap: 1rem !important; } .gap-xl-4 { gap: 1.5rem !important; } .gap-xl-5 { gap: 3rem !important; } .justify-content-xl-start { justify-content: flex-start !important; } .justify-content-xl-end { justify-content: flex-end !important; } .justify-content-xl-center { justify-content: center !important; } .justify-content-xl-between { justify-content: space-between !important; } .justify-content-xl-around { justify-content: space-around !important; } .justify-content-xl-evenly { justify-content: space-evenly !important; } .align-items-xl-start { align-items: flex-start !important; } .align-items-xl-end { align-items: flex-end !important; } .align-items-xl-center { align-items: center !important; } .align-items-xl-baseline { align-items: baseline !important; } .align-items-xl-stretch { align-items: stretch !important; } .align-content-xl-start { align-content: flex-start !important; } .align-content-xl-end { align-content: flex-end !important; } .align-content-xl-center { align-content: center !important; } .align-content-xl-between { align-content: space-between !important; } .align-content-xl-around { align-content: space-around !important; } .align-content-xl-stretch { align-content: stretch !important; } .align-self-xl-auto { align-self: auto !important; } .align-self-xl-start { align-self: flex-start !important; } .align-self-xl-end { align-self: flex-end !important; } .align-self-xl-center { align-self: center !important; } .align-self-xl-baseline { align-self: baseline !important; } .align-self-xl-stretch { align-self: stretch !important; } .order-xl-first { order: -1 !important; } .order-xl-0 { order: 0 !important; } .order-xl-1 { order: 1 !important; } .order-xl-2 { order: 2 !important; } .order-xl-3 { order: 3 !important; } .order-xl-4 { order: 4 !important; } .order-xl-5 { order: 5 !important; } .order-xl-last { order: 6 !important; } .m-xl-0 { margin: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .m-xl-auto { margin: auto !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-xl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-xl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-xl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-xl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-xl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-xl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-xl-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-xl-0 { margin-top: 0 !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mt-xl-3 { margin-top: 1rem !important; } .mt-xl-4 { margin-top: 1.5rem !important; } .mt-xl-5 { margin-top: 3rem !important; } .mt-xl-auto { margin-top: auto !important; } .me-xl-0 { margin-right: 0 !important; } .me-xl-1 { margin-right: 0.25rem !important; } .me-xl-2 { margin-right: 0.5rem !important; } .me-xl-3 { margin-right: 1rem !important; } .me-xl-4 { margin-right: 1.5rem !important; } .me-xl-5 { margin-right: 3rem !important; } .me-xl-auto { margin-right: auto !important; } .mb-xl-0 { margin-bottom: 0 !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .mb-xl-3 { margin-bottom: 1rem !important; } .mb-xl-4 { margin-bottom: 1.5rem !important; } .mb-xl-5 { margin-bottom: 3rem !important; } .mb-xl-auto { margin-bottom: auto !important; } .ms-xl-0 { margin-left: 0 !important; } .ms-xl-1 { margin-left: 0.25rem !important; } .ms-xl-2 { margin-left: 0.5rem !important; } .ms-xl-3 { margin-left: 1rem !important; } .ms-xl-4 { margin-left: 1.5rem !important; } .ms-xl-5 { margin-left: 3rem !important; } .ms-xl-auto { margin-left: auto !important; } .p-xl-0 { padding: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-xl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-xl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-xl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-xl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-xl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-xl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-xl-0 { padding-top: 0 !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pt-xl-3 { padding-top: 1rem !important; } .pt-xl-4 { padding-top: 1.5rem !important; } .pt-xl-5 { padding-top: 3rem !important; } .pe-xl-0 { padding-right: 0 !important; } .pe-xl-1 { padding-right: 0.25rem !important; } .pe-xl-2 { padding-right: 0.5rem !important; } .pe-xl-3 { padding-right: 1rem !important; } .pe-xl-4 { padding-right: 1.5rem !important; } .pe-xl-5 { padding-right: 3rem !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pb-xl-3 { padding-bottom: 1rem !important; } .pb-xl-4 { padding-bottom: 1.5rem !important; } .pb-xl-5 { padding-bottom: 3rem !important; } .ps-xl-0 { padding-left: 0 !important; } .ps-xl-1 { padding-left: 0.25rem !important; } .ps-xl-2 { padding-left: 0.5rem !important; } .ps-xl-3 { padding-left: 1rem !important; } .ps-xl-4 { padding-left: 1.5rem !important; } .ps-xl-5 { padding-left: 3rem !important; } .text-xl-start { text-align: left !important; } .text-xl-end { text-align: right !important; } .text-xl-center { text-align: center !important; } } @media (min-width: 1400px) { .float-xxl-start { float: left !important; } .float-xxl-end { float: right !important; } .float-xxl-none { float: none !important; } .d-xxl-inline { display: inline !important; } .d-xxl-inline-block { display: inline-block !important; } .d-xxl-block { display: block !important; } .d-xxl-grid { display: grid !important; } .d-xxl-table { display: table !important; } .d-xxl-table-row { display: table-row !important; } .d-xxl-table-cell { display: table-cell !important; } .d-xxl-flex { display: flex !important; } .d-xxl-inline-flex { display: inline-flex !important; } .d-xxl-none { display: none !important; } .flex-xxl-fill { flex: 1 1 auto !important; } .flex-xxl-row { flex-direction: row !important; } .flex-xxl-column { flex-direction: column !important; } .flex-xxl-row-reverse { flex-direction: row-reverse !important; } .flex-xxl-column-reverse { flex-direction: column-reverse !important; } .flex-xxl-grow-0 { flex-grow: 0 !important; } .flex-xxl-grow-1 { flex-grow: 1 !important; } .flex-xxl-shrink-0 { flex-shrink: 0 !important; } .flex-xxl-shrink-1 { flex-shrink: 1 !important; } .flex-xxl-wrap { flex-wrap: wrap !important; } .flex-xxl-nowrap { flex-wrap: nowrap !important; } .flex-xxl-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-xxl-0 { gap: 0 !important; } .gap-xxl-1 { gap: 0.25rem !important; } .gap-xxl-2 { gap: 0.5rem !important; } .gap-xxl-3 { gap: 1rem !important; } .gap-xxl-4 { gap: 1.5rem !important; } .gap-xxl-5 { gap: 3rem !important; } .justify-content-xxl-start { justify-content: flex-start !important; } .justify-content-xxl-end { justify-content: flex-end !important; } .justify-content-xxl-center { justify-content: center !important; } .justify-content-xxl-between { justify-content: space-between !important; } .justify-content-xxl-around { justify-content: space-around !important; } .justify-content-xxl-evenly { justify-content: space-evenly !important; } .align-items-xxl-start { align-items: flex-start !important; } .align-items-xxl-end { align-items: flex-end !important; } .align-items-xxl-center { align-items: center !important; } .align-items-xxl-baseline { align-items: baseline !important; } .align-items-xxl-stretch { align-items: stretch !important; } .align-content-xxl-start { align-content: flex-start !important; } .align-content-xxl-end { align-content: flex-end !important; } .align-content-xxl-center { align-content: center !important; } .align-content-xxl-between { align-content: space-between !important; } .align-content-xxl-around { align-content: space-around !important; } .align-content-xxl-stretch { align-content: stretch !important; } .align-self-xxl-auto { align-self: auto !important; } .align-self-xxl-start { align-self: flex-start !important; } .align-self-xxl-end { align-self: flex-end !important; } .align-self-xxl-center { align-self: center !important; } .align-self-xxl-baseline { align-self: baseline !important; } .align-self-xxl-stretch { align-self: stretch !important; } .order-xxl-first { order: -1 !important; } .order-xxl-0 { order: 0 !important; } .order-xxl-1 { order: 1 !important; } .order-xxl-2 { order: 2 !important; } .order-xxl-3 { order: 3 !important; } .order-xxl-4 { order: 4 !important; } .order-xxl-5 { order: 5 !important; } .order-xxl-last { order: 6 !important; } .m-xxl-0 { margin: 0 !important; } .m-xxl-1 { margin: 0.25rem !important; } .m-xxl-2 { margin: 0.5rem !important; } .m-xxl-3 { margin: 1rem !important; } .m-xxl-4 { margin: 1.5rem !important; } .m-xxl-5 { margin: 3rem !important; } .m-xxl-auto { margin: auto !important; } .mx-xxl-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-xxl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-xxl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-xxl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-xxl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-xxl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-xxl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xxl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-xxl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-xxl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-xxl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-xxl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-xxl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-xxl-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-xxl-0 { margin-top: 0 !important; } .mt-xxl-1 { margin-top: 0.25rem !important; } .mt-xxl-2 { margin-top: 0.5rem !important; } .mt-xxl-3 { margin-top: 1rem !important; } .mt-xxl-4 { margin-top: 1.5rem !important; } .mt-xxl-5 { margin-top: 3rem !important; } .mt-xxl-auto { margin-top: auto !important; } .me-xxl-0 { margin-right: 0 !important; } .me-xxl-1 { margin-right: 0.25rem !important; } .me-xxl-2 { margin-right: 0.5rem !important; } .me-xxl-3 { margin-right: 1rem !important; } .me-xxl-4 { margin-right: 1.5rem !important; } .me-xxl-5 { margin-right: 3rem !important; } .me-xxl-auto { margin-right: auto !important; } .mb-xxl-0 { margin-bottom: 0 !important; } .mb-xxl-1 { margin-bottom: 0.25rem !important; } .mb-xxl-2 { margin-bottom: 0.5rem !important; } .mb-xxl-3 { margin-bottom: 1rem !important; } .mb-xxl-4 { margin-bottom: 1.5rem !important; } .mb-xxl-5 { margin-bottom: 3rem !important; } .mb-xxl-auto { margin-bottom: auto !important; } .ms-xxl-0 { margin-left: 0 !important; } .ms-xxl-1 { margin-left: 0.25rem !important; } .ms-xxl-2 { margin-left: 0.5rem !important; } .ms-xxl-3 { margin-left: 1rem !important; } .ms-xxl-4 { margin-left: 1.5rem !important; } .ms-xxl-5 { margin-left: 3rem !important; } .ms-xxl-auto { margin-left: auto !important; } .p-xxl-0 { padding: 0 !important; } .p-xxl-1 { padding: 0.25rem !important; } .p-xxl-2 { padding: 0.5rem !important; } .p-xxl-3 { padding: 1rem !important; } .p-xxl-4 { padding: 1.5rem !important; } .p-xxl-5 { padding: 3rem !important; } .px-xxl-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-xxl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-xxl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-xxl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-xxl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-xxl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xxl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-xxl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-xxl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-xxl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-xxl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-xxl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-xxl-0 { padding-top: 0 !important; } .pt-xxl-1 { padding-top: 0.25rem !important; } .pt-xxl-2 { padding-top: 0.5rem !important; } .pt-xxl-3 { padding-top: 1rem !important; } .pt-xxl-4 { padding-top: 1.5rem !important; } .pt-xxl-5 { padding-top: 3rem !important; } .pe-xxl-0 { padding-right: 0 !important; } .pe-xxl-1 { padding-right: 0.25rem !important; } .pe-xxl-2 { padding-right: 0.5rem !important; } .pe-xxl-3 { padding-right: 1rem !important; } .pe-xxl-4 { padding-right: 1.5rem !important; } .pe-xxl-5 { padding-right: 3rem !important; } .pb-xxl-0 { padding-bottom: 0 !important; } .pb-xxl-1 { padding-bottom: 0.25rem !important; } .pb-xxl-2 { padding-bottom: 0.5rem !important; } .pb-xxl-3 { padding-bottom: 1rem !important; } .pb-xxl-4 { padding-bottom: 1.5rem !important; } .pb-xxl-5 { padding-bottom: 3rem !important; } .ps-xxl-0 { padding-left: 0 !important; } .ps-xxl-1 { padding-left: 0.25rem !important; } .ps-xxl-2 { padding-left: 0.5rem !important; } .ps-xxl-3 { padding-left: 1rem !important; } .ps-xxl-4 { padding-left: 1.5rem !important; } .ps-xxl-5 { padding-left: 3rem !important; } .text-xxl-start { text-align: left !important; } .text-xxl-end { text-align: right !important; } .text-xxl-center { text-align: center !important; } } @media (min-width: 1200px) { .fs-1 { font-size: 2.5rem !important; } .fs-2 { font-size: 2rem !important; } .fs-3 { font-size: 1.75rem !important; } .fs-4 { font-size: 1.5rem !important; } } @media print { .d-print-inline { display: inline !important; } .d-print-inline-block { display: inline-block !important; } .d-print-block { display: block !important; } .d-print-grid { display: grid !important; } .d-print-table { display: table !important; } .d-print-table-row { display: table-row !important; } .d-print-table-cell { display: table-cell !important; } .d-print-flex { display: flex !important; } .d-print-inline-flex { display: inline-flex !important; } .d-print-none { display: none !important; } } /*# sourceMappingURL=bootstrap.css.map */ clean-css-5.3.3/test/fixtures/charset-mixed-with-fonts-min.css 0000664 0000000 0000000 00000000632 14532047255 0024362 0 ustar 00root root 0000000 0000000 @charset "UTF-8"; @font-face{font-family:ProximaNova-Regular;src:url('/assets/thirdParty/css/1415F2_1.eot');src:url('/assets/thirdParty/css/1415F2_1IE.eot') format('embedded-opentype'),url('/assets/thirdParty/css/1415F2_1.woff') format('woff'),url('/assets/thirdParty/css/1415F2_1.ttf') format('truetype'),url('/assets/thirdParty/css/1415F2_1.svg') format('svg')} blockquote small:before{content:'\2014 \00A0'} clean-css-5.3.3/test/fixtures/charset-mixed-with-fonts.css 0000664 0000000 0000000 00000000742 14532047255 0023603 0 ustar 00root root 0000000 0000000 @font-face { font-family: 'ProximaNova-Regular'; src: url('/assets/thirdParty/css/1415F2_1.eot'); src: url('/assets/thirdParty/css/1415F2_1IE.eot') format('embedded-opentype'), url('/assets/thirdParty/css/1415F2_1.woff') format('woff'), url('/assets/thirdParty/css/1415F2_1.ttf') format('truetype'), url('/assets/thirdParty/css/1415F2_1.svg') format('svg'); } @charset "UTF-8"; /* (c) 2012 Instagram, Inc, */ blockquote small:before { content: '\2014 \00A0'; } clean-css-5.3.3/test/fixtures/font-awesome-ie7-min.css 0000664 0000000 0000000 00000110310 14532047255 0022606 0 ustar 00root root 0000000 0000000 /*! * Font Awesome 3.2.1 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/davegandy * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ .icon-large,.nav [class*=" icon-"],.nav [class^=icon-]{margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px} .icon-large{font-size:1.3333333333333333em;vertical-align:middle} .nav [class*=" icon-"],.nav [class^=icon-]{vertical-align:inherit} .nav [class*=" icon-"].icon-large,.nav [class^=icon-].icon-large{vertical-align:-25%} .nav-pills [class*=" icon-"].icon-large,.nav-pills [class^=icon-].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-tabs [class^=icon-].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px} .btn [class*=" icon-"].pull-left,.btn [class*=" icon-"].pull-right,.btn [class^=icon-].pull-left,.btn [class^=icon-].pull-right{vertical-align:inherit} .btn [class*=" icon-"].icon-large,.btn [class^=icon-].icon-large{margin-top:-.5em} a [class*=" icon-"],a [class^=icon-]{cursor:pointer} .icon-glass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-music{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-search{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-envelope-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-heart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-star{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-star-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-user{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-film{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-th-large{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-th{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-th-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ok{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-remove{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-zoom-in{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-zoom-out{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-off,.icon-power-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-signal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cog,.icon-gear{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-trash{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-home{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-file-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-time{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-road{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-download-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-inbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-play-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-repeat,.icon-rotate-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-refresh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-list-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-lock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-flag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-headphones{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-volume-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-volume-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-volume-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-qrcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-barcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tags{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-book{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bookmark{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-print{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-camera{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-font{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bold{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-italic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-text-height{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-text-width{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-align-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-align-center{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-align-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-align-justify{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-indent-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-indent-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-facetime-video{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-picture{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-pencil{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-map-marker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-adjust{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tint{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-edit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-share{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-check{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-move{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-step-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-fast-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-pause{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-stop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-fast-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-step-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-eject{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-minus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-remove-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ok-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-question-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-info-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-screenshot{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-remove-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ok-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ban-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-mail-forward,.icon-share-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-resize-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-resize-small{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-asterisk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-exclamation-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-gift{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-leaf{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-fire{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-eye-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-eye-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-warning-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-plane{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-calendar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-random{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-comment{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-magnet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-retweet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-shopping-cart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-folder-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-folder-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-resize-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-resize-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bar-chart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-twitter-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-facebook-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-camera-retro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-key{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cogs,.icon-gears{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-comments{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-thumbs-up-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-thumbs-down-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-star-half{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-heart-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-signout{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-linkedin-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-pushpin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-external-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-signin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-trophy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-github-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-upload-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-lemon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-check-empty,.icon-unchecked{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bookmark-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-phone-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-twitter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-facebook{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-github{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-unlock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-credit-card{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-rss{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-hdd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bullhorn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bell{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-certificate{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-hand-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-hand-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-hand-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-hand-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-circle-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-circle-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-circle-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-circle-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-globe{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-wrench{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tasks{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-filter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-briefcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-fullscreen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-group{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cloud{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-beaker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cut{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-copy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-paper-clip,.icon-paperclip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-save{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sign-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-reorder{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-list-ul{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-list-ol{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-strikethrough{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-underline{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-table{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-magic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-truck{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-pinterest{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-pinterest-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-google-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-google-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-money{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-caret-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-caret-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-caret-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-caret-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-columns{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-envelope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-linkedin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-rotate-left,.icon-undo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-legal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-dashboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-comment-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-comments-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bolt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sitemap{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-umbrella{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-paste{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-lightbulb{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-exchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cloud-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cloud-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-user-md{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-stethoscope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-suitcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bell-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-coffee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-food{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-file-text-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-building{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-hospital{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ambulance{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-medkit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-fighter-jet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-beer{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-h-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-plus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-double-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-double-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-double-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-double-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-desktop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-laptop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tablet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-mobile-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-circle-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-quote-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-quote-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-spinner{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-mail-reply,.icon-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-github-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-folder-close-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-folder-open-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-expand-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-collapse-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-smile{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-frown{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-meh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-gamepad{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-keyboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-flag-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-flag-checkered{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-terminal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-code{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-mail-reply-all,.icon-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-star-half-empty,.icon-star-half-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-location-arrow{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-crop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-code-fork{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-unlink{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-question{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-info{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-exclamation{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-superscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-subscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-eraser{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-puzzle-piece{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-microphone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-microphone-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-shield{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-calendar-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-fire-extinguisher{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-rocket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-maxcdn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-sign-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-sign-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-sign-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-chevron-sign-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-html5{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-css3{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-anchor{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-unlock-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bullseye{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ellipsis-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ellipsis-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-rss-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-play-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-ticket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-minus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-check-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-level-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-level-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-check-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-edit-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-external-link-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-share-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-compass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-collapse{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-collapse-top{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-expand{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-eur,.icon-euro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-gbp{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-dollar,.icon-usd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-inr,.icon-rupee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-jpy,.icon-yen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-cny,.icon-renminbi{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-krw,.icon-won{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bitcoin,.icon-btc{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-file{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-file-text{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-by-alphabet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-by-alphabet-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-by-attributes{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-by-attributes-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-by-order{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sort-by-order-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-thumbs-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-thumbs-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-youtube-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-youtube{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-xing{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-xing-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-youtube-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-dropbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-stackexchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-instagram{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-flickr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-adn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bitbucket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bitbucket-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tumblr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-tumblr-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-long-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-long-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-long-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-long-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-apple{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-windows{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-android{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-linux{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-dribbble{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-skype{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-foursquare{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-trello{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-female{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-male{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-gittip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-sun{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-moon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-archive{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-bug{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-vk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-weibo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} .icon-renren{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '')} clean-css-5.3.3/test/fixtures/font-awesome-ie7.css 0000664 0000000 0000000 00000120537 14532047255 0022041 0 ustar 00root root 0000000 0000000 /*! * Font Awesome 3.2.1 * the iconic font designed for Bootstrap * ------------------------------------------------------------------------------ * The full suite of pictographic icons, examples, and documentation can be * found at http://fontawesome.io. Stay up to date on Twitter at * http://twitter.com/fontawesome. * * License * ------------------------------------------------------------------------------ * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" * * Author - Dave Gandy * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io * Twitter: http://twitter.com/davegandy * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ .icon-large { font-size: 1.3333333333333333em; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; vertical-align: middle; } .nav [class^="icon-"], .nav [class*=" icon-"] { vertical-align: inherit; margin-top: -4px; padding-top: 3px; margin-bottom: -4px; padding-bottom: 3px; } .nav [class^="icon-"].icon-large, .nav [class*=" icon-"].icon-large { vertical-align: -25%; } .nav-pills [class^="icon-"].icon-large, .nav-tabs [class^="icon-"].icon-large, .nav-pills [class*=" icon-"].icon-large, .nav-tabs [class*=" icon-"].icon-large { line-height: .75em; margin-top: -7px; padding-top: 5px; margin-bottom: -5px; padding-bottom: 4px; } .btn [class^="icon-"].pull-left, .btn [class*=" icon-"].pull-left, .btn [class^="icon-"].pull-right, .btn [class*=" icon-"].pull-right { vertical-align: inherit; } .btn [class^="icon-"].icon-large, .btn [class*=" icon-"].icon-large { margin-top: -0.5em; } a [class^="icon-"], a [class*=" icon-"] { cursor: pointer; } .icon-glass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-music { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-envelope-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-heart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-film { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-th-large { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-th { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-th-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ok { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-remove { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-zoom-in { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-zoom-out { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-power-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gear { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-time { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-road { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-download-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-download { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-inbox { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-play-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-repeat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rotate-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-headphones { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-volume-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-volume-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-volume-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-qrcode { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-barcode { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-book { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bookmark { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-print { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-camera { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-font { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-text-height { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-text-width { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-center { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-align-justify { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-indent-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-indent-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-facetime-video { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-map-marker { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-adjust { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tint { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-share { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-step-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fast-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-backward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pause { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-stop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fast-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-step-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eject { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plus-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-minus-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-remove-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ok-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-question-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-info-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-screenshot { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-remove-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ok-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ban-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-arrow-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-share-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mail-forward { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-full { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-small { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-asterisk { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-exclamation-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gift { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-leaf { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fire { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eye-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eye-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-warning-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plane { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-random { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comment { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-magnet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-retweet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-shopping-cart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-close { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-vertical { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-resize-horizontal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bar-chart { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-twitter-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-facebook-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-camera-retro { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cogs { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gears { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comments { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-up-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-down-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-heart-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-signout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linkedin-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pushpin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-external-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-signin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-trophy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-github-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-upload-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-lemon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-phone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unchecked { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bookmark-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-phone-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-github { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unlock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-credit-card { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rss { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hdd { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bullhorn { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bell { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-certificate { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hand-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-arrow-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-globe { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-briefcase { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fullscreen { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-beaker { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cut { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-copy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-paper-clip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-paperclip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-save { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sign-blank { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-reorder { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list-ul { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-list-ol { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-strikethrough { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-table { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-magic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-pinterest-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-google-plus-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-google-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-money { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-caret-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-columns { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-envelope { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-undo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rotate-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-legal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dashboard { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comment-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-comments-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bolt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-umbrella { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-paste { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-lightbulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cloud-download { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cloud-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-user-md { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-stethoscope { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-suitcase { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bell-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-coffee { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-food { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file-text-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-building { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-hospital { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ambulance { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-medkit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fighter-jet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-beer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-h-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-plus-sign-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-double-angle-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-angle-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-desktop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-laptop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tablet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mobile-phone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle-blank { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-quote-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-quote-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-spinner { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mail-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-github-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-close-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-folder-open-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-expand-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-collapse-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-smile { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-frown { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-meh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gamepad { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-keyboard { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flag-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flag-checkered { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-terminal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-reply-all { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-mail-reply-all { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half-full { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-location-arrow { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-code-fork { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unlink { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-question { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-exclamation { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-superscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-subscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eraser { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-puzzle-piece { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-microphone { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-microphone-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-shield { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-calendar-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-fire-extinguisher { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rocket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-maxcdn { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-chevron-sign-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-html5 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-css3 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-anchor { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-unlock-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bullseye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ellipsis-horizontal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ellipsis-vertical { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rss-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-play-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-ticket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-minus-sign-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-level-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-level-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-check-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-edit-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-external-link-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-share-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-compass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-collapse { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-collapse-top { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-expand { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-eur { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-euro { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gbp { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-usd { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dollar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-inr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-rupee { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-jpy { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-yen { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cny { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-renminbi { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-krw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-won { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-btc { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bitcoin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-file-text { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-alphabet { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-alphabet-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-attributes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-attributes-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-order { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sort-by-order-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-thumbs-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-youtube-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-xing { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-xing-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-youtube-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dropbox { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-stackexchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-flickr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-adn { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bitbucket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bitbucket-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tumblr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-tumblr-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-long-arrow-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-apple { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-windows { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-android { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linux { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-dribbble { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-skype { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-foursquare { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-trello { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-female { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-male { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-gittip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-sun { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-moon { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-bug { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-vk { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-weibo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-renren { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } clean-css-5.3.3/test/fixtures/font-awesome-min.css 0000664 0000000 0000000 00000037030 14532047255 0022133 0 ustar 00root root 0000000 0000000 /*! * Font Awesome 3.0.2 * the iconic font designed for use with Twitter Bootstrap * ------------------------------------------------------- * The full suite of pictographic icons, examples, and documentation * can be found at: http://fortawesome.github.com/Font-Awesome/ * * License * ------------------------------------------------------- * - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - * http://opensource.org/licenses/mit-license.html * - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" * Contact * ------------------------------------------------------- * Email: dave@davegandy.com * Twitter: http://twitter.com/fortaweso_me * Work: Lead Product Designer @ http://kyruus.com */ .btn [class*=" icon-"].icon-large,.btn [class^=icon-].icon-large,.nav [class*=" icon-"].icon-large,.nav [class^=icon-].icon-large,.nav-pills [class*=" icon-"],.nav-pills [class*=" icon-"].icon-large,.nav-pills [class^=icon-],.nav-pills [class^=icon-].icon-large,.nav-tabs [class*=" icon-"],.nav-tabs [class*=" icon-"].icon-large,.nav-tabs [class^=icon-],.nav-tabs [class^=icon-].icon-large{line-height:.9em} @font-face{font-family:FontAwesome;src:url('test/font/fontawesome-webfont.eot?v=3.0.1');src:url('test/font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'),url('test/font/fontawesome-webfont.woff?v=3.0.1') format('woff'),url('test/font/fontawesome-webfont.ttf?v=3.0.1') format('truetype');font-weight:400;font-style:normal} [class*=" icon-"],[class^=icon-]{font-family:FontAwesome;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0} .btn [class*=" icon-"].icon-spin,.btn [class^=icon-].icon-spin,.icon-spin,.nav [class*=" icon-"].icon-spin,.nav [class^=icon-].icon-spin,[class*=" icon-"]:before,[class^=icon-]:before,a [class*=" icon-"],a [class^=icon-]{display:inline-block} .dropdown-menu>.active>a>[class*=" icon-"],.dropdown-menu>.active>a>[class^=icon-],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^=icon-],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^=icon-],.icon-white,.nav-list>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^=icon-],.nav-pills>.active>a>[class*=" icon-"],.nav-pills>.active>a>[class^=icon-],.navbar-inverse .nav>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^=icon-]{background-image:none} [class*=" icon-"]:before,[class^=icon-]:before{text-decoration:inherit;speak:none} .icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em} .btn [class*=" icon-"],.btn [class^=icon-],.nav [class*=" icon-"],.nav [class^=icon-]{display:inline} .nav li [class*=" icon-"],.nav li [class^=icon-],li [class*=" icon-"],li [class^=icon-]{display:inline-block;width:1.25em;text-align:center} .nav li [class*=" icon-"].icon-large,.nav li [class^=icon-].icon-large,li [class*=" icon-"].icon-large,li [class^=icon-].icon-large{width:1.5625em} ul.icons{list-style-type:none;text-indent:-.75em} ul.icons li [class*=" icon-"],ul.icons li [class^=icon-]{width:.75em} .icon-muted{color:#eee} .icon-border{border:1px solid #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .icon-2x{font-size:2em} .icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px} .icon-3x{font-size:3em} .icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px} .icon-4x{font-size:4em} .icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px} .pull-right{float:right} .pull-left{float:left} [class*=" icon-"].pull-left,[class^=icon-].pull-left{margin-right:.3em} [class*=" icon-"].pull-right,[class^=icon-].pull-right{margin-left:.3em} .btn [class*=" icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x,.btn [class^=icon-].pull-left.icon-2x,.btn [class^=icon-].pull-right.icon-2x{margin-top:.18em} .btn [class*=" icon-"].icon-spin.icon-large,.btn [class^=icon-].icon-spin.icon-large{line-height:.8em} .btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x,.btn.btn-small [class^=icon-].pull-left.icon-2x,.btn.btn-small [class^=icon-].pull-right.icon-2x{margin-top:.25em} .btn.btn-large [class*=" icon-"],.btn.btn-large [class^=icon-]{margin-top:0} .btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x,.btn.btn-large [class^=icon-].pull-left.icon-2x,.btn.btn-large [class^=icon-].pull-right.icon-2x{margin-top:.05em} .btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^=icon-].pull-left.icon-2x{margin-right:.2em} .btn.btn-large [class*=" icon-"].pull-right.icon-2x,.btn.btn-large [class^=icon-].pull-right.icon-2x{margin-left:.2em} .icon-spin{-moz-animation:2s linear infinite spin;-o-animation:2s linear infinite spin;-webkit-animation:2s linear infinite spin;animation:2s linear infinite spin} @-moz-keyframes spin{ 0%{-moz-transform:rotate(0)} 100%{-moz-transform:rotate(359deg)} } @-webkit-keyframes spin{ 0%{-webkit-transform:rotate(0)} 100%{-webkit-transform:rotate(359deg)} } @-o-keyframes spin{ 0%{-o-transform:rotate(0)} 100%{-o-transform:rotate(359deg)} } @-ms-keyframes spin{ 0%{-ms-transform:rotate(0)} 100%{-ms-transform:rotate(359deg)} } @keyframes spin{ 0%{transform:rotate(0)} 100%{transform:rotate(359deg)} } @-moz-document url-prefix(){ .icon-spin{height:.9em} .btn .icon-spin{height:auto} .icon-spin.icon-large{height:1.25em} .btn .icon-spin.icon-large{height:.75em} } .icon-glass:before{content:"\f000"} .icon-music:before{content:"\f001"} .icon-search:before{content:"\f002"} .icon-envelope:before{content:"\f003"} .icon-heart:before{content:"\f004"} .icon-star:before{content:"\f005"} .icon-star-empty:before{content:"\f006"} .icon-user:before{content:"\f007"} .icon-film:before{content:"\f008"} .icon-th-large:before{content:"\f009"} .icon-th:before{content:"\f00a"} .icon-th-list:before{content:"\f00b"} .icon-ok:before{content:"\f00c"} .icon-remove:before{content:"\f00d"} .icon-zoom-in:before{content:"\f00e"} .icon-zoom-out:before{content:"\f010"} .icon-off:before{content:"\f011"} .icon-signal:before{content:"\f012"} .icon-cog:before{content:"\f013"} .icon-trash:before{content:"\f014"} .icon-home:before{content:"\f015"} .icon-file:before{content:"\f016"} .icon-time:before{content:"\f017"} .icon-road:before{content:"\f018"} .icon-download-alt:before{content:"\f019"} .icon-download:before{content:"\f01a"} .icon-upload:before{content:"\f01b"} .icon-inbox:before{content:"\f01c"} .icon-play-circle:before{content:"\f01d"} .icon-repeat:before{content:"\f01e"} .icon-refresh:before{content:"\f021"} .icon-list-alt:before{content:"\f022"} .icon-lock:before{content:"\f023"} .icon-flag:before{content:"\f024"} .icon-headphones:before{content:"\f025"} .icon-volume-off:before{content:"\f026"} .icon-volume-down:before{content:"\f027"} .icon-volume-up:before{content:"\f028"} .icon-qrcode:before{content:"\f029"} .icon-barcode:before{content:"\f02a"} .icon-tag:before{content:"\f02b"} .icon-tags:before{content:"\f02c"} .icon-book:before{content:"\f02d"} .icon-bookmark:before{content:"\f02e"} .icon-print:before{content:"\f02f"} .icon-camera:before{content:"\f030"} .icon-font:before{content:"\f031"} .icon-bold:before{content:"\f032"} .icon-italic:before{content:"\f033"} .icon-text-height:before{content:"\f034"} .icon-text-width:before{content:"\f035"} .icon-align-left:before{content:"\f036"} .icon-align-center:before{content:"\f037"} .icon-align-right:before{content:"\f038"} .icon-align-justify:before{content:"\f039"} .icon-list:before{content:"\f03a"} .icon-indent-left:before{content:"\f03b"} .icon-indent-right:before{content:"\f03c"} .icon-facetime-video:before{content:"\f03d"} .icon-picture:before{content:"\f03e"} .icon-pencil:before{content:"\f040"} .icon-map-marker:before{content:"\f041"} .icon-adjust:before{content:"\f042"} .icon-tint:before{content:"\f043"} .icon-edit:before{content:"\f044"} .icon-share:before{content:"\f045"} .icon-check:before{content:"\f046"} .icon-move:before{content:"\f047"} .icon-step-backward:before{content:"\f048"} .icon-fast-backward:before{content:"\f049"} .icon-backward:before{content:"\f04a"} .icon-play:before{content:"\f04b"} .icon-pause:before{content:"\f04c"} .icon-stop:before{content:"\f04d"} .icon-forward:before{content:"\f04e"} .icon-fast-forward:before{content:"\f050"} .icon-step-forward:before{content:"\f051"} .icon-eject:before{content:"\f052"} .icon-chevron-left:before{content:"\f053"} .icon-chevron-right:before{content:"\f054"} .icon-plus-sign:before{content:"\f055"} .icon-minus-sign:before{content:"\f056"} .icon-remove-sign:before{content:"\f057"} .icon-ok-sign:before{content:"\f058"} .icon-question-sign:before{content:"\f059"} .icon-info-sign:before{content:"\f05a"} .icon-screenshot:before{content:"\f05b"} .icon-remove-circle:before{content:"\f05c"} .icon-ok-circle:before{content:"\f05d"} .icon-ban-circle:before{content:"\f05e"} .icon-arrow-left:before{content:"\f060"} .icon-arrow-right:before{content:"\f061"} .icon-arrow-up:before{content:"\f062"} .icon-arrow-down:before{content:"\f063"} .icon-share-alt:before{content:"\f064"} .icon-resize-full:before{content:"\f065"} .icon-resize-small:before{content:"\f066"} .icon-plus:before{content:"\f067"} .icon-minus:before{content:"\f068"} .icon-asterisk:before{content:"\f069"} .icon-exclamation-sign:before{content:"\f06a"} .icon-gift:before{content:"\f06b"} .icon-leaf:before{content:"\f06c"} .icon-fire:before{content:"\f06d"} .icon-eye-open:before{content:"\f06e"} .icon-eye-close:before{content:"\f070"} .icon-warning-sign:before{content:"\f071"} .icon-plane:before{content:"\f072"} .icon-calendar:before{content:"\f073"} .icon-random:before{content:"\f074"} .icon-comment:before{content:"\f075"} .icon-magnet:before{content:"\f076"} .icon-chevron-up:before{content:"\f077"} .icon-chevron-down:before{content:"\f078"} .icon-retweet:before{content:"\f079"} .icon-shopping-cart:before{content:"\f07a"} .icon-folder-close:before{content:"\f07b"} .icon-folder-open:before{content:"\f07c"} .icon-resize-vertical:before{content:"\f07d"} .icon-resize-horizontal:before{content:"\f07e"} .icon-bar-chart:before{content:"\f080"} .icon-twitter-sign:before{content:"\f081"} .icon-facebook-sign:before{content:"\f082"} .icon-camera-retro:before{content:"\f083"} .icon-key:before{content:"\f084"} .icon-cogs:before{content:"\f085"} .icon-comments:before{content:"\f086"} .icon-thumbs-up:before{content:"\f087"} .icon-thumbs-down:before{content:"\f088"} .icon-star-half:before{content:"\f089"} .icon-heart-empty:before{content:"\f08a"} .icon-signout:before{content:"\f08b"} .icon-linkedin-sign:before{content:"\f08c"} .icon-pushpin:before{content:"\f08d"} .icon-external-link:before{content:"\f08e"} .icon-signin:before{content:"\f090"} .icon-trophy:before{content:"\f091"} .icon-github-sign:before{content:"\f092"} .icon-upload-alt:before{content:"\f093"} .icon-lemon:before{content:"\f094"} .icon-phone:before{content:"\f095"} .icon-check-empty:before{content:"\f096"} .icon-bookmark-empty:before{content:"\f097"} .icon-phone-sign:before{content:"\f098"} .icon-twitter:before{content:"\f099"} .icon-facebook:before{content:"\f09a"} .icon-github:before{content:"\f09b"} .icon-unlock:before{content:"\f09c"} .icon-credit-card:before{content:"\f09d"} .icon-rss:before{content:"\f09e"} .icon-hdd:before{content:"\f0a0"} .icon-bullhorn:before{content:"\f0a1"} .icon-bell:before{content:"\f0a2"} .icon-certificate:before{content:"\f0a3"} .icon-hand-right:before{content:"\f0a4"} .icon-hand-left:before{content:"\f0a5"} .icon-hand-up:before{content:"\f0a6"} .icon-hand-down:before{content:"\f0a7"} .icon-circle-arrow-left:before{content:"\f0a8"} .icon-circle-arrow-right:before{content:"\f0a9"} .icon-circle-arrow-up:before{content:"\f0aa"} .icon-circle-arrow-down:before{content:"\f0ab"} .icon-globe:before{content:"\f0ac"} .icon-wrench:before{content:"\f0ad"} .icon-tasks:before{content:"\f0ae"} .icon-filter:before{content:"\f0b0"} .icon-briefcase:before{content:"\f0b1"} .icon-fullscreen:before{content:"\f0b2"} .icon-group:before{content:"\f0c0"} .icon-link:before{content:"\f0c1"} .icon-cloud:before{content:"\f0c2"} .icon-beaker:before{content:"\f0c3"} .icon-cut:before{content:"\f0c4"} .icon-copy:before{content:"\f0c5"} .icon-paper-clip:before{content:"\f0c6"} .icon-save:before{content:"\f0c7"} .icon-sign-blank:before{content:"\f0c8"} .icon-reorder:before{content:"\f0c9"} .icon-list-ul:before{content:"\f0ca"} .icon-list-ol:before{content:"\f0cb"} .icon-strikethrough:before{content:"\f0cc"} .icon-underline:before{content:"\f0cd"} .icon-table:before{content:"\f0ce"} .icon-magic:before{content:"\f0d0"} .icon-truck:before{content:"\f0d1"} .icon-pinterest:before{content:"\f0d2"} .icon-pinterest-sign:before{content:"\f0d3"} .icon-google-plus-sign:before{content:"\f0d4"} .icon-google-plus:before{content:"\f0d5"} .icon-money:before{content:"\f0d6"} .icon-caret-down:before{content:"\f0d7"} .icon-caret-up:before{content:"\f0d8"} .icon-caret-left:before{content:"\f0d9"} .icon-caret-right:before{content:"\f0da"} .icon-columns:before{content:"\f0db"} .icon-sort:before{content:"\f0dc"} .icon-sort-down:before{content:"\f0dd"} .icon-sort-up:before{content:"\f0de"} .icon-envelope-alt:before{content:"\f0e0"} .icon-linkedin:before{content:"\f0e1"} .icon-undo:before{content:"\f0e2"} .icon-legal:before{content:"\f0e3"} .icon-dashboard:before{content:"\f0e4"} .icon-comment-alt:before{content:"\f0e5"} .icon-comments-alt:before{content:"\f0e6"} .icon-bolt:before{content:"\f0e7"} .icon-sitemap:before{content:"\f0e8"} .icon-umbrella:before{content:"\f0e9"} .icon-paste:before{content:"\f0ea"} .icon-lightbulb:before{content:"\f0eb"} .icon-exchange:before{content:"\f0ec"} .icon-cloud-download:before{content:"\f0ed"} .icon-cloud-upload:before{content:"\f0ee"} .icon-user-md:before{content:"\f0f0"} .icon-stethoscope:before{content:"\f0f1"} .icon-suitcase:before{content:"\f0f2"} .icon-bell-alt:before{content:"\f0f3"} .icon-coffee:before{content:"\f0f4"} .icon-food:before{content:"\f0f5"} .icon-file-alt:before{content:"\f0f6"} .icon-building:before{content:"\f0f7"} .icon-hospital:before{content:"\f0f8"} .icon-ambulance:before{content:"\f0f9"} .icon-medkit:before{content:"\f0fa"} .icon-fighter-jet:before{content:"\f0fb"} .icon-beer:before{content:"\f0fc"} .icon-h-sign:before{content:"\f0fd"} .icon-plus-sign-alt:before{content:"\f0fe"} .icon-double-angle-left:before{content:"\f100"} .icon-double-angle-right:before{content:"\f101"} .icon-double-angle-up:before{content:"\f102"} .icon-double-angle-down:before{content:"\f103"} .icon-angle-left:before{content:"\f104"} .icon-angle-right:before{content:"\f105"} .icon-angle-up:before{content:"\f106"} .icon-angle-down:before{content:"\f107"} .icon-desktop:before{content:"\f108"} .icon-laptop:before{content:"\f109"} .icon-tablet:before{content:"\f10a"} .icon-mobile-phone:before{content:"\f10b"} .icon-circle-blank:before{content:"\f10c"} .icon-quote-left:before{content:"\f10d"} .icon-quote-right:before{content:"\f10e"} .icon-spinner:before{content:"\f110"} .icon-circle:before{content:"\f111"} .icon-reply:before{content:"\f112"} .icon-github-alt:before{content:"\f113"} .icon-folder-close-alt:before{content:"\f114"} .icon-folder-open-alt:before{content:"\f115"} clean-css-5.3.3/test/fixtures/font-awesome.css 0000664 0000000 0000000 00000052134 14532047255 0021354 0 ustar 00root root 0000000 0000000 /*! * Font Awesome 3.0.2 * the iconic font designed for use with Twitter Bootstrap * ------------------------------------------------------- * The full suite of pictographic icons, examples, and documentation * can be found at: http://fortawesome.github.com/Font-Awesome/ * * License * ------------------------------------------------------- * - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - * http://opensource.org/licenses/mit-license.html * - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" * Contact * ------------------------------------------------------- * Email: dave@davegandy.com * Twitter: http://twitter.com/fortaweso_me * Work: Lead Product Designer @ http://kyruus.com */ @font-face { font-family: 'FontAwesome'; src: url('../font/fontawesome-webfont.eot?v=3.0.1'); src: url('../font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.0.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.0.1') format('truetype'); font-weight: normal; font-style: normal; } /* Font Awesome styles ------------------------------------------------------- */ [class^="icon-"], [class*=" icon-"] { font-family: FontAwesome; font-weight: normal; font-style: normal; text-decoration: inherit; -webkit-font-smoothing: antialiased; /* sprites.less reset */ display: inline; width: auto; height: auto; line-height: normal; vertical-align: baseline; background-image: none; background-position: 0% 0%; background-repeat: repeat; margin-top: 0; } /* more sprites.less reset */ .icon-white, .nav-pills > .active > a > [class^="icon-"], .nav-pills > .active > a > [class*=" icon-"], .nav-list > .active > a > [class^="icon-"], .nav-list > .active > a > [class*=" icon-"], .navbar-inverse .nav > .active > a > [class^="icon-"], .navbar-inverse .nav > .active > a > [class*=" icon-"], .dropdown-menu > li > a:hover > [class^="icon-"], .dropdown-menu > li > a:hover > [class*=" icon-"], .dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class^="icon-"], .dropdown-submenu:hover > a > [class*=" icon-"] { background-image: none; } [class^="icon-"]:before, [class*=" icon-"]:before { text-decoration: inherit; display: inline-block; speak: none; } /* makes sure icons active on rollover in links */ a [class^="icon-"], a [class*=" icon-"] { display: inline-block; } /* makes the font 33% larger relative to the icon container */ .icon-large:before { vertical-align: -10%; font-size: 1.3333333333333333em; } .btn [class^="icon-"], .nav [class^="icon-"], .btn [class*=" icon-"], .nav [class*=" icon-"] { display: inline; /* keeps button heights with and without icons the same */ } .btn [class^="icon-"].icon-large, .nav [class^="icon-"].icon-large, .btn [class*=" icon-"].icon-large, .nav [class*=" icon-"].icon-large { line-height: .9em; } .btn [class^="icon-"].icon-spin, .nav [class^="icon-"].icon-spin, .btn [class*=" icon-"].icon-spin, .nav [class*=" icon-"].icon-spin { display: inline-block; } .nav-tabs [class^="icon-"], .nav-pills [class^="icon-"], .nav-tabs [class*=" icon-"], .nav-pills [class*=" icon-"] { /* keeps button heights with and without icons the same */ } .nav-tabs [class^="icon-"], .nav-pills [class^="icon-"], .nav-tabs [class*=" icon-"], .nav-pills [class*=" icon-"], .nav-tabs [class^="icon-"].icon-large, .nav-pills [class^="icon-"].icon-large, .nav-tabs [class*=" icon-"].icon-large, .nav-pills [class*=" icon-"].icon-large { line-height: .9em; } li [class^="icon-"], .nav li [class^="icon-"], li [class*=" icon-"], .nav li [class*=" icon-"] { display: inline-block; width: 1.25em; text-align: center; } li [class^="icon-"].icon-large, .nav li [class^="icon-"].icon-large, li [class*=" icon-"].icon-large, .nav li [class*=" icon-"].icon-large { /* increased font size for icon-large */ width: 1.5625em; } ul.icons { list-style-type: none; text-indent: -0.75em; } ul.icons li [class^="icon-"], ul.icons li [class*=" icon-"] { width: .75em; } .icon-muted { color: #eeeeee; } .icon-border { border: solid 1px #eeeeee; padding: .2em .25em .15em; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .icon-2x { font-size: 2em; } .icon-2x.icon-border { border-width: 2px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .icon-3x { font-size: 3em; } .icon-3x.icon-border { border-width: 3px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .icon-4x { font-size: 4em; } .icon-4x.icon-border { border-width: 4px; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; } .pull-right { float: right; } .pull-left { float: left; } [class^="icon-"].pull-left, [class*=" icon-"].pull-left { margin-right: .3em; } [class^="icon-"].pull-right, [class*=" icon-"].pull-right { margin-left: .3em; } .btn [class^="icon-"].pull-left.icon-2x, .btn [class*=" icon-"].pull-left.icon-2x, .btn [class^="icon-"].pull-right.icon-2x, .btn [class*=" icon-"].pull-right.icon-2x { margin-top: .18em; } .btn [class^="icon-"].icon-spin.icon-large, .btn [class*=" icon-"].icon-spin.icon-large { line-height: .8em; } .btn.btn-small [class^="icon-"].pull-left.icon-2x, .btn.btn-small [class*=" icon-"].pull-left.icon-2x, .btn.btn-small [class^="icon-"].pull-right.icon-2x, .btn.btn-small [class*=" icon-"].pull-right.icon-2x { margin-top: .25em; } .btn.btn-large [class^="icon-"], .btn.btn-large [class*=" icon-"] { margin-top: 0; } .btn.btn-large [class^="icon-"].pull-left.icon-2x, .btn.btn-large [class*=" icon-"].pull-left.icon-2x, .btn.btn-large [class^="icon-"].pull-right.icon-2x, .btn.btn-large [class*=" icon-"].pull-right.icon-2x { margin-top: .05em; } .btn.btn-large [class^="icon-"].pull-left.icon-2x, .btn.btn-large [class*=" icon-"].pull-left.icon-2x { margin-right: .2em; } .btn.btn-large [class^="icon-"].pull-right.icon-2x, .btn.btn-large [class*=" icon-"].pull-right.icon-2x { margin-left: .2em; } .icon-spin { display: inline-block; -moz-animation: spin 2s infinite linear; -o-animation: spin 2s infinite linear; -webkit-animation: spin 2s infinite linear; animation: spin 2s infinite linear; } @-moz-keyframes spin { 0% { -moz-transform: rotate(0deg); } 100% { -moz-transform: rotate(359deg); } } @-webkit-keyframes spin { 0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); } } @-o-keyframes spin { 0% { -o-transform: rotate(0deg); } 100% { -o-transform: rotate(359deg); } } @-ms-keyframes spin { 0% { -ms-transform: rotate(0deg); } 100% { -ms-transform: rotate(359deg); } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } @-moz-document url-prefix() { .icon-spin { height: .9em; } .btn .icon-spin { height: auto; } .icon-spin.icon-large { height: 1.25em; } .btn .icon-spin.icon-large { height: .75em; } } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .icon-glass:before { content: "\f000"; } .icon-music:before { content: "\f001"; } .icon-search:before { content: "\f002"; } .icon-envelope:before { content: "\f003"; } .icon-heart:before { content: "\f004"; } .icon-star:before { content: "\f005"; } .icon-star-empty:before { content: "\f006"; } .icon-user:before { content: "\f007"; } .icon-film:before { content: "\f008"; } .icon-th-large:before { content: "\f009"; } .icon-th:before { content: "\f00a"; } .icon-th-list:before { content: "\f00b"; } .icon-ok:before { content: "\f00c"; } .icon-remove:before { content: "\f00d"; } .icon-zoom-in:before { content: "\f00e"; } .icon-zoom-out:before { content: "\f010"; } .icon-off:before { content: "\f011"; } .icon-signal:before { content: "\f012"; } .icon-cog:before { content: "\f013"; } .icon-trash:before { content: "\f014"; } .icon-home:before { content: "\f015"; } .icon-file:before { content: "\f016"; } .icon-time:before { content: "\f017"; } .icon-road:before { content: "\f018"; } .icon-download-alt:before { content: "\f019"; } .icon-download:before { content: "\f01a"; } .icon-upload:before { content: "\f01b"; } .icon-inbox:before { content: "\f01c"; } .icon-play-circle:before { content: "\f01d"; } .icon-repeat:before { content: "\f01e"; } /* \f020 doesn't work in Safari. all shifted one down */ .icon-refresh:before { content: "\f021"; } .icon-list-alt:before { content: "\f022"; } .icon-lock:before { content: "\f023"; } .icon-flag:before { content: "\f024"; } .icon-headphones:before { content: "\f025"; } .icon-volume-off:before { content: "\f026"; } .icon-volume-down:before { content: "\f027"; } .icon-volume-up:before { content: "\f028"; } .icon-qrcode:before { content: "\f029"; } .icon-barcode:before { content: "\f02a"; } .icon-tag:before { content: "\f02b"; } .icon-tags:before { content: "\f02c"; } .icon-book:before { content: "\f02d"; } .icon-bookmark:before { content: "\f02e"; } .icon-print:before { content: "\f02f"; } .icon-camera:before { content: "\f030"; } .icon-font:before { content: "\f031"; } .icon-bold:before { content: "\f032"; } .icon-italic:before { content: "\f033"; } .icon-text-height:before { content: "\f034"; } .icon-text-width:before { content: "\f035"; } .icon-align-left:before { content: "\f036"; } .icon-align-center:before { content: "\f037"; } .icon-align-right:before { content: "\f038"; } .icon-align-justify:before { content: "\f039"; } .icon-list:before { content: "\f03a"; } .icon-indent-left:before { content: "\f03b"; } .icon-indent-right:before { content: "\f03c"; } .icon-facetime-video:before { content: "\f03d"; } .icon-picture:before { content: "\f03e"; } .icon-pencil:before { content: "\f040"; } .icon-map-marker:before { content: "\f041"; } .icon-adjust:before { content: "\f042"; } .icon-tint:before { content: "\f043"; } .icon-edit:before { content: "\f044"; } .icon-share:before { content: "\f045"; } .icon-check:before { content: "\f046"; } .icon-move:before { content: "\f047"; } .icon-step-backward:before { content: "\f048"; } .icon-fast-backward:before { content: "\f049"; } .icon-backward:before { content: "\f04a"; } .icon-play:before { content: "\f04b"; } .icon-pause:before { content: "\f04c"; } .icon-stop:before { content: "\f04d"; } .icon-forward:before { content: "\f04e"; } .icon-fast-forward:before { content: "\f050"; } .icon-step-forward:before { content: "\f051"; } .icon-eject:before { content: "\f052"; } .icon-chevron-left:before { content: "\f053"; } .icon-chevron-right:before { content: "\f054"; } .icon-plus-sign:before { content: "\f055"; } .icon-minus-sign:before { content: "\f056"; } .icon-remove-sign:before { content: "\f057"; } .icon-ok-sign:before { content: "\f058"; } .icon-question-sign:before { content: "\f059"; } .icon-info-sign:before { content: "\f05a"; } .icon-screenshot:before { content: "\f05b"; } .icon-remove-circle:before { content: "\f05c"; } .icon-ok-circle:before { content: "\f05d"; } .icon-ban-circle:before { content: "\f05e"; } .icon-arrow-left:before { content: "\f060"; } .icon-arrow-right:before { content: "\f061"; } .icon-arrow-up:before { content: "\f062"; } .icon-arrow-down:before { content: "\f063"; } .icon-share-alt:before { content: "\f064"; } .icon-resize-full:before { content: "\f065"; } .icon-resize-small:before { content: "\f066"; } .icon-plus:before { content: "\f067"; } .icon-minus:before { content: "\f068"; } .icon-asterisk:before { content: "\f069"; } .icon-exclamation-sign:before { content: "\f06a"; } .icon-gift:before { content: "\f06b"; } .icon-leaf:before { content: "\f06c"; } .icon-fire:before { content: "\f06d"; } .icon-eye-open:before { content: "\f06e"; } .icon-eye-close:before { content: "\f070"; } .icon-warning-sign:before { content: "\f071"; } .icon-plane:before { content: "\f072"; } .icon-calendar:before { content: "\f073"; } .icon-random:before { content: "\f074"; } .icon-comment:before { content: "\f075"; } .icon-magnet:before { content: "\f076"; } .icon-chevron-up:before { content: "\f077"; } .icon-chevron-down:before { content: "\f078"; } .icon-retweet:before { content: "\f079"; } .icon-shopping-cart:before { content: "\f07a"; } .icon-folder-close:before { content: "\f07b"; } .icon-folder-open:before { content: "\f07c"; } .icon-resize-vertical:before { content: "\f07d"; } .icon-resize-horizontal:before { content: "\f07e"; } .icon-bar-chart:before { content: "\f080"; } .icon-twitter-sign:before { content: "\f081"; } .icon-facebook-sign:before { content: "\f082"; } .icon-camera-retro:before { content: "\f083"; } .icon-key:before { content: "\f084"; } .icon-cogs:before { content: "\f085"; } .icon-comments:before { content: "\f086"; } .icon-thumbs-up:before { content: "\f087"; } .icon-thumbs-down:before { content: "\f088"; } .icon-star-half:before { content: "\f089"; } .icon-heart-empty:before { content: "\f08a"; } .icon-signout:before { content: "\f08b"; } .icon-linkedin-sign:before { content: "\f08c"; } .icon-pushpin:before { content: "\f08d"; } .icon-external-link:before { content: "\f08e"; } .icon-signin:before { content: "\f090"; } .icon-trophy:before { content: "\f091"; } .icon-github-sign:before { content: "\f092"; } .icon-upload-alt:before { content: "\f093"; } .icon-lemon:before { content: "\f094"; } .icon-phone:before { content: "\f095"; } .icon-check-empty:before { content: "\f096"; } .icon-bookmark-empty:before { content: "\f097"; } .icon-phone-sign:before { content: "\f098"; } .icon-twitter:before { content: "\f099"; } .icon-facebook:before { content: "\f09a"; } .icon-github:before { content: "\f09b"; } .icon-unlock:before { content: "\f09c"; } .icon-credit-card:before { content: "\f09d"; } .icon-rss:before { content: "\f09e"; } .icon-hdd:before { content: "\f0a0"; } .icon-bullhorn:before { content: "\f0a1"; } .icon-bell:before { content: "\f0a2"; } .icon-certificate:before { content: "\f0a3"; } .icon-hand-right:before { content: "\f0a4"; } .icon-hand-left:before { content: "\f0a5"; } .icon-hand-up:before { content: "\f0a6"; } .icon-hand-down:before { content: "\f0a7"; } .icon-circle-arrow-left:before { content: "\f0a8"; } .icon-circle-arrow-right:before { content: "\f0a9"; } .icon-circle-arrow-up:before { content: "\f0aa"; } .icon-circle-arrow-down:before { content: "\f0ab"; } .icon-globe:before { content: "\f0ac"; } .icon-wrench:before { content: "\f0ad"; } .icon-tasks:before { content: "\f0ae"; } .icon-filter:before { content: "\f0b0"; } .icon-briefcase:before { content: "\f0b1"; } .icon-fullscreen:before { content: "\f0b2"; } .icon-group:before { content: "\f0c0"; } .icon-link:before { content: "\f0c1"; } .icon-cloud:before { content: "\f0c2"; } .icon-beaker:before { content: "\f0c3"; } .icon-cut:before { content: "\f0c4"; } .icon-copy:before { content: "\f0c5"; } .icon-paper-clip:before { content: "\f0c6"; } .icon-save:before { content: "\f0c7"; } .icon-sign-blank:before { content: "\f0c8"; } .icon-reorder:before { content: "\f0c9"; } .icon-list-ul:before { content: "\f0ca"; } .icon-list-ol:before { content: "\f0cb"; } .icon-strikethrough:before { content: "\f0cc"; } .icon-underline:before { content: "\f0cd"; } .icon-table:before { content: "\f0ce"; } .icon-magic:before { content: "\f0d0"; } .icon-truck:before { content: "\f0d1"; } .icon-pinterest:before { content: "\f0d2"; } .icon-pinterest-sign:before { content: "\f0d3"; } .icon-google-plus-sign:before { content: "\f0d4"; } .icon-google-plus:before { content: "\f0d5"; } .icon-money:before { content: "\f0d6"; } .icon-caret-down:before { content: "\f0d7"; } .icon-caret-up:before { content: "\f0d8"; } .icon-caret-left:before { content: "\f0d9"; } .icon-caret-right:before { content: "\f0da"; } .icon-columns:before { content: "\f0db"; } .icon-sort:before { content: "\f0dc"; } .icon-sort-down:before { content: "\f0dd"; } .icon-sort-up:before { content: "\f0de"; } .icon-envelope-alt:before { content: "\f0e0"; } .icon-linkedin:before { content: "\f0e1"; } .icon-undo:before { content: "\f0e2"; } .icon-legal:before { content: "\f0e3"; } .icon-dashboard:before { content: "\f0e4"; } .icon-comment-alt:before { content: "\f0e5"; } .icon-comments-alt:before { content: "\f0e6"; } .icon-bolt:before { content: "\f0e7"; } .icon-sitemap:before { content: "\f0e8"; } .icon-umbrella:before { content: "\f0e9"; } .icon-paste:before { content: "\f0ea"; } .icon-lightbulb:before { content: "\f0eb"; } .icon-exchange:before { content: "\f0ec"; } .icon-cloud-download:before { content: "\f0ed"; } .icon-cloud-upload:before { content: "\f0ee"; } .icon-user-md:before { content: "\f0f0"; } .icon-stethoscope:before { content: "\f0f1"; } .icon-suitcase:before { content: "\f0f2"; } .icon-bell-alt:before { content: "\f0f3"; } .icon-coffee:before { content: "\f0f4"; } .icon-food:before { content: "\f0f5"; } .icon-file-alt:before { content: "\f0f6"; } .icon-building:before { content: "\f0f7"; } .icon-hospital:before { content: "\f0f8"; } .icon-ambulance:before { content: "\f0f9"; } .icon-medkit:before { content: "\f0fa"; } .icon-fighter-jet:before { content: "\f0fb"; } .icon-beer:before { content: "\f0fc"; } .icon-h-sign:before { content: "\f0fd"; } .icon-plus-sign-alt:before { content: "\f0fe"; } .icon-double-angle-left:before { content: "\f100"; } .icon-double-angle-right:before { content: "\f101"; } .icon-double-angle-up:before { content: "\f102"; } .icon-double-angle-down:before { content: "\f103"; } .icon-angle-left:before { content: "\f104"; } .icon-angle-right:before { content: "\f105"; } .icon-angle-up:before { content: "\f106"; } .icon-angle-down:before { content: "\f107"; } .icon-desktop:before { content: "\f108"; } .icon-laptop:before { content: "\f109"; } .icon-tablet:before { content: "\f10a"; } .icon-mobile-phone:before { content: "\f10b"; } .icon-circle-blank:before { content: "\f10c"; } .icon-quote-left:before { content: "\f10d"; } .icon-quote-right:before { content: "\f10e"; } .icon-spinner:before { content: "\f110"; } .icon-circle:before { content: "\f111"; } .icon-reply:before { content: "\f112"; } .icon-github-alt:before { content: "\f113"; } .icon-folder-close-alt:before { content: "\f114"; } .icon-folder-open-alt:before { content: "\f115"; } clean-css-5.3.3/test/fixtures/issue-1001-min.css 0000664 0000000 0000000 00000000145 14532047255 0021233 0 ustar 00root root 0000000 0000000 .a{background-image:url('test/fixtures/bg-buttonh.png')} .e{background:url(/carte-bienvenue/bg2.jpg)} clean-css-5.3.3/test/fixtures/issue-1001.css 0000664 0000000 0000000 00000000263 14532047255 0020453 0 ustar 00root root 0000000 0000000 .a{background-image:url('bg-buttonh.png'); } '/imagerie/booking/common/bg-buttonh.png');} .c{background:url(/carte-bienvenue/bg.jpg)} .e{background:url(/carte-bienvenue/bg2.jpg)} clean-css-5.3.3/test/fixtures/issue-1031-2-min.css 0000664 0000000 0000000 00000001550 14532047255 0021376 0 ustar 00root root 0000000 0000000 .block-1:after,.block-1:before,.block-2:after,.block-2:before{bottom:100%;content:" ";height:0;width:0;position:absolute;pointer-events:none} .block-1{background:#fff;border:1px solid #e0e0e0} .block-1:after,.block-1:before{border:solid transparent;left:193px} .block-1:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:9px;margin-left:-9px;z-index:100} .block-1:before{border-color:rgba(224,224,224,0);border-bottom-color:#e0e0e0;border-width:10px;margin-left:-10px;z-index:100} .block-2{background:#fff;border:1px solid #e0e0e0} .block-2:after,.block-2:before{border:solid transparent;left:293px} .block-2:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:9px;margin-left:-9px;z-index:100} .block-2:before{border-color:rgba(224,224,224,0);border-bottom-color:#e0e0e0;border-width:10px;margin-left:-10px;z-index:100} clean-css-5.3.3/test/fixtures/issue-1031-2.css 0000664 0000000 0000000 00000002105 14532047255 0020612 0 ustar 00root root 0000000 0000000 .block-1 { background: #fff; border: 1px solid #e0e0e0; } .block-1:after, .block-1:before { bottom: 100%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; left: 193px; } .block-1:after { border-color: rgba(255, 255, 255, 0); border-bottom-color: #fff; border-width: 9px; margin-left: -9px; z-index: 100; } .block-1:before { border-color: rgba(224, 224, 224, 0); border-bottom-color: #e0e0e0; border-width: 10px; margin-left: -10px; z-index: 100; } .block-2 { background: #fff; border: 1px solid #e0e0e0; } .block-2:after, .block-2:before { bottom: 100%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; left: 293px; } .block-2:after { border-color: rgba(255, 255, 255, 0); border-bottom-color: #fff; border-width: 9px; margin-left: -9px; z-index: 100; } .block-2:before { border-color: rgba(224, 224, 224, 0); border-bottom-color: #e0e0e0; border-width: 10px; margin-left: -10px; z-index: 100; } clean-css-5.3.3/test/fixtures/issue-1031-ie7-min.css 0000664 0000000 0000000 00000000503 14532047255 0021716 0 ustar 00root root 0000000 0000000 .archive-header{margin-bottom:24px;margin-bottom:1.714285714rem} .wp-caption.aligncenter,img.aligncenter{clear:both;margin-top:12px;margin-top:.857142857rem;margin-bottom:12px;margin-bottom:.857142857rem} .wp-caption.aligncenter,.wp-caption.alignleft,.wp-caption.alignright{margin-bottom:24px;margin-bottom:1.714285714rem} clean-css-5.3.3/test/fixtures/issue-1031-ie7.css 0000664 0000000 0000000 00000000567 14532047255 0021147 0 ustar 00root root 0000000 0000000 .archive-header { margin-bottom: 24px; margin-bottom: 1.714285714rem; } img.aligncenter, .wp-caption.aligncenter { clear: both; margin-top: 12px; margin-top: 0.857142857rem; margin-bottom: 12px; margin-bottom: 0.857142857rem; } .wp-caption.alignleft, .wp-caption.alignright, .wp-caption.aligncenter { margin-bottom: 24px; margin-bottom: 1.714285714rem; } clean-css-5.3.3/test/fixtures/issue-1075-min.css 0000664 0000000 0000000 00000000503 14532047255 0021244 0 ustar 00root root 0000000 0000000 @media (min-width:48em){ .unrelated-share-media-query{font-size:5px} } .filler{font-size:15px} .defines-variable{--max-items:1;--col-width:calc(100%/var(--max-items));display:flex;width:calc(100% + 20px);flex-wrap:wrap} .uses-variable{flex-basis:var(--col-width)} @media (min-width:48em){ .defines-variable{--max-items:3} } clean-css-5.3.3/test/fixtures/issue-1075.css 0000664 0000000 0000000 00000000644 14532047255 0020471 0 ustar 00root root 0000000 0000000 @media (min-width: 48em) { .unrelated-share-media-query { font-size: 5px; } } .filler { font-size: 15px; } .defines-variable { --max-items: 1; --col-width: calc(100%/var(--max-items)); display: flex; width: calc(100% + 20px); flex-wrap: wrap; } .uses-variable { flex-basis: var(--col-width); } @media (min-width: 48em) { .defines-variable { --max-items: 3; } } clean-css-5.3.3/test/fixtures/issue-1119-min.css 0000664 0000000 0000000 00000000045 14532047255 0021244 0 ustar 00root root 0000000 0000000 .block::before { content: "\"()" } clean-css-5.3.3/test/fixtures/issue-1119.css 0000664 0000000 0000000 00000000037 14532047255 0020464 0 ustar 00root root 0000000 0000000 .block::before{content:"\"()"} clean-css-5.3.3/test/fixtures/issue-117-snippet-min.css 0000664 0000000 0000000 00000000226 14532047255 0022642 0 ustar 00root root 0000000 0000000 @media only print{ a,a:visited{text-decoration:underline} a[href]:after{content:" (" attr(href) ")"} abbr[title]:after{content:" (" attr(title) ")"} } clean-css-5.3.3/test/fixtures/issue-117-snippet.css 0000664 0000000 0000000 00000001034 14532047255 0022057 0 ustar 00root root 0000000 0000000 @media print, (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { /* Style adjustments for high resolution devices */ } /**===================================================**\ /** PRINT STYLES /**===================================================**/ @media only print { a, a:visited { text-decoration: underline; } a[href]:after { content: " (" attr(href) ")"; } abbr[title]:after { content: " (" attr(title) ")"; } /** MANUALLY TRUNCATED FOR BREVITY **/ } clean-css-5.3.3/test/fixtures/issue-1194-min.css 0000664 0000000 0000000 00000447324 14532047255 0021266 0 ustar 00root root 0000000 0000000 @charset "UTF-8"; /*! * Bootstrap v5.0.0-beta2 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ dd,legend{margin-bottom:.5rem} label,output{display:inline-block} progress,sub,sup{vertical-align:baseline} .blockquote>:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0} .img-fluid,.img-thumbnail{max-width:100%;height:auto} .g-0,.gy-0,.row{--bs-gutter-y:0} .btn-check,.form-floating>label{position:absolute;pointer-events:none} .input-group .btn:focus,.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3} .form-check-inline .form-check-input~.invalid-feedback,.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em} .dropdown-header,.dropdown-item,.dropdown-toggle,.input-group-text,.navbar-brand{white-space:nowrap} .card,code{word-wrap:break-word} .accordion-button:hover,.input-group .btn{z-index:2} .breadcrumb,.carousel-indicators,.dropdown-menu,.nav,.navbar-nav,.pagination{list-style:none} :root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))} *,::after,::before{box-sizing:border-box} @media (prefers-reduced-motion:no-preference){ :root{scroll-behavior:smooth} } body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent} a>code,hr,pre code{color:inherit} [tabindex="-1"]:focus:not(:focus-visible){outline:0!important} hr{margin:1rem 0;background-color:currentColor;border:0;opacity:.25} hr:not([size]){height:1px} .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2} address,dl,ol,p,ul{margin-bottom:1rem} blockquote,figure{margin:0 0 1rem} dt,kbd kbd{font-weight:700} address,legend{line-height:inherit} .h1,h1{font-size:calc(1.375rem + 1.5vw)} @media (min-width:1200px){ .h1,h1{font-size:2.5rem} } .h2,h2{font-size:calc(1.325rem + .9vw)} @media (min-width:1200px){ .h2,h2{font-size:2rem} } .h3,h3{font-size:calc(1.3rem + .6vw)} @media (min-width:1200px){ .h3,h3{font-size:1.75rem} } .h4,h4{font-size:calc(1.275rem + .3vw)} @media (min-width:1200px){ .h4,h4{font-size:1.5rem} } .h5,h5{font-size:1.25rem} .h6,h6{font-size:1rem} dl,ol,p,ul{margin-top:0} abbr[data-bs-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none} .btn,.form-control-color:not(:disabled):not([readonly]),.form-control[type=file]:not(:disabled):not([readonly]),[role=button],[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled),summary{cursor:pointer} address{font-style:normal} ol,ul{padding-left:2rem} dd{margin-left:0} .blockquote,.blockquote-footer,pre{margin-bottom:1rem} b,strong{font-weight:bolder} .small,small{font-size:.875em} .mark,mark{padding:.2em;background-color:#fcf8e3} sub,sup{position:relative;font-size:.75em;line-height:0} sub{bottom:-.25em} sup{top:-.5em} a{color:#0d6efd;text-decoration:underline} a:hover{color:#0a58ca} a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none} code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override} code,kbd,pre{font-size:.875em} pre{display:block;margin-top:0;overflow:auto} pre code{font-size:inherit;word-break:normal} code{color:#d63384} kbd{padding:.2rem .4rem;color:#fff;background-color:#212529;border-radius:.2rem} kbd kbd{padding:0;font-size:1em} img,svg{vertical-align:middle} table{caption-side:bottom;border-collapse:collapse} caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left} th{text-align:inherit;text-align:-webkit-match-parent} tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit} button{border-radius:0} fieldset,iframe{border:0} button:focus:not(:focus-visible){outline:0} button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit} button,select{text-transform:none} select{word-wrap:normal} [list]::-webkit-calendar-picker-indicator{display:none} [type=button],[type=reset],[type=submit],button{-webkit-appearance:button} ::-moz-focus-inner{padding:0;border-style:none} textarea{resize:vertical} fieldset{min-width:0;padding:0;margin:0} legend{float:left;width:100%;padding:0;font-size:calc(1.275rem + .3vw)} legend+*{clear:left} ::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0} ::-webkit-inner-spin-button{height:auto} [type=search]{outline-offset:-2px;-webkit-appearance:textfield} ::-webkit-search-decoration{-webkit-appearance:none} ::-webkit-color-swatch-wrapper{padding:0} ::file-selector-button{font:inherit} ::-webkit-file-upload-button{font:inherit;-webkit-appearance:button} .display-1,.display-2,.display-3,.display-4,.display-5,.display-6{font-weight:300;line-height:1.2} summary{display:list-item} [hidden]{display:none!important} .figure,.list-inline-item{display:inline-block} .lead{font-size:1.25rem;font-weight:300} .display-1{font-size:calc(1.625rem + 4.5vw)} @media (min-width:1200px){ legend{font-size:1.5rem} .display-1{font-size:5rem} } .display-2{font-size:calc(1.575rem + 3.9vw)} @media (min-width:1200px){ .display-2{font-size:4.5rem} } .display-3{font-size:calc(1.525rem + 3.3vw)} @media (min-width:1200px){ .display-3{font-size:4rem} } .display-4{font-size:calc(1.475rem + 2.7vw)} @media (min-width:1200px){ .display-4{font-size:3.5rem} } .display-5{font-size:calc(1.425rem + 2.1vw)} @media (min-width:1200px){ .display-5{font-size:3rem} } .display-6{font-size:calc(1.375rem + 1.5vw)} .btn,.btn-link,.dropdown-item,.form-control,.form-select{font-weight:400} @media (min-width:1200px){ .display-6{font-size:2.5rem} } .list-inline,.list-unstyled{padding-left:0;list-style:none} .list-inline-item:not(:last-child){margin-right:.5rem} .initialism{font-size:.875em;text-transform:uppercase} .blockquote{font-size:1.25rem} .blockquote-footer,.figure-caption{font-size:.875em;color:#6c757d} .blockquote-footer{margin-top:-1rem} .blockquote-footer::before{content:"— "} .img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem} .figure-img{margin-bottom:.5rem;line-height:1} .container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-right:var(--bs-gutter-x,.75rem);padding-left:var(--bs-gutter-x,.75rem);margin-right:auto;margin-left:auto} @media (min-width:576px){ .container,.container-sm{max-width:540px} } @media (min-width:768px){ .container,.container-md,.container-sm{max-width:720px} } @media (min-width:992px){ .container,.container-lg,.container-md,.container-sm{max-width:960px} } @media (min-width:1200px){ .container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px} } @media (min-width:1400px){ .container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px} } .row{--bs-gutter-x:1.5rem;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x)/ -2);margin-left:calc(var(--bs-gutter-x)/ -2)} .row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)/ 2);padding-left:calc(var(--bs-gutter-x)/ 2);margin-top:var(--bs-gutter-y)} .col{flex:1 0 0%} .row-cols-auto>*{flex:0 0 auto;width:auto} .row-cols-1>*{flex:0 0 auto;width:100%} .row-cols-2>*{flex:0 0 auto;width:50%} .row-cols-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-4>*{flex:0 0 auto;width:25%} .row-cols-5>*{flex:0 0 auto;width:20%} .row-cols-6>*{flex:0 0 auto;width:16.6666666667%} .col-auto{flex:0 0 auto;width:auto} .col-1{flex:0 0 auto;width:8.3333333333%} .col-2,.col-3{flex:0 0 auto} .col-2{width:16.6666666667%} .col-3{width:25%} .col-4,.col-5{flex:0 0 auto} .col-4{width:33.3333333333%} .col-5{width:41.6666666667%} .col-6,.col-7{flex:0 0 auto} .col-6{width:50%} .col-7{width:58.3333333333%} .col-8,.col-9{flex:0 0 auto} .col-8{width:66.6666666667%} .col-9{width:75%} .col-10{flex:0 0 auto;width:83.3333333333%} .col-11{flex:0 0 auto;width:91.6666666667%} .col-12{flex:0 0 auto;width:100%} .offset-1{margin-left:8.3333333333%} .offset-2{margin-left:16.6666666667%} .offset-3{margin-left:25%} .offset-4{margin-left:33.3333333333%} .offset-5{margin-left:41.6666666667%} .offset-6{margin-left:50%} .offset-7{margin-left:58.3333333333%} .offset-8{margin-left:66.6666666667%} .offset-9{margin-left:75%} .offset-10{margin-left:83.3333333333%} .offset-11{margin-left:91.6666666667%} .g-0,.gx-0{--bs-gutter-x:0} .g-1,.gx-1{--bs-gutter-x:0.25rem} .g-1,.gy-1{--bs-gutter-y:0.25rem} .g-2,.gx-2{--bs-gutter-x:0.5rem} .g-2,.gy-2{--bs-gutter-y:0.5rem} .g-3,.gx-3{--bs-gutter-x:1rem} .g-3,.gy-3{--bs-gutter-y:1rem} .g-4,.gx-4{--bs-gutter-x:1.5rem} .g-4,.gy-4{--bs-gutter-y:1.5rem} .g-5,.gx-5{--bs-gutter-x:3rem} .g-5,.gy-5{--bs-gutter-y:3rem} @media (min-width:576px){ .col-sm{flex:1 0 0%} .row-cols-sm-auto>*{flex:0 0 auto;width:auto} .row-cols-sm-1>*{flex:0 0 auto;width:100%} .row-cols-sm-2>*{flex:0 0 auto;width:50%} .row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-sm-4>*{flex:0 0 auto;width:25%} .row-cols-sm-5>*{flex:0 0 auto;width:20%} .row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%} .col-sm-auto{flex:0 0 auto;width:auto} .col-sm-1{flex:0 0 auto;width:8.3333333333%} .col-sm-2{flex:0 0 auto;width:16.6666666667%} .col-sm-3{flex:0 0 auto;width:25%} .col-sm-4{flex:0 0 auto;width:33.3333333333%} .col-sm-5{flex:0 0 auto;width:41.6666666667%} .col-sm-6{flex:0 0 auto;width:50%} .col-sm-7{flex:0 0 auto;width:58.3333333333%} .col-sm-8{flex:0 0 auto;width:66.6666666667%} .col-sm-9{flex:0 0 auto;width:75%} .col-sm-10{flex:0 0 auto;width:83.3333333333%} .col-sm-11{flex:0 0 auto;width:91.6666666667%} .col-sm-12{flex:0 0 auto;width:100%} .offset-sm-0{margin-left:0} .offset-sm-1{margin-left:8.3333333333%} .offset-sm-2{margin-left:16.6666666667%} .offset-sm-3{margin-left:25%} .offset-sm-4{margin-left:33.3333333333%} .offset-sm-5{margin-left:41.6666666667%} .offset-sm-6{margin-left:50%} .offset-sm-7{margin-left:58.3333333333%} .offset-sm-8{margin-left:66.6666666667%} .offset-sm-9{margin-left:75%} .offset-sm-10{margin-left:83.3333333333%} .offset-sm-11{margin-left:91.6666666667%} .g-sm-0,.gx-sm-0{--bs-gutter-x:0} .g-sm-0,.gy-sm-0{--bs-gutter-y:0} .g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem} .g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem} .g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem} .g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem} .g-sm-3,.gx-sm-3{--bs-gutter-x:1rem} .g-sm-3,.gy-sm-3{--bs-gutter-y:1rem} .g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem} .g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem} .g-sm-5,.gx-sm-5{--bs-gutter-x:3rem} .g-sm-5,.gy-sm-5{--bs-gutter-y:3rem} } @media (min-width:768px){ .col-md{flex:1 0 0%} .row-cols-md-auto>*{flex:0 0 auto;width:auto} .row-cols-md-1>*{flex:0 0 auto;width:100%} .row-cols-md-2>*{flex:0 0 auto;width:50%} .row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-md-4>*{flex:0 0 auto;width:25%} .row-cols-md-5>*{flex:0 0 auto;width:20%} .row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%} .col-md-auto{flex:0 0 auto;width:auto} .col-md-1{flex:0 0 auto;width:8.3333333333%} .col-md-2{flex:0 0 auto;width:16.6666666667%} .col-md-3{flex:0 0 auto;width:25%} .col-md-4{flex:0 0 auto;width:33.3333333333%} .col-md-5{flex:0 0 auto;width:41.6666666667%} .col-md-6{flex:0 0 auto;width:50%} .col-md-7{flex:0 0 auto;width:58.3333333333%} .col-md-8{flex:0 0 auto;width:66.6666666667%} .col-md-9{flex:0 0 auto;width:75%} .col-md-10{flex:0 0 auto;width:83.3333333333%} .col-md-11{flex:0 0 auto;width:91.6666666667%} .col-md-12{flex:0 0 auto;width:100%} .offset-md-0{margin-left:0} .offset-md-1{margin-left:8.3333333333%} .offset-md-2{margin-left:16.6666666667%} .offset-md-3{margin-left:25%} .offset-md-4{margin-left:33.3333333333%} .offset-md-5{margin-left:41.6666666667%} .offset-md-6{margin-left:50%} .offset-md-7{margin-left:58.3333333333%} .offset-md-8{margin-left:66.6666666667%} .offset-md-9{margin-left:75%} .offset-md-10{margin-left:83.3333333333%} .offset-md-11{margin-left:91.6666666667%} .g-md-0,.gx-md-0{--bs-gutter-x:0} .g-md-0,.gy-md-0{--bs-gutter-y:0} .g-md-1,.gx-md-1{--bs-gutter-x:0.25rem} .g-md-1,.gy-md-1{--bs-gutter-y:0.25rem} .g-md-2,.gx-md-2{--bs-gutter-x:0.5rem} .g-md-2,.gy-md-2{--bs-gutter-y:0.5rem} .g-md-3,.gx-md-3{--bs-gutter-x:1rem} .g-md-3,.gy-md-3{--bs-gutter-y:1rem} .g-md-4,.gx-md-4{--bs-gutter-x:1.5rem} .g-md-4,.gy-md-4{--bs-gutter-y:1.5rem} .g-md-5,.gx-md-5{--bs-gutter-x:3rem} .g-md-5,.gy-md-5{--bs-gutter-y:3rem} } @media (min-width:992px){ .col-lg{flex:1 0 0%} .row-cols-lg-auto>*{flex:0 0 auto;width:auto} .row-cols-lg-1>*{flex:0 0 auto;width:100%} .row-cols-lg-2>*{flex:0 0 auto;width:50%} .row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-lg-4>*{flex:0 0 auto;width:25%} .row-cols-lg-5>*{flex:0 0 auto;width:20%} .row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%} .col-lg-auto{flex:0 0 auto;width:auto} .col-lg-1{flex:0 0 auto;width:8.3333333333%} .col-lg-2{flex:0 0 auto;width:16.6666666667%} .col-lg-3{flex:0 0 auto;width:25%} .col-lg-4{flex:0 0 auto;width:33.3333333333%} .col-lg-5{flex:0 0 auto;width:41.6666666667%} .col-lg-6{flex:0 0 auto;width:50%} .col-lg-7{flex:0 0 auto;width:58.3333333333%} .col-lg-8{flex:0 0 auto;width:66.6666666667%} .col-lg-9{flex:0 0 auto;width:75%} .col-lg-10{flex:0 0 auto;width:83.3333333333%} .col-lg-11{flex:0 0 auto;width:91.6666666667%} .col-lg-12{flex:0 0 auto;width:100%} .offset-lg-0{margin-left:0} .offset-lg-1{margin-left:8.3333333333%} .offset-lg-2{margin-left:16.6666666667%} .offset-lg-3{margin-left:25%} .offset-lg-4{margin-left:33.3333333333%} .offset-lg-5{margin-left:41.6666666667%} .offset-lg-6{margin-left:50%} .offset-lg-7{margin-left:58.3333333333%} .offset-lg-8{margin-left:66.6666666667%} .offset-lg-9{margin-left:75%} .offset-lg-10{margin-left:83.3333333333%} .offset-lg-11{margin-left:91.6666666667%} .g-lg-0,.gx-lg-0{--bs-gutter-x:0} .g-lg-0,.gy-lg-0{--bs-gutter-y:0} .g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem} .g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem} .g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem} .g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem} .g-lg-3,.gx-lg-3{--bs-gutter-x:1rem} .g-lg-3,.gy-lg-3{--bs-gutter-y:1rem} .g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem} .g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem} .g-lg-5,.gx-lg-5{--bs-gutter-x:3rem} .g-lg-5,.gy-lg-5{--bs-gutter-y:3rem} } @media (min-width:1200px){ .col-xl{flex:1 0 0%} .row-cols-xl-auto>*{flex:0 0 auto;width:auto} .row-cols-xl-1>*{flex:0 0 auto;width:100%} .row-cols-xl-2>*{flex:0 0 auto;width:50%} .row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-xl-4>*{flex:0 0 auto;width:25%} .row-cols-xl-5>*{flex:0 0 auto;width:20%} .row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%} .col-xl-auto{flex:0 0 auto;width:auto} .col-xl-1{flex:0 0 auto;width:8.3333333333%} .col-xl-2{flex:0 0 auto;width:16.6666666667%} .col-xl-3{flex:0 0 auto;width:25%} .col-xl-4{flex:0 0 auto;width:33.3333333333%} .col-xl-5{flex:0 0 auto;width:41.6666666667%} .col-xl-6{flex:0 0 auto;width:50%} .col-xl-7{flex:0 0 auto;width:58.3333333333%} .col-xl-8{flex:0 0 auto;width:66.6666666667%} .col-xl-9{flex:0 0 auto;width:75%} .col-xl-10{flex:0 0 auto;width:83.3333333333%} .col-xl-11{flex:0 0 auto;width:91.6666666667%} .col-xl-12{flex:0 0 auto;width:100%} .offset-xl-0{margin-left:0} .offset-xl-1{margin-left:8.3333333333%} .offset-xl-2{margin-left:16.6666666667%} .offset-xl-3{margin-left:25%} .offset-xl-4{margin-left:33.3333333333%} .offset-xl-5{margin-left:41.6666666667%} .offset-xl-6{margin-left:50%} .offset-xl-7{margin-left:58.3333333333%} .offset-xl-8{margin-left:66.6666666667%} .offset-xl-9{margin-left:75%} .offset-xl-10{margin-left:83.3333333333%} .offset-xl-11{margin-left:91.6666666667%} .g-xl-0,.gx-xl-0{--bs-gutter-x:0} .g-xl-0,.gy-xl-0{--bs-gutter-y:0} .g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem} .g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem} .g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem} .g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem} .g-xl-3,.gx-xl-3{--bs-gutter-x:1rem} .g-xl-3,.gy-xl-3{--bs-gutter-y:1rem} .g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem} .g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem} .g-xl-5,.gx-xl-5{--bs-gutter-x:3rem} .g-xl-5,.gy-xl-5{--bs-gutter-y:3rem} } @media (min-width:1400px){ .col-xxl{flex:1 0 0%} .row-cols-xxl-auto>*{flex:0 0 auto;width:auto} .row-cols-xxl-1>*{flex:0 0 auto;width:100%} .row-cols-xxl-2>*{flex:0 0 auto;width:50%} .row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%} .row-cols-xxl-4>*{flex:0 0 auto;width:25%} .row-cols-xxl-5>*{flex:0 0 auto;width:20%} .row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%} .col-xxl-auto{flex:0 0 auto;width:auto} .col-xxl-1{flex:0 0 auto;width:8.3333333333%} .col-xxl-2{flex:0 0 auto;width:16.6666666667%} .col-xxl-3{flex:0 0 auto;width:25%} .col-xxl-4{flex:0 0 auto;width:33.3333333333%} .col-xxl-5{flex:0 0 auto;width:41.6666666667%} .col-xxl-6{flex:0 0 auto;width:50%} .col-xxl-7{flex:0 0 auto;width:58.3333333333%} .col-xxl-8{flex:0 0 auto;width:66.6666666667%} .col-xxl-9{flex:0 0 auto;width:75%} .col-xxl-10{flex:0 0 auto;width:83.3333333333%} .col-xxl-11{flex:0 0 auto;width:91.6666666667%} .col-xxl-12{flex:0 0 auto;width:100%} .offset-xxl-0{margin-left:0} .offset-xxl-1{margin-left:8.3333333333%} .offset-xxl-2{margin-left:16.6666666667%} .offset-xxl-3{margin-left:25%} .offset-xxl-4{margin-left:33.3333333333%} .offset-xxl-5{margin-left:41.6666666667%} .offset-xxl-6{margin-left:50%} .offset-xxl-7{margin-left:58.3333333333%} .offset-xxl-8{margin-left:66.6666666667%} .offset-xxl-9{margin-left:75%} .offset-xxl-10{margin-left:83.3333333333%} .offset-xxl-11{margin-left:91.6666666667%} .g-xxl-0,.gx-xxl-0{--bs-gutter-x:0} .g-xxl-0,.gy-xxl-0{--bs-gutter-y:0} .g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem} .g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem} .g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem} .g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem} .g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem} .g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem} .g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem} .g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem} .g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem} .g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem} } .table{--bs-table-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6} .table>:not(caption)>*>*{padding:.5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)} .table>tbody{vertical-align:inherit} .table>thead{vertical-align:bottom} .table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor} .caption-top{caption-side:top} .table-sm>:not(caption)>*>*{padding:.25rem} .table-bordered>:not(caption)>*{border-width:1px 0} .table-bordered>:not(caption)>*>*{border-width:0 1px} .table-borderless>:not(caption)>*>*{border-bottom-width:0} .table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)} .table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)} .table-danger,.table-info,.table-light,.table-primary,.table-secondary,.table-success,.table-warning{--bs-table-striped-color:#000;--bs-table-active-color:#000;--bs-table-hover-color:#000;color:#000} .table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)} .table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-active-bg:#bacbe6;--bs-table-hover-bg:#bfd1ec;border-color:#bacbe6} .table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-active-bg:#cbccce;--bs-table-hover-bg:#d1d2d4;border-color:#cbccce} .table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-active-bg:#bcd0c7;--bs-table-hover-bg:#c1d6cc;border-color:#bcd0c7} .table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-active-bg:#badce3;--bs-table-hover-bg:#bfe2e9;border-color:#badce3} .table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-active-bg:#e6dbb9;--bs-table-hover-bg:#ece1be;border-color:#e6dbb9} .table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-active-bg:#dfc2c4;--bs-table-hover-bg:#e5c7ca;border-color:#dfc2c4} .table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-active-bg:#dfe0e1;--bs-table-hover-bg:#e5e6e7;border-color:#dfe0e1} .table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e} .table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch} @media (max-width:575.98px){ .table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:767.98px){ .table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:991.98px){ .table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:1199.98px){ .table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch} } @media (max-width:1399.98px){ .table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch} } .collapsing,.form-control[type=file]{overflow:hidden} .form-label{margin-bottom:.5rem} .col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5} .col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem} .col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem} .form-text{margin-top:.25rem;font-size:.875em;color:#6c757d} .form-control,.form-control:focus{color:#212529;background-color:#fff} .form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out} .form-control:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)} .form-control::-webkit-date-and-time-value{height:1.5em} .form-control::-webkit-input-placeholder{color:#6c757d;opacity:1} .form-control::-moz-placeholder{color:#6c757d;opacity:1} .form-control::placeholder{color:#6c757d;opacity:1} .form-control-plaintext,.form-select{width:100%;color:#212529;display:block;line-height:1.5} .form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1} .btn-close,.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5} .form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border:0 solid;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;border-color:inherit} @media (prefers-reduced-motion:reduce){ .form-control{transition:none} .form-control::file-selector-button{transition:none} } .form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3} .form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border:0 solid;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;border-color:inherit} .form-check-input:focus,.form-select:focus{border-color:#86b7fe;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0} @media (prefers-reduced-motion:reduce){ .form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none} } .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3} .form-control-plaintext{padding:.375rem 0;margin-bottom:0;background-color:transparent;border:solid transparent;border-width:1px 0} .form-check-input,.form-select{background-color:#fff;-moz-appearance:none;background-repeat:no-repeat} .form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0} .form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem} .form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem} .form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem} .form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem} .form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem} .form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem} textarea.form-control{min-height:calc(1.5em + .75rem + 2px)} textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)} textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)} .form-control-color{max-width:3rem;height:auto;padding:.375rem} .form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem} .form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem} .form-select{padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;appearance:none} .form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none} .form-select:disabled{color:#6c757d;background-color:#e9ecef} .form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529} .form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem} .form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem} .form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem} .form-check .form-check-input{float:left;margin-left:-1.5em} .form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact} .form-check-input[type=checkbox]{border-radius:.25em} .form-check-input[type=radio]{border-radius:50%} .form-check-input:active{filter:brightness(90%)} .form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd} .form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")} .form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")} .form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")} .form-check-input:disabled{pointer-events:none;filter:none;opacity:.5} .form-switch{padding-left:2.5em} .form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .form-switch .form-check-input{transition:none} } .form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")} .form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")} .form-check-inline{display:inline-block;margin-right:1rem} .btn-check{clip:rect(0,0,0,0)} .form-floating,.input-group,.input-group .btn{position:relative} .btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65} .form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none} .form-range:focus{outline:0} .form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)} .form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)} .form-range::-moz-focus-outer{border:0} .form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none} @media (prefers-reduced-motion:reduce){ .form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none} } .form-range::-webkit-slider-thumb:active{background-color:#b6d4fe} .form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem} .form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none} @media (prefers-reduced-motion:reduce){ .form-range::-moz-range-thumb{-moz-transition:none;transition:none} } .form-range::-moz-range-thumb:active{background-color:#b6d4fe} .form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem} .form-range:disabled{pointer-events:none} .form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd} .form-range:disabled::-moz-range-thumb{background-color:#adb5bd} .form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem} .form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem} .form-floating>label{top:0;left:0;height:100%;padding:1rem .75rem;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out} .form-floating>.form-control::-webkit-input-placeholder{color:transparent} .form-floating>.form-control::-moz-placeholder{color:transparent} .form-floating>.form-control::placeholder{color:transparent} .form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem} .form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem} .form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)} .form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)} .form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)} .input-group{display:flex;flex-wrap:wrap;align-items:stretch;width:100%} .input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0} .input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem} .invalid-tooltip,.valid-tooltip{position:absolute;z-index:5;display:none;border-radius:.25rem;top:100%;max-width:100%} .input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem} .input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem} .input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem} .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-right-radius:0;border-bottom-right-radius:0} .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0} .valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754} .valid-tooltip{padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9)} .is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block} .form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)} .form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)} .was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)} .form-select.is-valid,.was-validated .form-select:valid{border-color:#198754;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)} .form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)} .form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754} .form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754} .form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)} .form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754} .invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545} .invalid-tooltip{padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9)} .btn,.btn:hover{color:#212529} .is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block} .form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)} .form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)} .was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)} .form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545;padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)} .form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)} .form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545} .form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545} .form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)} .form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545} .dropdown-toggle:empty::after,.dropend .dropdown-toggle:empty::after,.dropstart .dropdown-toggle:empty::after,.dropup .dropdown-toggle:empty::after{margin-left:0} .btn{display:inline-block;line-height:1.5;text-align:center;text-decoration:none;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .btn,.form-floating>label{transition:none} } .btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)} .btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65} .btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca} .btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)} .btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be} .btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)} .btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-check:focus+.btn-secondary,.btn-secondary.active:focus,.btn-secondary:active:focus,.btn-secondary:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)} .btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-check:focus+.btn-secondary,.btn-secondary:focus,.btn-secondary:hover{background-color:#5c636a;border-color:#565e64;color:#fff} .btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d} .btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e} .btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-check:focus+.btn-success,.btn-success.active:focus,.btn-success:active:focus,.btn-success:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)} .btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d} .btn-check:focus+.btn-success,.btn-success:focus,.btn-success:hover{background-color:#157347;border-color:#146c43;color:#fff} .btn-success{color:#fff;background-color:#198754;border-color:#198754} .btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f} .btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-check:focus+.btn-info,.btn-info.active:focus,.btn-info:active:focus,.btn-info:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)} .btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754} .btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0} .btn-check:focus+.btn-info,.btn-info:focus,.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2} .btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2} .btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0} .btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107} .btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720} .btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)} .btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720} .btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)} .btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-check:focus+.btn-danger,.btn-danger.active:focus,.btn-danger:active:focus,.btn-danger:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)} .btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107} .btn-check:focus+.btn-danger,.btn-danger:focus,.btn-danger:hover{background-color:#bb2d3b;border-color:#b02a37;color:#fff} .btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545} .btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834} .btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-check:focus+.btn-light,.btn-light.active:focus,.btn-light:active:focus,.btn-light:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)} .btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545} .btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-check:focus+.btn-light,.btn-light.active,.btn-light:active,.btn-light:focus,.btn-light:hover,.show>.btn-light.dropdown-toggle{background-color:#f9fafb;border-color:#f9fafb;color:#000} .btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa} .btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-check:focus+.btn-dark,.btn-dark.active:focus,.btn-dark:active:focus,.btn-dark:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)} .btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa} .btn-check:focus+.btn-dark,.btn-dark:focus,.btn-dark:hover{background-color:#1c1f23;border-color:#1a1e21;color:#fff} .btn-dark{color:#fff;background-color:#212529;border-color:#212529} .btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f} .btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-check:focus+.btn-outline-primary,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)} .btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529} .btn-outline-primary{color:#0d6efd;border-color:#0d6efd} .btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd} .btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)} .btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent} .btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active,.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d} .btn-outline-secondary{color:#6c757d;border-color:#6c757d} .btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-check:focus+.btn-outline-success,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)} .btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent} .btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active,.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754} .btn-outline-success{color:#198754;border-color:#198754} .btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-check:focus+.btn-outline-info,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)} .btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent} .btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active,.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0} .btn-outline-info{color:#0dcaf0;border-color:#0dcaf0} .btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-check:focus+.btn-outline-warning,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)} .btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent} .btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active,.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107} .btn-outline-warning{color:#ffc107;border-color:#ffc107} .btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-check:focus+.btn-outline-danger,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)} .btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent} .btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active,.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545} .btn-outline-danger{color:#dc3545;border-color:#dc3545} .btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-check:focus+.btn-outline-light,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)} .btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent} .btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active,.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa} .btn-outline-light{color:#f8f9fa;border-color:#f8f9fa} .btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-check:focus+.btn-outline-dark,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)} .btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent} .btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active,.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529} .btn-outline-dark{color:#212529;border-color:#212529} .dropdown-toggle::after,.dropup .dropdown-toggle::after{vertical-align:.255em;content:"";border-right:.3em solid transparent;border-left:.3em solid transparent} .btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent} .btn-link{color:#0d6efd;text-decoration:underline} .card-link:hover,.dropdown-item,.nav-link,.navbar-brand,.navbar-toggler:focus,.navbar-toggler:hover,.page-link{text-decoration:none} .btn-link:hover{color:#0a58ca} .btn-link.disabled,.btn-link:disabled{color:#6c757d} .btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem} .btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem} .fade{transition:opacity .15s linear} @media (prefers-reduced-motion:reduce){ .fade{transition:none} } .fade:not(.show){opacity:0} .collapse:not(.show){display:none} .collapsing{height:0;transition:height .35s} @media (prefers-reduced-motion:reduce){ .collapsing{transition:none} } .dropdown,.dropend,.dropstart,.dropup{position:relative} .dropdown-menu,.navbar-expand .navbar-nav .dropdown-menu{position:absolute} .dropdown-toggle::after{display:inline-block;margin-left:.255em;border-top:.3em solid;border-bottom:0} .dropdown-menu{top:100%;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem} .dropdown-menu[data-bs-popper]{left:0;margin-top:.125rem} .dropdown-menu-start{--bs-position:start} .dropdown-menu-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-end{--bs-position:end} .dropdown-menu-end[data-bs-popper]{right:0;left:auto} @media (min-width:576px){ .dropdown-menu-sm-start{--bs-position:start} .dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-sm-end{--bs-position:end} .dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto} } @media (min-width:768px){ .dropdown-menu-md-start{--bs-position:start} .dropdown-menu-md-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-md-end{--bs-position:end} .dropdown-menu-md-end[data-bs-popper]{right:0;left:auto} } @media (min-width:992px){ .dropdown-menu-lg-start{--bs-position:start} .dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-lg-end{--bs-position:end} .dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto} } @media (min-width:1200px){ .dropdown-menu-xl-start{--bs-position:start} .dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-xl-end{--bs-position:end} .dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto} } @media (min-width:1400px){ .dropdown-menu-xxl-start{--bs-position:start} .dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0} .dropdown-menu-xxl-end{--bs-position:end} .dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto} } .dropup .dropdown-menu{top:auto;bottom:100%} .dropup .dropdown-menu[data-bs-popper]{margin-top:0;margin-bottom:.125rem} .dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;border-top:0;border-bottom:.3em solid} .dropend .dropdown-toggle::after,.dropstart .dropdown-toggle::before{border-top:.3em solid transparent;border-bottom:.3em solid transparent;content:""} .dropend .dropdown-menu{top:0;right:auto;left:100%} .dropend .dropdown-menu[data-bs-popper]{margin-top:0;margin-left:.125rem} .dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;border-right:0;border-left:.3em solid;vertical-align:0} .dropstart .dropdown-menu{top:0;right:100%;left:auto} .dropstart .dropdown-menu[data-bs-popper]{margin-top:0;margin-right:.125rem} .dropstart .dropdown-toggle::after{margin-left:.255em;vertical-align:.255em;content:"";display:none} .dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;border-right:.3em solid;vertical-align:0} .card>hr,.dropstart .dropdown-toggle-split::before{margin-right:0} .dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)} .dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;color:#212529;text-align:inherit;background-color:transparent;border:0} .alert-link,.badge{font-weight:700} .dropdown-menu-dark,.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)} .dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef} .dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd} .dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent} .dropdown-menu.show{display:block} .dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d} .dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529} .dropdown-menu-dark .dropdown-item,.dropdown-menu-dark .dropdown-item-text{color:#dee2e6} .dropdown-menu-dark{color:#dee2e6;background-color:#343a40} .dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)} .dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd} .dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd} .dropdown-menu-dark .dropdown-header{color:#adb5bd} .btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle} .btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto} .btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1} .btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start} .btn-toolbar .input-group{width:auto} .btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px} .card>hr,.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0} .btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} .btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0} .dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem} .btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem} .btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem} .btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center} .btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%} .btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px} .btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0} .btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0} .nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0} .nav-link{display:block;padding:.5rem 1rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .nav-link{transition:none} } .nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default} .nav-tabs{border-bottom:1px solid #dee2e6} .nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem} .nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate} .nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent} .nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff} .nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} .nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem} .nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd} .nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center} .nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center} .tab-content>.tab-pane{display:none} .tab-content>.active{display:block} .navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem} .navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between} .navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem} .card-header-pills,.card-header-tabs{margin-right:-.5rem;margin-left:-.5rem} .navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0} .navbar-nav .nav-link{padding-right:0;padding-left:0} .navbar-nav .dropdown-menu{position:static} .navbar-text{padding-top:.5rem;padding-bottom:.5rem} .navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center} .navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out} @media (prefers-reduced-motion:reduce){ .navbar-toggler{transition:none} } .navbar-toggler:focus{outline:0;box-shadow:0 0 0 .25rem} .accordion-button:focus,.btn-close:focus,.page-link:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.25);outline:0} .navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%} .navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto} @media (min-width:576px){ .navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-sm .navbar-nav{flex-direction:row} .navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-sm .navbar-nav-scroll{overflow:visible} .navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-sm .navbar-toggler{display:none} } @media (min-width:768px){ .navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-md .navbar-nav{flex-direction:row} .navbar-expand-md .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-md .navbar-nav-scroll{overflow:visible} .navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-md .navbar-toggler{display:none} } @media (min-width:992px){ .navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-lg .navbar-nav{flex-direction:row} .navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-lg .navbar-nav-scroll{overflow:visible} .navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-lg .navbar-toggler{display:none} } @media (min-width:1200px){ .navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-xl .navbar-nav{flex-direction:row} .navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-xl .navbar-nav-scroll{overflow:visible} .navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-xl .navbar-toggler{display:none} } @media (min-width:1400px){ .navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand-xxl .navbar-nav{flex-direction:row} .navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute} .navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand-xxl .navbar-nav-scroll{overflow:visible} .navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto} .navbar-expand-xxl .navbar-toggler{display:none} } .navbar-expand{flex-wrap:nowrap;justify-content:flex-start} .navbar-expand .navbar-nav{flex-direction:row} .navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} .navbar-expand .navbar-nav-scroll{overflow:visible} .navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto} .badge:empty,.navbar-expand .navbar-toggler,.toast.hide{display:none} .card,.progress-bar{flex-direction:column} .navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)} .navbar-light .navbar-nav .nav-link,.navbar-light .navbar-text{color:rgba(0,0,0,.55)} .navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)} .navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)} .navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)} .navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)} .navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")} .navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff} .navbar-dark .navbar-nav .nav-link,.navbar-dark .navbar-text{color:rgba(255,255,255,.55)} .navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)} .navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)} .navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff} .navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)} .navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")} .card{position:relative;display:flex;min-width:0;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem} .card-img,.card-img-top,.card>.list-group:first-child{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} .card-img,.card-img-bottom,.card>.list-group:last-child{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)} .card>.list-group{border-top:inherit;border-bottom:inherit} .card>.list-group:first-child{border-top-width:0} .card>.list-group:last-child{border-bottom-width:0} .card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0} .card-body{flex:1 1 auto;padding:1rem} .card-footer,.card-header{padding:.5rem 1rem;background-color:rgba(0,0,0,.03)} .card-title{margin-bottom:.5rem} .card-header,.card-subtitle,.card-text:last-child{margin-bottom:0} .card-subtitle{margin-top:-.25rem} .card-link+.card-link{margin-left:1rem} .card-header{border-bottom:1px solid rgba(0,0,0,.125)} .card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0} .card-footer{border-top:1px solid rgba(0,0,0,.125)} .card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)} .card-header-tabs{margin-bottom:-.5rem;border-bottom:0} .card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(.25rem - 1px)} .accordion-button,.alert,.btn .badge,.list-group-item,.page-link{position:relative} .accordion-body,.accordion-button{padding:1rem 1.25rem} .card-img,.card-img-bottom,.card-img-top{width:100%} .card-group>.card{margin-bottom:.75rem} @media (min-width:576px){ .card-group{display:flex;flex-flow:row wrap} .card-group>.card{flex:1 0 0%;margin-bottom:0} .card-group>.card+.card{margin-left:0;border-left:0} .card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0} .card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0} .card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0} .card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} .card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0} .card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0} } .accordion-button{display:flex;align-items:center;width:100%;font-size:1rem;color:#212529;text-align:left;background-color:transparent;border:1px solid rgba(0,0,0,.125);border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s} .badge,.progress-bar{text-align:center;white-space:nowrap} .modal-open,.progress,.progress-bar{overflow:hidden} .accordion-button.collapsed{border-bottom-width:0} .accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff} .accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)} .accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out} @media (prefers-reduced-motion:reduce){ .accordion-button,.accordion-button::after{transition:none} } .accordion-button:focus{z-index:3;border-color:#86b7fe} .accordion-header{margin-bottom:0} .alert,.breadcrumb{margin-bottom:1rem} .accordion-item:first-of-type .accordion-button{border-top-left-radius:.25rem;border-top-right-radius:.25rem} .accordion-item:last-of-type .accordion-button.collapsed,.accordion-item:last-of-type .accordion-collapse{border-bottom-width:1px;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem} .accordion-collapse{border:solid rgba(0,0,0,.125);border-width:0 1px} .accordion-flush .accordion-button{border-right:0;border-left:0;border-radius:0} .accordion-flush .accordion-collapse{border-width:0} .accordion-flush .accordion-item:first-of-type .accordion-button{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0} .accordion-flush .accordion-item:last-of-type .accordion-button.collapsed{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0} .breadcrumb{display:flex;flex-wrap:wrap;padding:0} .breadcrumb-item+.breadcrumb-item{padding-left:.5rem} .breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")} .breadcrumb-item.active{color:#6c757d} .page-link:focus,.page-link:hover{color:#0a58ca;background-color:#e9ecef} .pagination{display:flex;padding-left:0} .page-link{display:block;color:#0d6efd;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;padding:.375rem .75rem} @media (prefers-reduced-motion:reduce){ .page-link{transition:none} } .page-link:hover{z-index:2;border-color:#dee2e6} .page-link:focus{z-index:3} .page-item:not(:first-child) .page-link{margin-left:-1px} .page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd} .page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6} .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem} .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem} .pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem} .pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem} .pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem} .pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem} .pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem} .pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem} .badge{display:inline-block;padding:.35em .65em;font-size:.75em;line-height:1;color:#fff;vertical-align:baseline;border-radius:.25rem} .btn .badge{top:-1px} .alert{padding:1rem;border:1px solid transparent;border-radius:.25rem} .list-group,.progress{display:flex;border-radius:.25rem} .alert-heading{color:inherit} .alert-dismissible{padding-right:3rem} .alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem} .alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe} .alert-primary .alert-link{color:#06357a} .alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8} .alert-secondary .alert-link{color:#34383c} .alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc} .alert-success .alert-link{color:#0c4128} .alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb} .alert-info .alert-link{color:#04414d} .alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5} .alert-warning .alert-link{color:#523e02} .alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7} .alert-danger .alert-link{color:#6a1a21} .alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe} .alert-light .alert-link{color:#4f5050} .alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf} .alert-dark .alert-link{color:#101214} @-webkit-keyframes progress-bar-stripes{ 0%{background-position-x:1rem} } @keyframes progress-bar-stripes{ 0%{background-position-x:1rem} } .progress{height:1rem;font-size:.75rem;background-color:#e9ecef} .progress-bar{display:flex;justify-content:center;color:#fff;background-color:#0d6efd;transition:width .6s} .popover,.tooltip{font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;text-decoration:none} .progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem} .progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes} .list-group{flex-direction:column;padding-left:0;margin-bottom:0} .list-group-item-action{width:100%;color:#495057;text-align:inherit} .list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa} .list-group-item-action:active{color:#212529;background-color:#e9ecef} .list-group-item{display:block;padding:.5rem 1rem;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)} .list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit} .list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit} .list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff} .list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd} .list-group-item+.list-group-item{border-top-width:0} .list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px} .list-group-horizontal{flex-direction:row} .list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal>.list-group-item.active{margin-top:0} .list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} @media (min-width:576px){ .list-group-horizontal-sm{flex-direction:row} .list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-sm>.list-group-item.active{margin-top:0} .list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:768px){ .list-group-horizontal-md{flex-direction:row} .list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-md>.list-group-item.active{margin-top:0} .list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:992px){ .list-group-horizontal-lg{flex-direction:row} .list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-lg>.list-group-item.active{margin-top:0} .list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:1200px){ .list-group-horizontal-xl{flex-direction:row} .list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-xl>.list-group-item.active{margin-top:0} .list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } @media (min-width:1400px){ .list-group-horizontal-xxl{flex-direction:row} .list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} .list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} .list-group-horizontal-xxl>.list-group-item.active{margin-top:0} .list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} .list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} } .list-group-flush{border-radius:0} .list-group-flush>.list-group-item{border-width:0 0 1px} .list-group-flush>.list-group-item:last-child{border-bottom-width:0} .list-group-item-primary{color:#084298;background-color:#cfe2ff} .list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6} .list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298} .list-group-item-secondary{color:#41464b;background-color:#e2e3e5} .list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce} .list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b} .list-group-item-success{color:#0f5132;background-color:#d1e7dd} .list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7} .list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132} .list-group-item-info{color:#055160;background-color:#cff4fc} .list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3} .list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160} .list-group-item-warning{color:#664d03;background-color:#fff3cd} .list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9} .list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03} .list-group-item-danger{color:#842029;background-color:#f8d7da} .list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4} .list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029} .list-group-item-light{color:#636464;background-color:#fefefe} .list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5} .list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464} .list-group-item-dark{color:#141619;background-color:#d3d3d4} .list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf} .list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619} .btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em;color:#000;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem} .toast,.toast-header{background-color:rgba(255,255,255,.85)} .modal-content,.toast,.toast-header{background-clip:padding-box} .btn-close:hover{color:#000;text-decoration:none;opacity:.75} .btn-close:focus{opacity:1} .btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25} .modal-backdrop.fade,.toast:not(.showing):not(.show),.tooltip{opacity:0} .btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)} .toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem} .toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none} .toast-container>:not(:last-child){margin-bottom:.75rem} .toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} .toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem} .toast-body{padding:.75rem;word-wrap:break-word} .modal-open .modal{overflow-x:hidden;overflow-y:auto} .modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0} .modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none} .modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)} @media (prefers-reduced-motion:reduce){ .progress-bar{transition:none} .progress-bar-animated{-webkit-animation:none;animation:none} .modal.fade .modal-dialog{transition:none} } .modal.show .modal-dialog{transform:none} .modal.modal-static .modal-dialog{transform:scale(1.02)} .modal-dialog-scrollable{height:calc(100% - 1rem)} .modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden} .modal-dialog-scrollable .modal-body,.modal-fullscreen .modal-body{overflow-y:auto} .modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)} .modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0} .carousel-dark .carousel-indicators [data-bs-target],.modal-backdrop,.tooltip-inner{background-color:#000} .modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh} .modal-backdrop.show{opacity:.5} .modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)} .modal-header .btn-close{padding:.5rem;margin:-.5rem -.5rem -.5rem auto} .modal-title{margin-bottom:0;line-height:1.5} .modal-body{position:relative;flex:1 1 auto;padding:1rem} .modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)} .modal-footer>*{margin:.25rem} .modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll} @media (min-width:576px){ .modal-dialog{max-width:500px;margin:1.75rem auto} .modal-dialog-scrollable{height:calc(100% - 3.5rem)} .modal-dialog-centered{min-height:calc(100% - 3.5rem)} .modal-sm{max-width:300px} } @media (min-width:992px){ .modal-lg,.modal-xl{max-width:800px} } @media (min-width:1200px){ .modal-xl{max-width:1140px} } .modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0} @media (max-width:575.98px){ .modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0} .modal-fullscreen-sm-down .modal-body{overflow-y:auto} } @media (max-width:767.98px){ .modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0} .modal-fullscreen-md-down .modal-body{overflow-y:auto} } @media (max-width:991.98px){ .modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0} .modal-fullscreen-lg-down .modal-body{overflow-y:auto} } @media (max-width:1199.98px){ .modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0} .modal-fullscreen-xl-down .modal-body{overflow-y:auto} } @media (max-width:1399.98px){ .modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0} .modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0} .modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0} .modal-fullscreen-xxl-down .modal-body{overflow-y:auto} } .tooltip{position:absolute;z-index:1070;display:block;margin:0;text-align:left;text-align:start} .tooltip.show{opacity:.9} .tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem} .tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid} .bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0} .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0} .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000} .bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem} .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:.4rem;height:.8rem} .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000} .bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0} .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0} .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000} .bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem} .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:.4rem;height:.8rem} .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000} .tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;border-radius:.25rem} .carousel-indicators [data-bs-target],.popover{background-color:#fff;background-clip:padding-box} .popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;text-align:left;text-align:start;border:1px solid rgba(0,0,0,.2);border-radius:.3rem} .carousel,.carousel-inner,.carousel-item{position:relative} .popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem} .popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid} .bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)} .bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff} .bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem} .bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff} .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)} .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff} .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0} .bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem} .bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)} .bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff} .popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)} .popover-header:empty{display:none} .popover-body{padding:1rem;color:#212529} .carousel.pointer-event{touch-action:pan-y} .carousel-inner{width:100%;overflow:hidden} .carousel-inner::after{display:block;clear:both;content:""} .carousel-item{display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out} .carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block} .active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)} .active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)} .carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none} .carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1} .carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s} @media (prefers-reduced-motion:reduce){ .carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start,.carousel-item{transition:none} } .carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s} .carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9} .carousel-control-prev{left:0} .carousel-control-next{right:0} .carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%} .carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")} .carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")} .carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%} .spinner-border,.spinner-grow{display:inline-block;vertical-align:text-bottom} .carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s} .carousel-indicators .active{opacity:1} .carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center} .carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)} .carousel-dark .carousel-caption{color:#000} @-webkit-keyframes spinner-border{ to{transform:rotate(360deg)} } @keyframes spinner-border{ to{transform:rotate(360deg)} } .spinner-border{width:2rem;height:2rem;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border} .spinner-border-sm{width:1rem;height:1rem;border-width:.2em} @-webkit-keyframes spinner-grow{ 0%{transform:scale(0)} 50%{opacity:1;transform:none} } @keyframes spinner-grow{ 0%{transform:scale(0)} 50%{opacity:1;transform:none} } .spinner-grow{width:2rem;height:2rem;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow} .spinner-grow-sm{width:1rem;height:1rem} @media (prefers-reduced-motion:reduce){ .carousel-control-next,.carousel-control-prev,.carousel-indicators [data-bs-target]{transition:none} .spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s} } .clearfix::after{display:block;clear:both;content:""} .link-primary{color:#0d6efd} .link-primary:focus,.link-primary:hover{color:#0a58ca} .link-secondary{color:#6c757d} .link-secondary:focus,.link-secondary:hover{color:#565e64} .link-success{color:#198754} .link-success:focus,.link-success:hover{color:#146c43} .link-info{color:#0dcaf0} .link-info:focus,.link-info:hover{color:#3dd5f3} .link-warning{color:#ffc107} .link-warning:focus,.link-warning:hover{color:#ffcd39} .link-danger{color:#dc3545} .link-danger:focus,.link-danger:hover{color:#b02a37} .link-light{color:#f8f9fa} .link-light:focus,.link-light:hover{color:#f9fafb} .link-dark{color:#212529} .link-dark:focus,.link-dark:hover{color:#1a1e21} .ratio{position:relative;width:100%} .ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""} .ratio>*{position:absolute;top:0;left:0;width:100%;height:100%} .fixed-bottom,.fixed-top{position:fixed;z-index:1030;right:0;left:0} .ratio-1x1{--bs-aspect-ratio:100%} .ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)} .ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)} .ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)} .fixed-top{top:0} .fixed-bottom{bottom:0} .sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} @media (min-width:576px){ .sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:768px){ .sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:992px){ .sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:1200px){ .sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } @media (min-width:1400px){ .sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} } .visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important} .stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""} .text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .align-baseline{vertical-align:baseline!important} .align-top{vertical-align:top!important} .align-middle{vertical-align:middle!important} .align-bottom{vertical-align:bottom!important} .align-text-bottom{vertical-align:text-bottom!important} .align-text-top{vertical-align:text-top!important} .float-start{float:left!important} .float-end{float:right!important} .float-none{float:none!important} .overflow-auto{overflow:auto!important} .overflow-hidden{overflow:hidden!important} .overflow-visible{overflow:visible!important} .overflow-scroll{overflow:scroll!important} .d-inline{display:inline!important} .d-inline-block{display:inline-block!important} .d-block{display:block!important} .d-grid{display:grid!important} .d-table{display:table!important} .d-table-row{display:table-row!important} .d-table-cell{display:table-cell!important} .d-flex{display:flex!important} .d-inline-flex{display:inline-flex!important} .d-none{display:none!important} .shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important} .shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important} .shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important} .shadow-none{box-shadow:none!important} .position-static{position:static!important} .position-relative{position:relative!important} .position-absolute{position:absolute!important} .position-fixed{position:fixed!important} .position-sticky{position:-webkit-sticky!important;position:sticky!important} .top-0{top:0!important} .top-50{top:50%!important} .top-100{top:100%!important} .bottom-0{bottom:0!important} .bottom-50{bottom:50%!important} .bottom-100{bottom:100%!important} .start-0{left:0!important} .start-50{left:50%!important} .start-100{left:100%!important} .end-0{right:0!important} .end-50{right:50%!important} .end-100{right:100%!important} .translate-middle{transform:translate(-50%,-50%)!important} .translate-middle-x{transform:translateX(-50%)!important} .translate-middle-y{transform:translateY(-50%)!important} .border{border:1px solid #dee2e6!important} .border-0{border:0!important} .border-top{border-top:1px solid #dee2e6!important} .border-top-0{border-top:0!important} .border-end{border-right:1px solid #dee2e6!important} .border-end-0{border-right:0!important} .border-bottom{border-bottom:1px solid #dee2e6!important} .border-bottom-0{border-bottom:0!important} .border-start{border-left:1px solid #dee2e6!important} .border-start-0{border-left:0!important} .border-primary{border-color:#0d6efd!important} .border-secondary{border-color:#6c757d!important} .border-success{border-color:#198754!important} .border-info{border-color:#0dcaf0!important} .border-warning{border-color:#ffc107!important} .border-danger{border-color:#dc3545!important} .border-light{border-color:#f8f9fa!important} .border-dark{border-color:#212529!important} .border-white{border-color:#fff!important} .border-0{border-width:0!important} .border-1{border-width:1px!important} .border-2{border-width:2px!important} .border-3{border-width:3px!important} .border-4{border-width:4px!important} .border-5{border-width:5px!important} .w-25{width:25%!important} .w-50{width:50%!important} .w-75{width:75%!important} .w-100{width:100%!important} .w-auto{width:auto!important} .mw-100{max-width:100%!important} .vw-100{width:100vw!important} .min-vw-100{min-width:100vw!important} .h-25{height:25%!important} .h-50{height:50%!important} .h-75{height:75%!important} .h-100{height:100%!important} .h-auto{height:auto!important} .mh-100{max-height:100%!important} .vh-100{height:100vh!important} .min-vh-100{min-height:100vh!important} .flex-fill{flex:1 1 auto!important} .flex-row{flex-direction:row!important} .flex-column{flex-direction:column!important} .flex-row-reverse{flex-direction:row-reverse!important} .flex-column-reverse{flex-direction:column-reverse!important} .flex-grow-0{flex-grow:0!important} .flex-grow-1{flex-grow:1!important} .flex-shrink-0{flex-shrink:0!important} .flex-shrink-1{flex-shrink:1!important} .flex-wrap{flex-wrap:wrap!important} .flex-nowrap{flex-wrap:nowrap!important} .flex-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-0{gap:0!important} .gap-1{gap:.25rem!important} .gap-2{gap:.5rem!important} .gap-3{gap:1rem!important} .gap-4{gap:1.5rem!important} .gap-5{gap:3rem!important} .justify-content-start{justify-content:flex-start!important} .justify-content-end{justify-content:flex-end!important} .justify-content-center{justify-content:center!important} .justify-content-between{justify-content:space-between!important} .justify-content-around{justify-content:space-around!important} .justify-content-evenly{justify-content:space-evenly!important} .align-items-start{align-items:flex-start!important} .align-items-end{align-items:flex-end!important} .align-items-center{align-items:center!important} .align-items-baseline{align-items:baseline!important} .align-items-stretch{align-items:stretch!important} .align-content-start{align-content:flex-start!important} .align-content-end{align-content:flex-end!important} .align-content-center{align-content:center!important} .align-content-between{align-content:space-between!important} .align-content-around{align-content:space-around!important} .align-content-stretch{align-content:stretch!important} .align-self-auto{align-self:auto!important} .align-self-start{align-self:flex-start!important} .align-self-end{align-self:flex-end!important} .align-self-center{align-self:center!important} .align-self-baseline{align-self:baseline!important} .align-self-stretch{align-self:stretch!important} .order-first{order:-1!important} .order-0{order:0!important} .order-1{order:1!important} .order-2{order:2!important} .order-3{order:3!important} .order-4{order:4!important} .order-5{order:5!important} .order-last{order:6!important} .m-0{margin:0!important} .m-1{margin:.25rem!important} .m-2{margin:.5rem!important} .m-3{margin:1rem!important} .m-4{margin:1.5rem!important} .m-5{margin:3rem!important} .m-auto{margin:auto!important} .mx-0{margin-right:0!important;margin-left:0!important} .mx-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-3{margin-right:1rem!important;margin-left:1rem!important} .mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-5{margin-right:3rem!important;margin-left:3rem!important} .mx-auto{margin-right:auto!important;margin-left:auto!important} .my-0{margin-top:0!important;margin-bottom:0!important} .my-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-0{margin-top:0!important} .mt-1{margin-top:.25rem!important} .mt-2{margin-top:.5rem!important} .mt-3{margin-top:1rem!important} .mt-4{margin-top:1.5rem!important} .mt-5{margin-top:3rem!important} .mt-auto{margin-top:auto!important} .me-0{margin-right:0!important} .me-1{margin-right:.25rem!important} .me-2{margin-right:.5rem!important} .me-3{margin-right:1rem!important} .me-4{margin-right:1.5rem!important} .me-5{margin-right:3rem!important} .me-auto{margin-right:auto!important} .mb-0{margin-bottom:0!important} .mb-1{margin-bottom:.25rem!important} .mb-2{margin-bottom:.5rem!important} .mb-3{margin-bottom:1rem!important} .mb-4{margin-bottom:1.5rem!important} .mb-5{margin-bottom:3rem!important} .mb-auto{margin-bottom:auto!important} .ms-0{margin-left:0!important} .ms-1{margin-left:.25rem!important} .ms-2{margin-left:.5rem!important} .ms-3{margin-left:1rem!important} .ms-4{margin-left:1.5rem!important} .ms-5{margin-left:3rem!important} .ms-auto{margin-left:auto!important} .p-0{padding:0!important} .p-1{padding:.25rem!important} .p-2{padding:.5rem!important} .p-3{padding:1rem!important} .p-4{padding:1.5rem!important} .p-5{padding:3rem!important} .px-0{padding-right:0!important;padding-left:0!important} .px-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-3{padding-right:1rem!important;padding-left:1rem!important} .px-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-5{padding-right:3rem!important;padding-left:3rem!important} .py-0{padding-top:0!important;padding-bottom:0!important} .py-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-0{padding-top:0!important} .pt-1{padding-top:.25rem!important} .pt-2{padding-top:.5rem!important} .pt-3{padding-top:1rem!important} .pt-4{padding-top:1.5rem!important} .pt-5{padding-top:3rem!important} .pe-0{padding-right:0!important} .pe-1{padding-right:.25rem!important} .pe-2{padding-right:.5rem!important} .pe-3{padding-right:1rem!important} .pe-4{padding-right:1.5rem!important} .pe-5{padding-right:3rem!important} .pb-0{padding-bottom:0!important} .pb-1{padding-bottom:.25rem!important} .pb-2{padding-bottom:.5rem!important} .pb-3{padding-bottom:1rem!important} .pb-4{padding-bottom:1.5rem!important} .pb-5{padding-bottom:3rem!important} .ps-0{padding-left:0!important} .ps-1{padding-left:.25rem!important} .ps-2{padding-left:.5rem!important} .ps-3{padding-left:1rem!important} .ps-4{padding-left:1.5rem!important} .ps-5{padding-left:3rem!important} .fs-1{font-size:calc(1.375rem + 1.5vw)!important} .fs-2{font-size:calc(1.325rem + .9vw)!important} .fs-3{font-size:calc(1.3rem + .6vw)!important} .fs-4{font-size:calc(1.275rem + .3vw)!important} .fs-5{font-size:1.25rem!important} .fs-6{font-size:1rem!important} .fst-italic{font-style:italic!important} .fst-normal{font-style:normal!important} .fw-light{font-weight:300!important} .fw-lighter{font-weight:lighter!important} .fw-normal{font-weight:400!important} .fw-bold{font-weight:700!important} .fw-bolder{font-weight:bolder!important} .text-lowercase{text-transform:lowercase!important} .text-uppercase{text-transform:uppercase!important} .text-capitalize{text-transform:capitalize!important} .text-start{text-align:left!important} .text-end{text-align:right!important} .text-center{text-align:center!important} .text-primary{color:#0d6efd!important} .text-secondary{color:#6c757d!important} .text-success{color:#198754!important} .text-info{color:#0dcaf0!important} .text-warning{color:#ffc107!important} .text-danger{color:#dc3545!important} .text-light{color:#f8f9fa!important} .text-dark{color:#212529!important} .text-white{color:#fff!important} .text-body{color:#212529!important} .text-muted{color:#6c757d!important} .text-black-50{color:rgba(0,0,0,.5)!important} .text-white-50{color:rgba(255,255,255,.5)!important} .text-reset{color:inherit!important} .lh-1{line-height:1!important} .lh-sm{line-height:1.25!important} .lh-base{line-height:1.5!important} .lh-lg{line-height:2!important} .bg-primary{background-color:#0d6efd!important} .bg-secondary{background-color:#6c757d!important} .bg-success{background-color:#198754!important} .bg-info{background-color:#0dcaf0!important} .bg-warning{background-color:#ffc107!important} .bg-danger{background-color:#dc3545!important} .bg-light{background-color:#f8f9fa!important} .bg-dark{background-color:#212529!important} .bg-body,.bg-white{background-color:#fff!important} .bg-transparent{background-color:transparent!important} .bg-gradient{background-image:var(--bs-gradient)!important} .text-wrap{white-space:normal!important} .text-nowrap{white-space:nowrap!important} .text-decoration-none{text-decoration:none!important} .text-decoration-underline{text-decoration:underline!important} .text-decoration-line-through{text-decoration:line-through!important} .text-break{word-wrap:break-word!important;word-break:break-word!important} .font-monospace{font-family:var(--bs-font-monospace)!important} .user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important} .user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important} .user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important} .pe-none{pointer-events:none!important} .pe-auto{pointer-events:auto!important} .rounded{border-radius:.25rem!important} .rounded-0{border-radius:0!important} .rounded-1{border-radius:.2rem!important} .rounded-2{border-radius:.25rem!important} .rounded-3{border-radius:.3rem!important} .rounded-circle{border-radius:50%!important} .rounded-pill{border-radius:50rem!important} .rounded-end,.rounded-top{border-top-right-radius:.25rem!important} .rounded-bottom,.rounded-end{border-bottom-right-radius:.25rem!important} .rounded-bottom,.rounded-start{border-bottom-left-radius:.25rem!important} .rounded-start,.rounded-top{border-top-left-radius:.25rem!important} .visible{visibility:visible!important} .invisible{visibility:hidden!important} @media (min-width:576px){ .float-sm-start{float:left!important} .float-sm-end{float:right!important} .float-sm-none{float:none!important} .d-sm-inline{display:inline!important} .d-sm-inline-block{display:inline-block!important} .d-sm-block{display:block!important} .d-sm-grid{display:grid!important} .d-sm-table{display:table!important} .d-sm-table-row{display:table-row!important} .d-sm-table-cell{display:table-cell!important} .d-sm-flex{display:flex!important} .d-sm-inline-flex{display:inline-flex!important} .d-sm-none{display:none!important} .flex-sm-fill{flex:1 1 auto!important} .flex-sm-row{flex-direction:row!important} .flex-sm-column{flex-direction:column!important} .flex-sm-row-reverse{flex-direction:row-reverse!important} .flex-sm-column-reverse{flex-direction:column-reverse!important} .flex-sm-grow-0{flex-grow:0!important} .flex-sm-grow-1{flex-grow:1!important} .flex-sm-shrink-0{flex-shrink:0!important} .flex-sm-shrink-1{flex-shrink:1!important} .flex-sm-wrap{flex-wrap:wrap!important} .flex-sm-nowrap{flex-wrap:nowrap!important} .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-sm-0{gap:0!important} .gap-sm-1{gap:.25rem!important} .gap-sm-2{gap:.5rem!important} .gap-sm-3{gap:1rem!important} .gap-sm-4{gap:1.5rem!important} .gap-sm-5{gap:3rem!important} .justify-content-sm-start{justify-content:flex-start!important} .justify-content-sm-end{justify-content:flex-end!important} .justify-content-sm-center{justify-content:center!important} .justify-content-sm-between{justify-content:space-between!important} .justify-content-sm-around{justify-content:space-around!important} .justify-content-sm-evenly{justify-content:space-evenly!important} .align-items-sm-start{align-items:flex-start!important} .align-items-sm-end{align-items:flex-end!important} .align-items-sm-center{align-items:center!important} .align-items-sm-baseline{align-items:baseline!important} .align-items-sm-stretch{align-items:stretch!important} .align-content-sm-start{align-content:flex-start!important} .align-content-sm-end{align-content:flex-end!important} .align-content-sm-center{align-content:center!important} .align-content-sm-between{align-content:space-between!important} .align-content-sm-around{align-content:space-around!important} .align-content-sm-stretch{align-content:stretch!important} .align-self-sm-auto{align-self:auto!important} .align-self-sm-start{align-self:flex-start!important} .align-self-sm-end{align-self:flex-end!important} .align-self-sm-center{align-self:center!important} .align-self-sm-baseline{align-self:baseline!important} .align-self-sm-stretch{align-self:stretch!important} .order-sm-first{order:-1!important} .order-sm-0{order:0!important} .order-sm-1{order:1!important} .order-sm-2{order:2!important} .order-sm-3{order:3!important} .order-sm-4{order:4!important} .order-sm-5{order:5!important} .order-sm-last{order:6!important} .m-sm-0{margin:0!important} .m-sm-1{margin:.25rem!important} .m-sm-2{margin:.5rem!important} .m-sm-3{margin:1rem!important} .m-sm-4{margin:1.5rem!important} .m-sm-5{margin:3rem!important} .m-sm-auto{margin:auto!important} .mx-sm-0{margin-right:0!important;margin-left:0!important} .mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-sm-3{margin-right:1rem!important;margin-left:1rem!important} .mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-sm-5{margin-right:3rem!important;margin-left:3rem!important} .mx-sm-auto{margin-right:auto!important;margin-left:auto!important} .my-sm-0{margin-top:0!important;margin-bottom:0!important} .my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-sm-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-sm-0{margin-top:0!important} .mt-sm-1{margin-top:.25rem!important} .mt-sm-2{margin-top:.5rem!important} .mt-sm-3{margin-top:1rem!important} .mt-sm-4{margin-top:1.5rem!important} .mt-sm-5{margin-top:3rem!important} .mt-sm-auto{margin-top:auto!important} .me-sm-0{margin-right:0!important} .me-sm-1{margin-right:.25rem!important} .me-sm-2{margin-right:.5rem!important} .me-sm-3{margin-right:1rem!important} .me-sm-4{margin-right:1.5rem!important} .me-sm-5{margin-right:3rem!important} .me-sm-auto{margin-right:auto!important} .mb-sm-0{margin-bottom:0!important} .mb-sm-1{margin-bottom:.25rem!important} .mb-sm-2{margin-bottom:.5rem!important} .mb-sm-3{margin-bottom:1rem!important} .mb-sm-4{margin-bottom:1.5rem!important} .mb-sm-5{margin-bottom:3rem!important} .mb-sm-auto{margin-bottom:auto!important} .ms-sm-0{margin-left:0!important} .ms-sm-1{margin-left:.25rem!important} .ms-sm-2{margin-left:.5rem!important} .ms-sm-3{margin-left:1rem!important} .ms-sm-4{margin-left:1.5rem!important} .ms-sm-5{margin-left:3rem!important} .ms-sm-auto{margin-left:auto!important} .p-sm-0{padding:0!important} .p-sm-1{padding:.25rem!important} .p-sm-2{padding:.5rem!important} .p-sm-3{padding:1rem!important} .p-sm-4{padding:1.5rem!important} .p-sm-5{padding:3rem!important} .px-sm-0{padding-right:0!important;padding-left:0!important} .px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-sm-3{padding-right:1rem!important;padding-left:1rem!important} .px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-sm-5{padding-right:3rem!important;padding-left:3rem!important} .py-sm-0{padding-top:0!important;padding-bottom:0!important} .py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-sm-0{padding-top:0!important} .pt-sm-1{padding-top:.25rem!important} .pt-sm-2{padding-top:.5rem!important} .pt-sm-3{padding-top:1rem!important} .pt-sm-4{padding-top:1.5rem!important} .pt-sm-5{padding-top:3rem!important} .pe-sm-0{padding-right:0!important} .pe-sm-1{padding-right:.25rem!important} .pe-sm-2{padding-right:.5rem!important} .pe-sm-3{padding-right:1rem!important} .pe-sm-4{padding-right:1.5rem!important} .pe-sm-5{padding-right:3rem!important} .pb-sm-0{padding-bottom:0!important} .pb-sm-1{padding-bottom:.25rem!important} .pb-sm-2{padding-bottom:.5rem!important} .pb-sm-3{padding-bottom:1rem!important} .pb-sm-4{padding-bottom:1.5rem!important} .pb-sm-5{padding-bottom:3rem!important} .ps-sm-0{padding-left:0!important} .ps-sm-1{padding-left:.25rem!important} .ps-sm-2{padding-left:.5rem!important} .ps-sm-3{padding-left:1rem!important} .ps-sm-4{padding-left:1.5rem!important} .ps-sm-5{padding-left:3rem!important} .text-sm-start{text-align:left!important} .text-sm-end{text-align:right!important} .text-sm-center{text-align:center!important} } @media (min-width:768px){ .float-md-start{float:left!important} .float-md-end{float:right!important} .float-md-none{float:none!important} .d-md-inline{display:inline!important} .d-md-inline-block{display:inline-block!important} .d-md-block{display:block!important} .d-md-grid{display:grid!important} .d-md-table{display:table!important} .d-md-table-row{display:table-row!important} .d-md-table-cell{display:table-cell!important} .d-md-flex{display:flex!important} .d-md-inline-flex{display:inline-flex!important} .d-md-none{display:none!important} .flex-md-fill{flex:1 1 auto!important} .flex-md-row{flex-direction:row!important} .flex-md-column{flex-direction:column!important} .flex-md-row-reverse{flex-direction:row-reverse!important} .flex-md-column-reverse{flex-direction:column-reverse!important} .flex-md-grow-0{flex-grow:0!important} .flex-md-grow-1{flex-grow:1!important} .flex-md-shrink-0{flex-shrink:0!important} .flex-md-shrink-1{flex-shrink:1!important} .flex-md-wrap{flex-wrap:wrap!important} .flex-md-nowrap{flex-wrap:nowrap!important} .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-md-0{gap:0!important} .gap-md-1{gap:.25rem!important} .gap-md-2{gap:.5rem!important} .gap-md-3{gap:1rem!important} .gap-md-4{gap:1.5rem!important} .gap-md-5{gap:3rem!important} .justify-content-md-start{justify-content:flex-start!important} .justify-content-md-end{justify-content:flex-end!important} .justify-content-md-center{justify-content:center!important} .justify-content-md-between{justify-content:space-between!important} .justify-content-md-around{justify-content:space-around!important} .justify-content-md-evenly{justify-content:space-evenly!important} .align-items-md-start{align-items:flex-start!important} .align-items-md-end{align-items:flex-end!important} .align-items-md-center{align-items:center!important} .align-items-md-baseline{align-items:baseline!important} .align-items-md-stretch{align-items:stretch!important} .align-content-md-start{align-content:flex-start!important} .align-content-md-end{align-content:flex-end!important} .align-content-md-center{align-content:center!important} .align-content-md-between{align-content:space-between!important} .align-content-md-around{align-content:space-around!important} .align-content-md-stretch{align-content:stretch!important} .align-self-md-auto{align-self:auto!important} .align-self-md-start{align-self:flex-start!important} .align-self-md-end{align-self:flex-end!important} .align-self-md-center{align-self:center!important} .align-self-md-baseline{align-self:baseline!important} .align-self-md-stretch{align-self:stretch!important} .order-md-first{order:-1!important} .order-md-0{order:0!important} .order-md-1{order:1!important} .order-md-2{order:2!important} .order-md-3{order:3!important} .order-md-4{order:4!important} .order-md-5{order:5!important} .order-md-last{order:6!important} .m-md-0{margin:0!important} .m-md-1{margin:.25rem!important} .m-md-2{margin:.5rem!important} .m-md-3{margin:1rem!important} .m-md-4{margin:1.5rem!important} .m-md-5{margin:3rem!important} .m-md-auto{margin:auto!important} .mx-md-0{margin-right:0!important;margin-left:0!important} .mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-md-3{margin-right:1rem!important;margin-left:1rem!important} .mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-md-5{margin-right:3rem!important;margin-left:3rem!important} .mx-md-auto{margin-right:auto!important;margin-left:auto!important} .my-md-0{margin-top:0!important;margin-bottom:0!important} .my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-md-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-md-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-md-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-md-0{margin-top:0!important} .mt-md-1{margin-top:.25rem!important} .mt-md-2{margin-top:.5rem!important} .mt-md-3{margin-top:1rem!important} .mt-md-4{margin-top:1.5rem!important} .mt-md-5{margin-top:3rem!important} .mt-md-auto{margin-top:auto!important} .me-md-0{margin-right:0!important} .me-md-1{margin-right:.25rem!important} .me-md-2{margin-right:.5rem!important} .me-md-3{margin-right:1rem!important} .me-md-4{margin-right:1.5rem!important} .me-md-5{margin-right:3rem!important} .me-md-auto{margin-right:auto!important} .mb-md-0{margin-bottom:0!important} .mb-md-1{margin-bottom:.25rem!important} .mb-md-2{margin-bottom:.5rem!important} .mb-md-3{margin-bottom:1rem!important} .mb-md-4{margin-bottom:1.5rem!important} .mb-md-5{margin-bottom:3rem!important} .mb-md-auto{margin-bottom:auto!important} .ms-md-0{margin-left:0!important} .ms-md-1{margin-left:.25rem!important} .ms-md-2{margin-left:.5rem!important} .ms-md-3{margin-left:1rem!important} .ms-md-4{margin-left:1.5rem!important} .ms-md-5{margin-left:3rem!important} .ms-md-auto{margin-left:auto!important} .p-md-0{padding:0!important} .p-md-1{padding:.25rem!important} .p-md-2{padding:.5rem!important} .p-md-3{padding:1rem!important} .p-md-4{padding:1.5rem!important} .p-md-5{padding:3rem!important} .px-md-0{padding-right:0!important;padding-left:0!important} .px-md-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-md-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-md-3{padding-right:1rem!important;padding-left:1rem!important} .px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-md-5{padding-right:3rem!important;padding-left:3rem!important} .py-md-0{padding-top:0!important;padding-bottom:0!important} .py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-md-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-md-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-md-0{padding-top:0!important} .pt-md-1{padding-top:.25rem!important} .pt-md-2{padding-top:.5rem!important} .pt-md-3{padding-top:1rem!important} .pt-md-4{padding-top:1.5rem!important} .pt-md-5{padding-top:3rem!important} .pe-md-0{padding-right:0!important} .pe-md-1{padding-right:.25rem!important} .pe-md-2{padding-right:.5rem!important} .pe-md-3{padding-right:1rem!important} .pe-md-4{padding-right:1.5rem!important} .pe-md-5{padding-right:3rem!important} .pb-md-0{padding-bottom:0!important} .pb-md-1{padding-bottom:.25rem!important} .pb-md-2{padding-bottom:.5rem!important} .pb-md-3{padding-bottom:1rem!important} .pb-md-4{padding-bottom:1.5rem!important} .pb-md-5{padding-bottom:3rem!important} .ps-md-0{padding-left:0!important} .ps-md-1{padding-left:.25rem!important} .ps-md-2{padding-left:.5rem!important} .ps-md-3{padding-left:1rem!important} .ps-md-4{padding-left:1.5rem!important} .ps-md-5{padding-left:3rem!important} .text-md-start{text-align:left!important} .text-md-end{text-align:right!important} .text-md-center{text-align:center!important} } @media (min-width:992px){ .float-lg-start{float:left!important} .float-lg-end{float:right!important} .float-lg-none{float:none!important} .d-lg-inline{display:inline!important} .d-lg-inline-block{display:inline-block!important} .d-lg-block{display:block!important} .d-lg-grid{display:grid!important} .d-lg-table{display:table!important} .d-lg-table-row{display:table-row!important} .d-lg-table-cell{display:table-cell!important} .d-lg-flex{display:flex!important} .d-lg-inline-flex{display:inline-flex!important} .d-lg-none{display:none!important} .flex-lg-fill{flex:1 1 auto!important} .flex-lg-row{flex-direction:row!important} .flex-lg-column{flex-direction:column!important} .flex-lg-row-reverse{flex-direction:row-reverse!important} .flex-lg-column-reverse{flex-direction:column-reverse!important} .flex-lg-grow-0{flex-grow:0!important} .flex-lg-grow-1{flex-grow:1!important} .flex-lg-shrink-0{flex-shrink:0!important} .flex-lg-shrink-1{flex-shrink:1!important} .flex-lg-wrap{flex-wrap:wrap!important} .flex-lg-nowrap{flex-wrap:nowrap!important} .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-lg-0{gap:0!important} .gap-lg-1{gap:.25rem!important} .gap-lg-2{gap:.5rem!important} .gap-lg-3{gap:1rem!important} .gap-lg-4{gap:1.5rem!important} .gap-lg-5{gap:3rem!important} .justify-content-lg-start{justify-content:flex-start!important} .justify-content-lg-end{justify-content:flex-end!important} .justify-content-lg-center{justify-content:center!important} .justify-content-lg-between{justify-content:space-between!important} .justify-content-lg-around{justify-content:space-around!important} .justify-content-lg-evenly{justify-content:space-evenly!important} .align-items-lg-start{align-items:flex-start!important} .align-items-lg-end{align-items:flex-end!important} .align-items-lg-center{align-items:center!important} .align-items-lg-baseline{align-items:baseline!important} .align-items-lg-stretch{align-items:stretch!important} .align-content-lg-start{align-content:flex-start!important} .align-content-lg-end{align-content:flex-end!important} .align-content-lg-center{align-content:center!important} .align-content-lg-between{align-content:space-between!important} .align-content-lg-around{align-content:space-around!important} .align-content-lg-stretch{align-content:stretch!important} .align-self-lg-auto{align-self:auto!important} .align-self-lg-start{align-self:flex-start!important} .align-self-lg-end{align-self:flex-end!important} .align-self-lg-center{align-self:center!important} .align-self-lg-baseline{align-self:baseline!important} .align-self-lg-stretch{align-self:stretch!important} .order-lg-first{order:-1!important} .order-lg-0{order:0!important} .order-lg-1{order:1!important} .order-lg-2{order:2!important} .order-lg-3{order:3!important} .order-lg-4{order:4!important} .order-lg-5{order:5!important} .order-lg-last{order:6!important} .m-lg-0{margin:0!important} .m-lg-1{margin:.25rem!important} .m-lg-2{margin:.5rem!important} .m-lg-3{margin:1rem!important} .m-lg-4{margin:1.5rem!important} .m-lg-5{margin:3rem!important} .m-lg-auto{margin:auto!important} .mx-lg-0{margin-right:0!important;margin-left:0!important} .mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-lg-3{margin-right:1rem!important;margin-left:1rem!important} .mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-lg-5{margin-right:3rem!important;margin-left:3rem!important} .mx-lg-auto{margin-right:auto!important;margin-left:auto!important} .my-lg-0{margin-top:0!important;margin-bottom:0!important} .my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-lg-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-lg-0{margin-top:0!important} .mt-lg-1{margin-top:.25rem!important} .mt-lg-2{margin-top:.5rem!important} .mt-lg-3{margin-top:1rem!important} .mt-lg-4{margin-top:1.5rem!important} .mt-lg-5{margin-top:3rem!important} .mt-lg-auto{margin-top:auto!important} .me-lg-0{margin-right:0!important} .me-lg-1{margin-right:.25rem!important} .me-lg-2{margin-right:.5rem!important} .me-lg-3{margin-right:1rem!important} .me-lg-4{margin-right:1.5rem!important} .me-lg-5{margin-right:3rem!important} .me-lg-auto{margin-right:auto!important} .mb-lg-0{margin-bottom:0!important} .mb-lg-1{margin-bottom:.25rem!important} .mb-lg-2{margin-bottom:.5rem!important} .mb-lg-3{margin-bottom:1rem!important} .mb-lg-4{margin-bottom:1.5rem!important} .mb-lg-5{margin-bottom:3rem!important} .mb-lg-auto{margin-bottom:auto!important} .ms-lg-0{margin-left:0!important} .ms-lg-1{margin-left:.25rem!important} .ms-lg-2{margin-left:.5rem!important} .ms-lg-3{margin-left:1rem!important} .ms-lg-4{margin-left:1.5rem!important} .ms-lg-5{margin-left:3rem!important} .ms-lg-auto{margin-left:auto!important} .p-lg-0{padding:0!important} .p-lg-1{padding:.25rem!important} .p-lg-2{padding:.5rem!important} .p-lg-3{padding:1rem!important} .p-lg-4{padding:1.5rem!important} .p-lg-5{padding:3rem!important} .px-lg-0{padding-right:0!important;padding-left:0!important} .px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-lg-3{padding-right:1rem!important;padding-left:1rem!important} .px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-lg-5{padding-right:3rem!important;padding-left:3rem!important} .py-lg-0{padding-top:0!important;padding-bottom:0!important} .py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-lg-0{padding-top:0!important} .pt-lg-1{padding-top:.25rem!important} .pt-lg-2{padding-top:.5rem!important} .pt-lg-3{padding-top:1rem!important} .pt-lg-4{padding-top:1.5rem!important} .pt-lg-5{padding-top:3rem!important} .pe-lg-0{padding-right:0!important} .pe-lg-1{padding-right:.25rem!important} .pe-lg-2{padding-right:.5rem!important} .pe-lg-3{padding-right:1rem!important} .pe-lg-4{padding-right:1.5rem!important} .pe-lg-5{padding-right:3rem!important} .pb-lg-0{padding-bottom:0!important} .pb-lg-1{padding-bottom:.25rem!important} .pb-lg-2{padding-bottom:.5rem!important} .pb-lg-3{padding-bottom:1rem!important} .pb-lg-4{padding-bottom:1.5rem!important} .pb-lg-5{padding-bottom:3rem!important} .ps-lg-0{padding-left:0!important} .ps-lg-1{padding-left:.25rem!important} .ps-lg-2{padding-left:.5rem!important} .ps-lg-3{padding-left:1rem!important} .ps-lg-4{padding-left:1.5rem!important} .ps-lg-5{padding-left:3rem!important} .text-lg-start{text-align:left!important} .text-lg-end{text-align:right!important} .text-lg-center{text-align:center!important} } @media (min-width:1200px){ .float-xl-start{float:left!important} .float-xl-end{float:right!important} .float-xl-none{float:none!important} .d-xl-inline{display:inline!important} .d-xl-inline-block{display:inline-block!important} .d-xl-block{display:block!important} .d-xl-grid{display:grid!important} .d-xl-table{display:table!important} .d-xl-table-row{display:table-row!important} .d-xl-table-cell{display:table-cell!important} .d-xl-flex{display:flex!important} .d-xl-inline-flex{display:inline-flex!important} .d-xl-none{display:none!important} .flex-xl-fill{flex:1 1 auto!important} .flex-xl-row{flex-direction:row!important} .flex-xl-column{flex-direction:column!important} .flex-xl-row-reverse{flex-direction:row-reverse!important} .flex-xl-column-reverse{flex-direction:column-reverse!important} .flex-xl-grow-0{flex-grow:0!important} .flex-xl-grow-1{flex-grow:1!important} .flex-xl-shrink-0{flex-shrink:0!important} .flex-xl-shrink-1{flex-shrink:1!important} .flex-xl-wrap{flex-wrap:wrap!important} .flex-xl-nowrap{flex-wrap:nowrap!important} .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-xl-0{gap:0!important} .gap-xl-1{gap:.25rem!important} .gap-xl-2{gap:.5rem!important} .gap-xl-3{gap:1rem!important} .gap-xl-4{gap:1.5rem!important} .gap-xl-5{gap:3rem!important} .justify-content-xl-start{justify-content:flex-start!important} .justify-content-xl-end{justify-content:flex-end!important} .justify-content-xl-center{justify-content:center!important} .justify-content-xl-between{justify-content:space-between!important} .justify-content-xl-around{justify-content:space-around!important} .justify-content-xl-evenly{justify-content:space-evenly!important} .align-items-xl-start{align-items:flex-start!important} .align-items-xl-end{align-items:flex-end!important} .align-items-xl-center{align-items:center!important} .align-items-xl-baseline{align-items:baseline!important} .align-items-xl-stretch{align-items:stretch!important} .align-content-xl-start{align-content:flex-start!important} .align-content-xl-end{align-content:flex-end!important} .align-content-xl-center{align-content:center!important} .align-content-xl-between{align-content:space-between!important} .align-content-xl-around{align-content:space-around!important} .align-content-xl-stretch{align-content:stretch!important} .align-self-xl-auto{align-self:auto!important} .align-self-xl-start{align-self:flex-start!important} .align-self-xl-end{align-self:flex-end!important} .align-self-xl-center{align-self:center!important} .align-self-xl-baseline{align-self:baseline!important} .align-self-xl-stretch{align-self:stretch!important} .order-xl-first{order:-1!important} .order-xl-0{order:0!important} .order-xl-1{order:1!important} .order-xl-2{order:2!important} .order-xl-3{order:3!important} .order-xl-4{order:4!important} .order-xl-5{order:5!important} .order-xl-last{order:6!important} .m-xl-0{margin:0!important} .m-xl-1{margin:.25rem!important} .m-xl-2{margin:.5rem!important} .m-xl-3{margin:1rem!important} .m-xl-4{margin:1.5rem!important} .m-xl-5{margin:3rem!important} .m-xl-auto{margin:auto!important} .mx-xl-0{margin-right:0!important;margin-left:0!important} .mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-xl-3{margin-right:1rem!important;margin-left:1rem!important} .mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-xl-5{margin-right:3rem!important;margin-left:3rem!important} .mx-xl-auto{margin-right:auto!important;margin-left:auto!important} .my-xl-0{margin-top:0!important;margin-bottom:0!important} .my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-xl-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-xl-0{margin-top:0!important} .mt-xl-1{margin-top:.25rem!important} .mt-xl-2{margin-top:.5rem!important} .mt-xl-3{margin-top:1rem!important} .mt-xl-4{margin-top:1.5rem!important} .mt-xl-5{margin-top:3rem!important} .mt-xl-auto{margin-top:auto!important} .me-xl-0{margin-right:0!important} .me-xl-1{margin-right:.25rem!important} .me-xl-2{margin-right:.5rem!important} .me-xl-3{margin-right:1rem!important} .me-xl-4{margin-right:1.5rem!important} .me-xl-5{margin-right:3rem!important} .me-xl-auto{margin-right:auto!important} .mb-xl-0{margin-bottom:0!important} .mb-xl-1{margin-bottom:.25rem!important} .mb-xl-2{margin-bottom:.5rem!important} .mb-xl-3{margin-bottom:1rem!important} .mb-xl-4{margin-bottom:1.5rem!important} .mb-xl-5{margin-bottom:3rem!important} .mb-xl-auto{margin-bottom:auto!important} .ms-xl-0{margin-left:0!important} .ms-xl-1{margin-left:.25rem!important} .ms-xl-2{margin-left:.5rem!important} .ms-xl-3{margin-left:1rem!important} .ms-xl-4{margin-left:1.5rem!important} .ms-xl-5{margin-left:3rem!important} .ms-xl-auto{margin-left:auto!important} .p-xl-0{padding:0!important} .p-xl-1{padding:.25rem!important} .p-xl-2{padding:.5rem!important} .p-xl-3{padding:1rem!important} .p-xl-4{padding:1.5rem!important} .p-xl-5{padding:3rem!important} .px-xl-0{padding-right:0!important;padding-left:0!important} .px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-xl-3{padding-right:1rem!important;padding-left:1rem!important} .px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-xl-5{padding-right:3rem!important;padding-left:3rem!important} .py-xl-0{padding-top:0!important;padding-bottom:0!important} .py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-xl-0{padding-top:0!important} .pt-xl-1{padding-top:.25rem!important} .pt-xl-2{padding-top:.5rem!important} .pt-xl-3{padding-top:1rem!important} .pt-xl-4{padding-top:1.5rem!important} .pt-xl-5{padding-top:3rem!important} .pe-xl-0{padding-right:0!important} .pe-xl-1{padding-right:.25rem!important} .pe-xl-2{padding-right:.5rem!important} .pe-xl-3{padding-right:1rem!important} .pe-xl-4{padding-right:1.5rem!important} .pe-xl-5{padding-right:3rem!important} .pb-xl-0{padding-bottom:0!important} .pb-xl-1{padding-bottom:.25rem!important} .pb-xl-2{padding-bottom:.5rem!important} .pb-xl-3{padding-bottom:1rem!important} .pb-xl-4{padding-bottom:1.5rem!important} .pb-xl-5{padding-bottom:3rem!important} .ps-xl-0{padding-left:0!important} .ps-xl-1{padding-left:.25rem!important} .ps-xl-2{padding-left:.5rem!important} .ps-xl-3{padding-left:1rem!important} .ps-xl-4{padding-left:1.5rem!important} .ps-xl-5{padding-left:3rem!important} .text-xl-start{text-align:left!important} .text-xl-end{text-align:right!important} .text-xl-center{text-align:center!important} .fs-1{font-size:2.5rem!important} .fs-2{font-size:2rem!important} .fs-3{font-size:1.75rem!important} .fs-4{font-size:1.5rem!important} } @media (min-width:1400px){ .float-xxl-start{float:left!important} .float-xxl-end{float:right!important} .float-xxl-none{float:none!important} .d-xxl-inline{display:inline!important} .d-xxl-inline-block{display:inline-block!important} .d-xxl-block{display:block!important} .d-xxl-grid{display:grid!important} .d-xxl-table{display:table!important} .d-xxl-table-row{display:table-row!important} .d-xxl-table-cell{display:table-cell!important} .d-xxl-flex{display:flex!important} .d-xxl-inline-flex{display:inline-flex!important} .d-xxl-none{display:none!important} .flex-xxl-fill{flex:1 1 auto!important} .flex-xxl-row{flex-direction:row!important} .flex-xxl-column{flex-direction:column!important} .flex-xxl-row-reverse{flex-direction:row-reverse!important} .flex-xxl-column-reverse{flex-direction:column-reverse!important} .flex-xxl-grow-0{flex-grow:0!important} .flex-xxl-grow-1{flex-grow:1!important} .flex-xxl-shrink-0{flex-shrink:0!important} .flex-xxl-shrink-1{flex-shrink:1!important} .flex-xxl-wrap{flex-wrap:wrap!important} .flex-xxl-nowrap{flex-wrap:nowrap!important} .flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important} .gap-xxl-0{gap:0!important} .gap-xxl-1{gap:.25rem!important} .gap-xxl-2{gap:.5rem!important} .gap-xxl-3{gap:1rem!important} .gap-xxl-4{gap:1.5rem!important} .gap-xxl-5{gap:3rem!important} .justify-content-xxl-start{justify-content:flex-start!important} .justify-content-xxl-end{justify-content:flex-end!important} .justify-content-xxl-center{justify-content:center!important} .justify-content-xxl-between{justify-content:space-between!important} .justify-content-xxl-around{justify-content:space-around!important} .justify-content-xxl-evenly{justify-content:space-evenly!important} .align-items-xxl-start{align-items:flex-start!important} .align-items-xxl-end{align-items:flex-end!important} .align-items-xxl-center{align-items:center!important} .align-items-xxl-baseline{align-items:baseline!important} .align-items-xxl-stretch{align-items:stretch!important} .align-content-xxl-start{align-content:flex-start!important} .align-content-xxl-end{align-content:flex-end!important} .align-content-xxl-center{align-content:center!important} .align-content-xxl-between{align-content:space-between!important} .align-content-xxl-around{align-content:space-around!important} .align-content-xxl-stretch{align-content:stretch!important} .align-self-xxl-auto{align-self:auto!important} .align-self-xxl-start{align-self:flex-start!important} .align-self-xxl-end{align-self:flex-end!important} .align-self-xxl-center{align-self:center!important} .align-self-xxl-baseline{align-self:baseline!important} .align-self-xxl-stretch{align-self:stretch!important} .order-xxl-first{order:-1!important} .order-xxl-0{order:0!important} .order-xxl-1{order:1!important} .order-xxl-2{order:2!important} .order-xxl-3{order:3!important} .order-xxl-4{order:4!important} .order-xxl-5{order:5!important} .order-xxl-last{order:6!important} .m-xxl-0{margin:0!important} .m-xxl-1{margin:.25rem!important} .m-xxl-2{margin:.5rem!important} .m-xxl-3{margin:1rem!important} .m-xxl-4{margin:1.5rem!important} .m-xxl-5{margin:3rem!important} .m-xxl-auto{margin:auto!important} .mx-xxl-0{margin-right:0!important;margin-left:0!important} .mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important} .mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important} .mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important} .mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important} .mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important} .mx-xxl-auto{margin-right:auto!important;margin-left:auto!important} .my-xxl-0{margin-top:0!important;margin-bottom:0!important} .my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important} .my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important} .my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important} .my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important} .my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important} .my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important} .mt-xxl-0{margin-top:0!important} .mt-xxl-1{margin-top:.25rem!important} .mt-xxl-2{margin-top:.5rem!important} .mt-xxl-3{margin-top:1rem!important} .mt-xxl-4{margin-top:1.5rem!important} .mt-xxl-5{margin-top:3rem!important} .mt-xxl-auto{margin-top:auto!important} .me-xxl-0{margin-right:0!important} .me-xxl-1{margin-right:.25rem!important} .me-xxl-2{margin-right:.5rem!important} .me-xxl-3{margin-right:1rem!important} .me-xxl-4{margin-right:1.5rem!important} .me-xxl-5{margin-right:3rem!important} .me-xxl-auto{margin-right:auto!important} .mb-xxl-0{margin-bottom:0!important} .mb-xxl-1{margin-bottom:.25rem!important} .mb-xxl-2{margin-bottom:.5rem!important} .mb-xxl-3{margin-bottom:1rem!important} .mb-xxl-4{margin-bottom:1.5rem!important} .mb-xxl-5{margin-bottom:3rem!important} .mb-xxl-auto{margin-bottom:auto!important} .ms-xxl-0{margin-left:0!important} .ms-xxl-1{margin-left:.25rem!important} .ms-xxl-2{margin-left:.5rem!important} .ms-xxl-3{margin-left:1rem!important} .ms-xxl-4{margin-left:1.5rem!important} .ms-xxl-5{margin-left:3rem!important} .ms-xxl-auto{margin-left:auto!important} .p-xxl-0{padding:0!important} .p-xxl-1{padding:.25rem!important} .p-xxl-2{padding:.5rem!important} .p-xxl-3{padding:1rem!important} .p-xxl-4{padding:1.5rem!important} .p-xxl-5{padding:3rem!important} .px-xxl-0{padding-right:0!important;padding-left:0!important} .px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important} .px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important} .px-xxl-3{padding-right:1rem!important;padding-left:1rem!important} .px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important} .px-xxl-5{padding-right:3rem!important;padding-left:3rem!important} .py-xxl-0{padding-top:0!important;padding-bottom:0!important} .py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important} .py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important} .py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important} .py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important} .py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important} .pt-xxl-0{padding-top:0!important} .pt-xxl-1{padding-top:.25rem!important} .pt-xxl-2{padding-top:.5rem!important} .pt-xxl-3{padding-top:1rem!important} .pt-xxl-4{padding-top:1.5rem!important} .pt-xxl-5{padding-top:3rem!important} .pe-xxl-0{padding-right:0!important} .pe-xxl-1{padding-right:.25rem!important} .pe-xxl-2{padding-right:.5rem!important} .pe-xxl-3{padding-right:1rem!important} .pe-xxl-4{padding-right:1.5rem!important} .pe-xxl-5{padding-right:3rem!important} .pb-xxl-0{padding-bottom:0!important} .pb-xxl-1{padding-bottom:.25rem!important} .pb-xxl-2{padding-bottom:.5rem!important} .pb-xxl-3{padding-bottom:1rem!important} .pb-xxl-4{padding-bottom:1.5rem!important} .pb-xxl-5{padding-bottom:3rem!important} .ps-xxl-0{padding-left:0!important} .ps-xxl-1{padding-left:.25rem!important} .ps-xxl-2{padding-left:.5rem!important} .ps-xxl-3{padding-left:1rem!important} .ps-xxl-4{padding-left:1.5rem!important} .ps-xxl-5{padding-left:3rem!important} .text-xxl-start{text-align:left!important} .text-xxl-end{text-align:right!important} .text-xxl-center{text-align:center!important} } @media print{ .d-print-inline{display:inline!important} .d-print-inline-block{display:inline-block!important} .d-print-block{display:block!important} .d-print-grid{display:grid!important} .d-print-table{display:table!important} .d-print-table-row{display:table-row!important} .d-print-table-cell{display:table-cell!important} .d-print-flex{display:flex!important} .d-print-inline-flex{display:inline-flex!important} .d-print-none{display:none!important} } clean-css-5.3.3/test/fixtures/issue-1194.css 0000664 0000000 0000000 00000571450 14532047255 0020503 0 ustar 00root root 0000000 0000000 @charset "UTF-8"; /*! * Bootstrap v5.0.0-beta2 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ :root { --bs-blue: #0d6efd; --bs-indigo: #6610f2; --bs-purple: #6f42c1; --bs-pink: #d63384; --bs-red: #dc3545; --bs-orange: #fd7e14; --bs-yellow: #ffc107; --bs-green: #198754; --bs-teal: #20c997; --bs-cyan: #0dcaf0; --bs-white: #fff; --bs-gray: #6c757d; --bs-gray-dark: #343a40; --bs-primary: #0d6efd; --bs-secondary: #6c757d; --bs-success: #198754; --bs-info: #0dcaf0; --bs-warning: #ffc107; --bs-danger: #dc3545; --bs-light: #f8f9fa; --bs-dark: #212529; --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); } *, *::before, *::after { box-sizing: border-box; } @media (prefers-reduced-motion: no-preference) { :root { scroll-behavior: smooth; } } body { margin: 0; font-family: var(--bs-font-sans-serif); font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; -webkit-text-size-adjust: 100%; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } [tabindex="-1"]:focus:not(:focus-visible) { outline: 0 !important; } hr { margin: 1rem 0; color: inherit; background-color: currentColor; border: 0; opacity: 0.25; } hr:not([size]) { height: 1px; } h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { margin-top: 0; margin-bottom: 0.5rem; font-weight: 500; line-height: 1.2; } h1, .h1 { font-size: calc(1.375rem + 1.5vw); } @media (min-width: 1200px) { h1, .h1 { font-size: 2.5rem; } } h2, .h2 { font-size: calc(1.325rem + 0.9vw); } @media (min-width: 1200px) { h2, .h2 { font-size: 2rem; } } h3, .h3 { font-size: calc(1.3rem + 0.6vw); } @media (min-width: 1200px) { h3, .h3 { font-size: 1.75rem; } } h4, .h4 { font-size: calc(1.275rem + 0.3vw); } @media (min-width: 1200px) { h4, .h4 { font-size: 1.5rem; } } h5, .h5 { font-size: 1.25rem; } h6, .h6 { font-size: 1rem; } p { margin-top: 0; margin-bottom: 1rem; } abbr[title], abbr[data-bs-original-title] { text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; cursor: help; -webkit-text-decoration-skip-ink: none; text-decoration-skip-ink: none; } address { margin-bottom: 1rem; font-style: normal; line-height: inherit; } ol, ul { padding-left: 2rem; } ol, ul, dl { margin-top: 0; margin-bottom: 1rem; } ol ol, ul ul, ol ul, ul ol { margin-bottom: 0; } dt { font-weight: 700; } dd { margin-bottom: 0.5rem; margin-left: 0; } blockquote { margin: 0 0 1rem; } b, strong { font-weight: bolder; } small, .small { font-size: 0.875em; } mark, .mark { padding: 0.2em; background-color: #fcf8e3; } sub, sup { position: relative; font-size: 0.75em; line-height: 0; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } a { color: #0d6efd; text-decoration: underline; } a:hover { color: #0a58ca; } a:not([href]):not([class]), a:not([href]):not([class]):hover { color: inherit; text-decoration: none; } pre, code, kbd, samp { font-family: var(--bs-font-monospace); font-size: 1em; direction: ltr /* rtl:ignore */; unicode-bidi: bidi-override; } pre { display: block; margin-top: 0; margin-bottom: 1rem; overflow: auto; font-size: 0.875em; } pre code { font-size: inherit; color: inherit; word-break: normal; } code { font-size: 0.875em; color: #d63384; word-wrap: break-word; } a > code { color: inherit; } kbd { padding: 0.2rem 0.4rem; font-size: 0.875em; color: #fff; background-color: #212529; border-radius: 0.2rem; } kbd kbd { padding: 0; font-size: 1em; font-weight: 700; } figure { margin: 0 0 1rem; } img, svg { vertical-align: middle; } table { caption-side: bottom; border-collapse: collapse; } caption { padding-top: 0.5rem; padding-bottom: 0.5rem; color: #6c757d; text-align: left; } th { text-align: inherit; text-align: -webkit-match-parent; } thead, tbody, tfoot, tr, td, th { border-color: inherit; border-style: solid; border-width: 0; } label { display: inline-block; } button { border-radius: 0; } button:focus:not(:focus-visible) { outline: 0; } input, button, select, optgroup, textarea { margin: 0; font-family: inherit; font-size: inherit; line-height: inherit; } button, select { text-transform: none; } [role=button] { cursor: pointer; } select { word-wrap: normal; } [list]::-webkit-calendar-picker-indicator { display: none; } button, [type=button], [type=reset], [type=submit] { -webkit-appearance: button; } button:not(:disabled), [type=button]:not(:disabled), [type=reset]:not(:disabled), [type=submit]:not(:disabled) { cursor: pointer; } ::-moz-focus-inner { padding: 0; border-style: none; } textarea { resize: vertical; } fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { float: left; width: 100%; padding: 0; margin-bottom: 0.5rem; font-size: calc(1.275rem + 0.3vw); line-height: inherit; } @media (min-width: 1200px) { legend { font-size: 1.5rem; } } legend + * { clear: left; } ::-webkit-datetime-edit-fields-wrapper, ::-webkit-datetime-edit-text, ::-webkit-datetime-edit-minute, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-year-field { padding: 0; } ::-webkit-inner-spin-button { height: auto; } [type=search] { outline-offset: -2px; -webkit-appearance: textfield; } /* rtl:raw: [type="tel"], [type="url"], [type="email"], [type="number"] { direction: ltr; } */ ::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-color-swatch-wrapper { padding: 0; } ::file-selector-button { font: inherit; } ::-webkit-file-upload-button { font: inherit; -webkit-appearance: button; } output { display: inline-block; } iframe { border: 0; } summary { display: list-item; cursor: pointer; } progress { vertical-align: baseline; } [hidden] { display: none !important; } .lead { font-size: 1.25rem; font-weight: 300; } .display-1 { font-size: calc(1.625rem + 4.5vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-1 { font-size: 5rem; } } .display-2 { font-size: calc(1.575rem + 3.9vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-2 { font-size: 4.5rem; } } .display-3 { font-size: calc(1.525rem + 3.3vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-3 { font-size: 4rem; } } .display-4 { font-size: calc(1.475rem + 2.7vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-4 { font-size: 3.5rem; } } .display-5 { font-size: calc(1.425rem + 2.1vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-5 { font-size: 3rem; } } .display-6 { font-size: calc(1.375rem + 1.5vw); font-weight: 300; line-height: 1.2; } @media (min-width: 1200px) { .display-6 { font-size: 2.5rem; } } .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline-item { display: inline-block; } .list-inline-item:not(:last-child) { margin-right: 0.5rem; } .initialism { font-size: 0.875em; text-transform: uppercase; } .blockquote { margin-bottom: 1rem; font-size: 1.25rem; } .blockquote > :last-child { margin-bottom: 0; } .blockquote-footer { margin-top: -1rem; margin-bottom: 1rem; font-size: 0.875em; color: #6c757d; } .blockquote-footer::before { content: "— "; } .img-fluid { max-width: 100%; height: auto; } .img-thumbnail { padding: 0.25rem; background-color: #fff; border: 1px solid #dee2e6; border-radius: 0.25rem; max-width: 100%; height: auto; } .figure { display: inline-block; } .figure-img { margin-bottom: 0.5rem; line-height: 1; } .figure-caption { font-size: 0.875em; color: #6c757d; } .container, .container-fluid, .container-xxl, .container-xl, .container-lg, .container-md, .container-sm { width: 100%; padding-right: var(--bs-gutter-x, 0.75rem); padding-left: var(--bs-gutter-x, 0.75rem); margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container-sm, .container { max-width: 540px; } } @media (min-width: 768px) { .container-md, .container-sm, .container { max-width: 720px; } } @media (min-width: 992px) { .container-lg, .container-md, .container-sm, .container { max-width: 960px; } } @media (min-width: 1200px) { .container-xl, .container-lg, .container-md, .container-sm, .container { max-width: 1140px; } } @media (min-width: 1400px) { .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { max-width: 1320px; } } .row { --bs-gutter-x: 1.5rem; --bs-gutter-y: 0; display: flex; flex-wrap: wrap; margin-top: calc(var(--bs-gutter-y) * -1); margin-right: calc(var(--bs-gutter-x) / -2); margin-left: calc(var(--bs-gutter-x) / -2); } .row > * { flex-shrink: 0; width: 100%; max-width: 100%; padding-right: calc(var(--bs-gutter-x) / 2); padding-left: calc(var(--bs-gutter-x) / 2); margin-top: var(--bs-gutter-y); } .col { flex: 1 0 0%; } .row-cols-auto > * { flex: 0 0 auto; width: auto; } .row-cols-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-auto { flex: 0 0 auto; width: auto; } .col-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-3 { flex: 0 0 auto; width: 25%; } .col-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-6 { flex: 0 0 auto; width: 50%; } .col-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-9 { flex: 0 0 auto; width: 75%; } .col-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-12 { flex: 0 0 auto; width: 100%; } .offset-1 { margin-left: 8.3333333333%; } .offset-2 { margin-left: 16.6666666667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.3333333333%; } .offset-5 { margin-left: 41.6666666667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.3333333333%; } .offset-8 { margin-left: 66.6666666667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.3333333333%; } .offset-11 { margin-left: 91.6666666667%; } .g-0, .gx-0 { --bs-gutter-x: 0; } .g-0, .gy-0 { --bs-gutter-y: 0; } .g-1, .gx-1 { --bs-gutter-x: 0.25rem; } .g-1, .gy-1 { --bs-gutter-y: 0.25rem; } .g-2, .gx-2 { --bs-gutter-x: 0.5rem; } .g-2, .gy-2 { --bs-gutter-y: 0.5rem; } .g-3, .gx-3 { --bs-gutter-x: 1rem; } .g-3, .gy-3 { --bs-gutter-y: 1rem; } .g-4, .gx-4 { --bs-gutter-x: 1.5rem; } .g-4, .gy-4 { --bs-gutter-y: 1.5rem; } .g-5, .gx-5 { --bs-gutter-x: 3rem; } .g-5, .gy-5 { --bs-gutter-y: 3rem; } @media (min-width: 576px) { .col-sm { flex: 1 0 0%; } .row-cols-sm-auto > * { flex: 0 0 auto; width: auto; } .row-cols-sm-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-sm-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-sm-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-sm-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-sm-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-sm-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-sm-auto { flex: 0 0 auto; width: auto; } .col-sm-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-sm-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-sm-3 { flex: 0 0 auto; width: 25%; } .col-sm-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-sm-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-sm-6 { flex: 0 0 auto; width: 50%; } .col-sm-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-sm-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-sm-9 { flex: 0 0 auto; width: 75%; } .col-sm-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-sm-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-sm-12 { flex: 0 0 auto; width: 100%; } .offset-sm-0 { margin-left: 0; } .offset-sm-1 { margin-left: 8.3333333333%; } .offset-sm-2 { margin-left: 16.6666666667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.3333333333%; } .offset-sm-5 { margin-left: 41.6666666667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.3333333333%; } .offset-sm-8 { margin-left: 66.6666666667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.3333333333%; } .offset-sm-11 { margin-left: 91.6666666667%; } .g-sm-0, .gx-sm-0 { --bs-gutter-x: 0; } .g-sm-0, .gy-sm-0 { --bs-gutter-y: 0; } .g-sm-1, .gx-sm-1 { --bs-gutter-x: 0.25rem; } .g-sm-1, .gy-sm-1 { --bs-gutter-y: 0.25rem; } .g-sm-2, .gx-sm-2 { --bs-gutter-x: 0.5rem; } .g-sm-2, .gy-sm-2 { --bs-gutter-y: 0.5rem; } .g-sm-3, .gx-sm-3 { --bs-gutter-x: 1rem; } .g-sm-3, .gy-sm-3 { --bs-gutter-y: 1rem; } .g-sm-4, .gx-sm-4 { --bs-gutter-x: 1.5rem; } .g-sm-4, .gy-sm-4 { --bs-gutter-y: 1.5rem; } .g-sm-5, .gx-sm-5 { --bs-gutter-x: 3rem; } .g-sm-5, .gy-sm-5 { --bs-gutter-y: 3rem; } } @media (min-width: 768px) { .col-md { flex: 1 0 0%; } .row-cols-md-auto > * { flex: 0 0 auto; width: auto; } .row-cols-md-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-md-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-md-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-md-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-md-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-md-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-md-auto { flex: 0 0 auto; width: auto; } .col-md-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-md-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-md-3 { flex: 0 0 auto; width: 25%; } .col-md-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-md-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-md-6 { flex: 0 0 auto; width: 50%; } .col-md-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-md-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-md-9 { flex: 0 0 auto; width: 75%; } .col-md-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-md-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-md-12 { flex: 0 0 auto; width: 100%; } .offset-md-0 { margin-left: 0; } .offset-md-1 { margin-left: 8.3333333333%; } .offset-md-2 { margin-left: 16.6666666667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.3333333333%; } .offset-md-5 { margin-left: 41.6666666667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.3333333333%; } .offset-md-8 { margin-left: 66.6666666667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.3333333333%; } .offset-md-11 { margin-left: 91.6666666667%; } .g-md-0, .gx-md-0 { --bs-gutter-x: 0; } .g-md-0, .gy-md-0 { --bs-gutter-y: 0; } .g-md-1, .gx-md-1 { --bs-gutter-x: 0.25rem; } .g-md-1, .gy-md-1 { --bs-gutter-y: 0.25rem; } .g-md-2, .gx-md-2 { --bs-gutter-x: 0.5rem; } .g-md-2, .gy-md-2 { --bs-gutter-y: 0.5rem; } .g-md-3, .gx-md-3 { --bs-gutter-x: 1rem; } .g-md-3, .gy-md-3 { --bs-gutter-y: 1rem; } .g-md-4, .gx-md-4 { --bs-gutter-x: 1.5rem; } .g-md-4, .gy-md-4 { --bs-gutter-y: 1.5rem; } .g-md-5, .gx-md-5 { --bs-gutter-x: 3rem; } .g-md-5, .gy-md-5 { --bs-gutter-y: 3rem; } } @media (min-width: 992px) { .col-lg { flex: 1 0 0%; } .row-cols-lg-auto > * { flex: 0 0 auto; width: auto; } .row-cols-lg-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-lg-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-lg-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-lg-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-lg-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-lg-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-lg-auto { flex: 0 0 auto; width: auto; } .col-lg-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-lg-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-lg-3 { flex: 0 0 auto; width: 25%; } .col-lg-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-lg-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-lg-6 { flex: 0 0 auto; width: 50%; } .col-lg-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-lg-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-lg-9 { flex: 0 0 auto; width: 75%; } .col-lg-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-lg-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-lg-12 { flex: 0 0 auto; width: 100%; } .offset-lg-0 { margin-left: 0; } .offset-lg-1 { margin-left: 8.3333333333%; } .offset-lg-2 { margin-left: 16.6666666667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.3333333333%; } .offset-lg-5 { margin-left: 41.6666666667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.3333333333%; } .offset-lg-8 { margin-left: 66.6666666667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.3333333333%; } .offset-lg-11 { margin-left: 91.6666666667%; } .g-lg-0, .gx-lg-0 { --bs-gutter-x: 0; } .g-lg-0, .gy-lg-0 { --bs-gutter-y: 0; } .g-lg-1, .gx-lg-1 { --bs-gutter-x: 0.25rem; } .g-lg-1, .gy-lg-1 { --bs-gutter-y: 0.25rem; } .g-lg-2, .gx-lg-2 { --bs-gutter-x: 0.5rem; } .g-lg-2, .gy-lg-2 { --bs-gutter-y: 0.5rem; } .g-lg-3, .gx-lg-3 { --bs-gutter-x: 1rem; } .g-lg-3, .gy-lg-3 { --bs-gutter-y: 1rem; } .g-lg-4, .gx-lg-4 { --bs-gutter-x: 1.5rem; } .g-lg-4, .gy-lg-4 { --bs-gutter-y: 1.5rem; } .g-lg-5, .gx-lg-5 { --bs-gutter-x: 3rem; } .g-lg-5, .gy-lg-5 { --bs-gutter-y: 3rem; } } @media (min-width: 1200px) { .col-xl { flex: 1 0 0%; } .row-cols-xl-auto > * { flex: 0 0 auto; width: auto; } .row-cols-xl-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-xl-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-xl-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-xl-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-xl-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-xl-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-xl-auto { flex: 0 0 auto; width: auto; } .col-xl-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-xl-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-xl-3 { flex: 0 0 auto; width: 25%; } .col-xl-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-xl-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-xl-6 { flex: 0 0 auto; width: 50%; } .col-xl-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-xl-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-xl-9 { flex: 0 0 auto; width: 75%; } .col-xl-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-xl-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-xl-12 { flex: 0 0 auto; width: 100%; } .offset-xl-0 { margin-left: 0; } .offset-xl-1 { margin-left: 8.3333333333%; } .offset-xl-2 { margin-left: 16.6666666667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.3333333333%; } .offset-xl-5 { margin-left: 41.6666666667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.3333333333%; } .offset-xl-8 { margin-left: 66.6666666667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.3333333333%; } .offset-xl-11 { margin-left: 91.6666666667%; } .g-xl-0, .gx-xl-0 { --bs-gutter-x: 0; } .g-xl-0, .gy-xl-0 { --bs-gutter-y: 0; } .g-xl-1, .gx-xl-1 { --bs-gutter-x: 0.25rem; } .g-xl-1, .gy-xl-1 { --bs-gutter-y: 0.25rem; } .g-xl-2, .gx-xl-2 { --bs-gutter-x: 0.5rem; } .g-xl-2, .gy-xl-2 { --bs-gutter-y: 0.5rem; } .g-xl-3, .gx-xl-3 { --bs-gutter-x: 1rem; } .g-xl-3, .gy-xl-3 { --bs-gutter-y: 1rem; } .g-xl-4, .gx-xl-4 { --bs-gutter-x: 1.5rem; } .g-xl-4, .gy-xl-4 { --bs-gutter-y: 1.5rem; } .g-xl-5, .gx-xl-5 { --bs-gutter-x: 3rem; } .g-xl-5, .gy-xl-5 { --bs-gutter-y: 3rem; } } @media (min-width: 1400px) { .col-xxl { flex: 1 0 0%; } .row-cols-xxl-auto > * { flex: 0 0 auto; width: auto; } .row-cols-xxl-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-xxl-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-xxl-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-xxl-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-xxl-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-xxl-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-xxl-auto { flex: 0 0 auto; width: auto; } .col-xxl-1 { flex: 0 0 auto; width: 8.3333333333%; } .col-xxl-2 { flex: 0 0 auto; width: 16.6666666667%; } .col-xxl-3 { flex: 0 0 auto; width: 25%; } .col-xxl-4 { flex: 0 0 auto; width: 33.3333333333%; } .col-xxl-5 { flex: 0 0 auto; width: 41.6666666667%; } .col-xxl-6 { flex: 0 0 auto; width: 50%; } .col-xxl-7 { flex: 0 0 auto; width: 58.3333333333%; } .col-xxl-8 { flex: 0 0 auto; width: 66.6666666667%; } .col-xxl-9 { flex: 0 0 auto; width: 75%; } .col-xxl-10 { flex: 0 0 auto; width: 83.3333333333%; } .col-xxl-11 { flex: 0 0 auto; width: 91.6666666667%; } .col-xxl-12 { flex: 0 0 auto; width: 100%; } .offset-xxl-0 { margin-left: 0; } .offset-xxl-1 { margin-left: 8.3333333333%; } .offset-xxl-2 { margin-left: 16.6666666667%; } .offset-xxl-3 { margin-left: 25%; } .offset-xxl-4 { margin-left: 33.3333333333%; } .offset-xxl-5 { margin-left: 41.6666666667%; } .offset-xxl-6 { margin-left: 50%; } .offset-xxl-7 { margin-left: 58.3333333333%; } .offset-xxl-8 { margin-left: 66.6666666667%; } .offset-xxl-9 { margin-left: 75%; } .offset-xxl-10 { margin-left: 83.3333333333%; } .offset-xxl-11 { margin-left: 91.6666666667%; } .g-xxl-0, .gx-xxl-0 { --bs-gutter-x: 0; } .g-xxl-0, .gy-xxl-0 { --bs-gutter-y: 0; } .g-xxl-1, .gx-xxl-1 { --bs-gutter-x: 0.25rem; } .g-xxl-1, .gy-xxl-1 { --bs-gutter-y: 0.25rem; } .g-xxl-2, .gx-xxl-2 { --bs-gutter-x: 0.5rem; } .g-xxl-2, .gy-xxl-2 { --bs-gutter-y: 0.5rem; } .g-xxl-3, .gx-xxl-3 { --bs-gutter-x: 1rem; } .g-xxl-3, .gy-xxl-3 { --bs-gutter-y: 1rem; } .g-xxl-4, .gx-xxl-4 { --bs-gutter-x: 1.5rem; } .g-xxl-4, .gy-xxl-4 { --bs-gutter-y: 1.5rem; } .g-xxl-5, .gx-xxl-5 { --bs-gutter-x: 3rem; } .g-xxl-5, .gy-xxl-5 { --bs-gutter-y: 3rem; } } .table { --bs-table-bg: transparent; --bs-table-striped-color: #212529; --bs-table-striped-bg: rgba(0, 0, 0, 0.05); --bs-table-active-color: #212529; --bs-table-active-bg: rgba(0, 0, 0, 0.1); --bs-table-hover-color: #212529; --bs-table-hover-bg: rgba(0, 0, 0, 0.075); width: 100%; margin-bottom: 1rem; color: #212529; vertical-align: top; border-color: #dee2e6; } .table > :not(caption) > * > * { padding: 0.5rem 0.5rem; background-color: var(--bs-table-bg); border-bottom-width: 1px; box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); } .table > tbody { vertical-align: inherit; } .table > thead { vertical-align: bottom; } .table > :not(:last-child) > :last-child > * { border-bottom-color: currentColor; } .caption-top { caption-side: top; } .table-sm > :not(caption) > * > * { padding: 0.25rem 0.25rem; } .table-bordered > :not(caption) > * { border-width: 1px 0; } .table-bordered > :not(caption) > * > * { border-width: 0 1px; } .table-borderless > :not(caption) > * > * { border-bottom-width: 0; } .table-striped > tbody > tr:nth-of-type(odd) { --bs-table-accent-bg: var(--bs-table-striped-bg); color: var(--bs-table-striped-color); } .table-active { --bs-table-accent-bg: var(--bs-table-active-bg); color: var(--bs-table-active-color); } .table-hover > tbody > tr:hover { --bs-table-accent-bg: var(--bs-table-hover-bg); color: var(--bs-table-hover-color); } .table-primary { --bs-table-bg: #cfe2ff; --bs-table-striped-bg: #c5d7f2; --bs-table-striped-color: #000; --bs-table-active-bg: #bacbe6; --bs-table-active-color: #000; --bs-table-hover-bg: #bfd1ec; --bs-table-hover-color: #000; color: #000; border-color: #bacbe6; } .table-secondary { --bs-table-bg: #e2e3e5; --bs-table-striped-bg: #d7d8da; --bs-table-striped-color: #000; --bs-table-active-bg: #cbccce; --bs-table-active-color: #000; --bs-table-hover-bg: #d1d2d4; --bs-table-hover-color: #000; color: #000; border-color: #cbccce; } .table-success { --bs-table-bg: #d1e7dd; --bs-table-striped-bg: #c7dbd2; --bs-table-striped-color: #000; --bs-table-active-bg: #bcd0c7; --bs-table-active-color: #000; --bs-table-hover-bg: #c1d6cc; --bs-table-hover-color: #000; color: #000; border-color: #bcd0c7; } .table-info { --bs-table-bg: #cff4fc; --bs-table-striped-bg: #c5e8ef; --bs-table-striped-color: #000; --bs-table-active-bg: #badce3; --bs-table-active-color: #000; --bs-table-hover-bg: #bfe2e9; --bs-table-hover-color: #000; color: #000; border-color: #badce3; } .table-warning { --bs-table-bg: #fff3cd; --bs-table-striped-bg: #f2e7c3; --bs-table-striped-color: #000; --bs-table-active-bg: #e6dbb9; --bs-table-active-color: #000; --bs-table-hover-bg: #ece1be; --bs-table-hover-color: #000; color: #000; border-color: #e6dbb9; } .table-danger { --bs-table-bg: #f8d7da; --bs-table-striped-bg: #eccccf; --bs-table-striped-color: #000; --bs-table-active-bg: #dfc2c4; --bs-table-active-color: #000; --bs-table-hover-bg: #e5c7ca; --bs-table-hover-color: #000; color: #000; border-color: #dfc2c4; } .table-light { --bs-table-bg: #f8f9fa; --bs-table-striped-bg: #ecedee; --bs-table-striped-color: #000; --bs-table-active-bg: #dfe0e1; --bs-table-active-color: #000; --bs-table-hover-bg: #e5e6e7; --bs-table-hover-color: #000; color: #000; border-color: #dfe0e1; } .table-dark { --bs-table-bg: #212529; --bs-table-striped-bg: #2c3034; --bs-table-striped-color: #fff; --bs-table-active-bg: #373b3e; --bs-table-active-color: #fff; --bs-table-hover-bg: #323539; --bs-table-hover-color: #fff; color: #fff; border-color: #373b3e; } .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } @media (max-width: 575.98px) { .table-responsive-sm { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 767.98px) { .table-responsive-md { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 991.98px) { .table-responsive-lg { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 1199.98px) { .table-responsive-xl { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 1399.98px) { .table-responsive-xxl { overflow-x: auto; -webkit-overflow-scrolling: touch; } } .form-label { margin-bottom: 0.5rem; } .col-form-label { padding-top: calc(0.375rem + 1px); padding-bottom: calc(0.375rem + 1px); margin-bottom: 0; font-size: inherit; line-height: 1.5; } .col-form-label-lg { padding-top: calc(0.5rem + 1px); padding-bottom: calc(0.5rem + 1px); font-size: 1.25rem; } .col-form-label-sm { padding-top: calc(0.25rem + 1px); padding-bottom: calc(0.25rem + 1px); font-size: 0.875rem; } .form-text { margin-top: 0.25rem; font-size: 0.875em; color: #6c757d; } .form-control { display: block; width: 100%; padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; background-clip: padding-box; border: 1px solid #ced4da; -webkit-appearance: none; -moz-appearance: none; appearance: none; border-radius: 0.25rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control[type=file] { overflow: hidden; } .form-control[type=file]:not(:disabled):not([readonly]) { cursor: pointer; } .form-control:focus { color: #212529; background-color: #fff; border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-control::-webkit-date-and-time-value { height: 1.5em; } .form-control::-webkit-input-placeholder { color: #6c757d; opacity: 1; } .form-control::-moz-placeholder { color: #6c757d; opacity: 1; } .form-control::placeholder { color: #6c757d; opacity: 1; } .form-control:disabled, .form-control[readonly] { background-color: #e9ecef; opacity: 1; } .form-control::file-selector-button { padding: 0.375rem 0.75rem; margin: -0.375rem -0.75rem; -webkit-margin-end: 0.75rem; margin-inline-end: 0.75rem; color: #212529; background-color: #e9ecef; pointer-events: none; border-color: inherit; border-style: solid; border-width: 0; border-inline-end-width: 1px; border-radius: 0; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control::file-selector-button { transition: none; } } .form-control:hover:not(:disabled):not([readonly])::file-selector-button { background-color: #dde0e3; } .form-control::-webkit-file-upload-button { padding: 0.375rem 0.75rem; margin: -0.375rem -0.75rem; -webkit-margin-end: 0.75rem; margin-inline-end: 0.75rem; color: #212529; background-color: #e9ecef; pointer-events: none; border-color: inherit; border-style: solid; border-width: 0; border-inline-end-width: 1px; border-radius: 0; -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-control::-webkit-file-upload-button { -webkit-transition: none; transition: none; } } .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { background-color: #dde0e3; } .form-control-plaintext { display: block; width: 100%; padding: 0.375rem 0; margin-bottom: 0; line-height: 1.5; color: #212529; background-color: transparent; border: solid transparent; border-width: 1px 0; } .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { padding-right: 0; padding-left: 0; } .form-control-sm { min-height: calc(1.5em + 0.5rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .form-control-sm::file-selector-button { padding: 0.25rem 0.5rem; margin: -0.25rem -0.5rem; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .form-control-sm::-webkit-file-upload-button { padding: 0.25rem 0.5rem; margin: -0.25rem -0.5rem; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .form-control-lg { min-height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .form-control-lg::file-selector-button { padding: 0.5rem 1rem; margin: -0.5rem -1rem; -webkit-margin-end: 1rem; margin-inline-end: 1rem; } .form-control-lg::-webkit-file-upload-button { padding: 0.5rem 1rem; margin: -0.5rem -1rem; -webkit-margin-end: 1rem; margin-inline-end: 1rem; } textarea.form-control { min-height: calc(1.5em + 0.75rem + 2px); } textarea.form-control-sm { min-height: calc(1.5em + 0.5rem + 2px); } textarea.form-control-lg { min-height: calc(1.5em + 1rem + 2px); } .form-control-color { max-width: 3rem; height: auto; padding: 0.375rem; } .form-control-color:not(:disabled):not([readonly]) { cursor: pointer; } .form-control-color::-moz-color-swatch { height: 1.5em; border-radius: 0.25rem; } .form-control-color::-webkit-color-swatch { height: 1.5em; border-radius: 0.25rem; } .form-select { display: block; width: 100%; padding: 0.375rem 2.25rem 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; background-color: #fff; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 0.75rem center; background-size: 16px 12px; border: 1px solid #ced4da; border-radius: 0.25rem; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .form-select:focus { border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-select[multiple], .form-select[size]:not([size="1"]) { padding-right: 0.75rem; background-image: none; } .form-select:disabled { color: #6c757d; background-color: #e9ecef; } .form-select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #212529; } .form-select-sm { padding-top: 0.25rem; padding-bottom: 0.25rem; padding-left: 0.5rem; font-size: 0.875rem; } .form-select-lg { padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; font-size: 1.25rem; } .form-check { display: block; min-height: 1.5rem; padding-left: 1.5em; margin-bottom: 0.125rem; } .form-check .form-check-input { float: left; margin-left: -1.5em; } .form-check-input { width: 1em; height: 1em; margin-top: 0.25em; vertical-align: top; background-color: #fff; background-repeat: no-repeat; background-position: center; background-size: contain; border: 1px solid rgba(0, 0, 0, 0.25); -webkit-appearance: none; -moz-appearance: none; appearance: none; -webkit-print-color-adjust: exact; color-adjust: exact; } .form-check-input[type=checkbox] { border-radius: 0.25em; } .form-check-input[type=radio] { border-radius: 50%; } .form-check-input:active { filter: brightness(90%); } .form-check-input:focus { border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-check-input:checked { background-color: #0d6efd; border-color: #0d6efd; } .form-check-input:checked[type=checkbox] { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); } .form-check-input:checked[type=radio] { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); } .form-check-input[type=checkbox]:indeterminate { background-color: #0d6efd; border-color: #0d6efd; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); } .form-check-input:disabled { pointer-events: none; filter: none; opacity: 0.5; } .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { opacity: 0.5; } .form-switch { padding-left: 2.5em; } .form-switch .form-check-input { width: 2em; margin-left: -2.5em; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); background-position: left center; border-radius: 2em; transition: background-position 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-switch .form-check-input { transition: none; } } .form-switch .form-check-input:focus { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); } .form-switch .form-check-input:checked { background-position: right center; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .form-check-inline { display: inline-block; margin-right: 1rem; } .btn-check { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .btn-check[disabled] + .btn, .btn-check:disabled + .btn { pointer-events: none; filter: none; opacity: 0.65; } .form-range { width: 100%; height: 1.5rem; padding: 0; background-color: transparent; -webkit-appearance: none; -moz-appearance: none; appearance: none; } .form-range:focus { outline: 0; } .form-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .form-range::-moz-focus-outer { border: 0; } .form-range::-webkit-slider-thumb { width: 1rem; height: 1rem; margin-top: -0.25rem; background-color: #0d6efd; border: 0; border-radius: 1rem; -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -webkit-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .form-range::-webkit-slider-thumb { -webkit-transition: none; transition: none; } } .form-range::-webkit-slider-thumb:active { background-color: #b6d4fe; } .form-range::-webkit-slider-runnable-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .form-range::-moz-range-thumb { width: 1rem; height: 1rem; background-color: #0d6efd; border: 0; border-radius: 1rem; -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -moz-appearance: none; appearance: none; } @media (prefers-reduced-motion: reduce) { .form-range::-moz-range-thumb { -moz-transition: none; transition: none; } } .form-range::-moz-range-thumb:active { background-color: #b6d4fe; } .form-range::-moz-range-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .form-range:disabled { pointer-events: none; } .form-range:disabled::-webkit-slider-thumb { background-color: #adb5bd; } .form-range:disabled::-moz-range-thumb { background-color: #adb5bd; } .form-floating { position: relative; } .form-floating > .form-control, .form-floating > .form-select { height: calc(3.5rem + 2px); padding: 1rem 0.75rem; } .form-floating > label { position: absolute; top: 0; left: 0; height: 100%; padding: 1rem 0.75rem; pointer-events: none; border: 1px solid transparent; transform-origin: 0 0; transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-floating > label { transition: none; } } .form-floating > .form-control::-webkit-input-placeholder { color: transparent; } .form-floating > .form-control::-moz-placeholder { color: transparent; } .form-floating > .form-control::placeholder { color: transparent; } .form-floating > .form-control:not(:-moz-placeholder-shown) { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:-webkit-autofill { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-select { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-select ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .form-floating > .form-control:-webkit-autofill ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .input-group { position: relative; display: flex; flex-wrap: wrap; align-items: stretch; width: 100%; } .input-group > .form-control, .input-group > .form-select { position: relative; flex: 1 1 auto; width: 1%; min-width: 0; } .input-group > .form-control:focus, .input-group > .form-select:focus { z-index: 3; } .input-group .btn { position: relative; z-index: 2; } .input-group .btn:focus { z-index: 3; } .input-group-text { display: flex; align-items: center; padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #212529; text-align: center; white-space: nowrap; background-color: #e9ecef; border: 1px solid #ced4da; border-radius: 0.25rem; } .input-group-lg > .form-control, .input-group-lg > .form-select, .input-group-lg > .input-group-text, .input-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .input-group-sm > .form-control, .input-group-sm > .form-select, .input-group-sm > .input-group-text, .input-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .input-group-lg > .form-select, .input-group-sm > .form-select { padding-right: 3rem; } .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; } .valid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #198754; } .valid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.875rem; color: #fff; background-color: rgba(25, 135, 84, 0.9); border-radius: 0.25rem; } .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip, .is-valid ~ .valid-feedback, .is-valid ~ .valid-tooltip { display: block; } .was-validated .form-control:valid, .form-control.is-valid { border-color: #198754; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: #198754; box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated textarea.form-control:valid, textarea.form-control.is-valid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .form-select:valid, .form-select.is-valid { border-color: #198754; padding-right: 4.125rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-select:valid:focus, .form-select.is-valid:focus { border-color: #198754; box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated .form-check-input:valid, .form-check-input.is-valid { border-color: #198754; } .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { background-color: #198754; } .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: #198754; } .form-check-inline .form-check-input ~ .valid-feedback { margin-left: 0.5em; } .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #dc3545; } .invalid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.875rem; color: #fff; background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip, .is-invalid ~ .invalid-feedback, .is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-control:invalid, .form-control.is-invalid { border-color: #dc3545; padding-right: calc(1.5em + 0.75rem); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right calc(0.375em + 0.1875rem) center; background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { padding-right: calc(1.5em + 0.75rem); background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); } .was-validated .form-select:invalid, .form-select.is-invalid { border-color: #dc3545; padding-right: 4.125rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { border-color: #dc3545; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated .form-check-input:invalid, .form-check-input.is-invalid { border-color: #dc3545; } .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { background-color: #dc3545; } .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: #dc3545; } .form-check-inline .form-check-input ~ .invalid-feedback { margin-left: 0.5em; } .btn { display: inline-block; font-weight: 400; line-height: 1.5; color: #212529; text-align: center; text-decoration: none; vertical-align: middle; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none; background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 1rem; border-radius: 0.25rem; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } .btn:hover { color: #212529; } .btn-check:focus + .btn, .btn:focus { outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .btn:disabled, .btn.disabled, fieldset:disabled .btn { pointer-events: none; opacity: 0.65; } .btn-primary { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-primary:hover { color: #fff; background-color: #0b5ed7; border-color: #0a58ca; } .btn-check:focus + .btn-primary, .btn-primary:focus { color: #fff; background-color: #0b5ed7; border-color: #0a58ca; box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); } .btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { color: #fff; background-color: #0a58ca; border-color: #0a53be; } .btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); } .btn-primary:disabled, .btn-primary.disabled { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-secondary { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-secondary:hover { color: #fff; background-color: #5c636a; border-color: #565e64; } .btn-check:focus + .btn-secondary, .btn-secondary:focus { color: #fff; background-color: #5c636a; border-color: #565e64; box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); } .btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { color: #fff; background-color: #565e64; border-color: #51585e; } .btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); } .btn-secondary:disabled, .btn-secondary.disabled { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-success { color: #fff; background-color: #198754; border-color: #198754; } .btn-success:hover { color: #fff; background-color: #157347; border-color: #146c43; } .btn-check:focus + .btn-success, .btn-success:focus { color: #fff; background-color: #157347; border-color: #146c43; box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); } .btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { color: #fff; background-color: #146c43; border-color: #13653f; } .btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); } .btn-success:disabled, .btn-success.disabled { color: #fff; background-color: #198754; border-color: #198754; } .btn-info { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-info:hover { color: #000; background-color: #31d2f2; border-color: #25cff2; } .btn-check:focus + .btn-info, .btn-info:focus { color: #000; background-color: #31d2f2; border-color: #25cff2; box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); } .btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { color: #000; background-color: #3dd5f3; border-color: #25cff2; } .btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); } .btn-info:disabled, .btn-info.disabled { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-warning { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-warning:hover { color: #000; background-color: #ffca2c; border-color: #ffc720; } .btn-check:focus + .btn-warning, .btn-warning:focus { color: #000; background-color: #ffca2c; border-color: #ffc720; box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { color: #000; background-color: #ffcd39; border-color: #ffc720; } .btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-warning:disabled, .btn-warning.disabled { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-danger { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-danger:hover { color: #fff; background-color: #bb2d3b; border-color: #b02a37; } .btn-check:focus + .btn-danger, .btn-danger:focus { color: #fff; background-color: #bb2d3b; border-color: #b02a37; box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); } .btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { color: #fff; background-color: #b02a37; border-color: #a52834; } .btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); } .btn-danger:disabled, .btn-danger.disabled { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-light { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:hover { color: #000; background-color: #f9fafb; border-color: #f9fafb; } .btn-check:focus + .btn-light, .btn-light:focus { color: #000; background-color: #f9fafb; border-color: #f9fafb; box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); } .btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { color: #000; background-color: #f9fafb; border-color: #f9fafb; } .btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); } .btn-light:disabled, .btn-light.disabled { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-dark { color: #fff; background-color: #212529; border-color: #212529; } .btn-dark:hover { color: #fff; background-color: #1c1f23; border-color: #1a1e21; } .btn-check:focus + .btn-dark, .btn-dark:focus { color: #fff; background-color: #1c1f23; border-color: #1a1e21; box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); } .btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { color: #fff; background-color: #1a1e21; border-color: #191c1f; } .btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); } .btn-dark:disabled, .btn-dark.disabled { color: #fff; background-color: #212529; border-color: #212529; } .btn-outline-primary { color: #0d6efd; border-color: #0d6efd; } .btn-outline-primary:hover { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); } .btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); } .btn-outline-primary:disabled, .btn-outline-primary.disabled { color: #0d6efd; background-color: transparent; } .btn-outline-secondary { color: #6c757d; border-color: #6c757d; } .btn-outline-secondary:hover { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); } .btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { color: #fff; background-color: #6c757d; border-color: #6c757d; } .btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); } .btn-outline-secondary:disabled, .btn-outline-secondary.disabled { color: #6c757d; background-color: transparent; } .btn-outline-success { color: #198754; border-color: #198754; } .btn-outline-success:hover { color: #fff; background-color: #198754; border-color: #198754; } .btn-check:focus + .btn-outline-success, .btn-outline-success:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); } .btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { color: #fff; background-color: #198754; border-color: #198754; } .btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); } .btn-outline-success:disabled, .btn-outline-success.disabled { color: #198754; background-color: transparent; } .btn-outline-info { color: #0dcaf0; border-color: #0dcaf0; } .btn-outline-info:hover { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-check:focus + .btn-outline-info, .btn-outline-info:focus { box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); } .btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { color: #000; background-color: #0dcaf0; border-color: #0dcaf0; } .btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); } .btn-outline-info:disabled, .btn-outline-info.disabled { color: #0dcaf0; background-color: transparent; } .btn-outline-warning { color: #ffc107; border-color: #ffc107; } .btn-outline-warning:hover { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); } .btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { color: #000; background-color: #ffc107; border-color: #ffc107; } .btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); } .btn-outline-warning:disabled, .btn-outline-warning.disabled { color: #ffc107; background-color: transparent; } .btn-outline-danger { color: #dc3545; border-color: #dc3545; } .btn-outline-danger:hover { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); } .btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { color: #fff; background-color: #dc3545; border-color: #dc3545; } .btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); } .btn-outline-danger:disabled, .btn-outline-danger.disabled { color: #dc3545; background-color: transparent; } .btn-outline-light { color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:hover { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-check:focus + .btn-outline-light, .btn-outline-light:focus { box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); } .btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { color: #000; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); } .btn-outline-light:disabled, .btn-outline-light.disabled { color: #f8f9fa; background-color: transparent; } .btn-outline-dark { color: #212529; border-color: #212529; } .btn-outline-dark:hover { color: #fff; background-color: #212529; border-color: #212529; } .btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); } .btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { color: #fff; background-color: #212529; border-color: #212529; } .btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); } .btn-outline-dark:disabled, .btn-outline-dark.disabled { color: #212529; background-color: transparent; } .btn-link { font-weight: 400; color: #0d6efd; text-decoration: underline; } .btn-link:hover { color: #0a58ca; } .btn-link:disabled, .btn-link.disabled { color: #6c757d; } .btn-lg, .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .fade { transition: opacity 0.15s linear; } @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { opacity: 0; } .collapse:not(.show) { display: none; } .collapsing { height: 0; overflow: hidden; transition: height 0.35s ease; } @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } .dropup, .dropend, .dropdown, .dropstart { position: relative; } .dropdown-toggle { white-space: nowrap; } .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid; border-right: 0.3em solid transparent; border-bottom: 0; border-left: 0.3em solid transparent; } .dropdown-toggle:empty::after { margin-left: 0; } .dropdown-menu { position: absolute; top: 100%; z-index: 1000; display: none; min-width: 10rem; padding: 0.5rem 0; margin: 0; font-size: 1rem; color: #212529; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .dropdown-menu[data-bs-popper] { left: 0; margin-top: 0.125rem; } .dropdown-menu-start { --bs-position: start; } .dropdown-menu-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-end { --bs-position: end; } .dropdown-menu-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } @media (min-width: 576px) { .dropdown-menu-sm-start { --bs-position: start; } .dropdown-menu-sm-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-sm-end { --bs-position: end; } .dropdown-menu-sm-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 768px) { .dropdown-menu-md-start { --bs-position: start; } .dropdown-menu-md-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-md-end { --bs-position: end; } .dropdown-menu-md-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 992px) { .dropdown-menu-lg-start { --bs-position: start; } .dropdown-menu-lg-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-lg-end { --bs-position: end; } .dropdown-menu-lg-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 1200px) { .dropdown-menu-xl-start { --bs-position: start; } .dropdown-menu-xl-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-xl-end { --bs-position: end; } .dropdown-menu-xl-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } @media (min-width: 1400px) { .dropdown-menu-xxl-start { --bs-position: start; } .dropdown-menu-xxl-start[data-bs-popper] { right: auto /* rtl:ignore */; left: 0 /* rtl:ignore */; } .dropdown-menu-xxl-end { --bs-position: end; } .dropdown-menu-xxl-end[data-bs-popper] { right: 0 /* rtl:ignore */; left: auto /* rtl:ignore */; } } .dropup .dropdown-menu { top: auto; bottom: 100%; } .dropup .dropdown-menu[data-bs-popper] { margin-top: 0; margin-bottom: 0.125rem; } .dropup .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0; border-right: 0.3em solid transparent; border-bottom: 0.3em solid; border-left: 0.3em solid transparent; } .dropup .dropdown-toggle:empty::after { margin-left: 0; } .dropend .dropdown-menu { top: 0; right: auto; left: 100%; } .dropend .dropdown-menu[data-bs-popper] { margin-top: 0; margin-left: 0.125rem; } .dropend .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0; border-bottom: 0.3em solid transparent; border-left: 0.3em solid; } .dropend .dropdown-toggle:empty::after { margin-left: 0; } .dropend .dropdown-toggle::after { vertical-align: 0; } .dropstart .dropdown-menu { top: 0; right: 100%; left: auto; } .dropstart .dropdown-menu[data-bs-popper] { margin-top: 0; margin-right: 0.125rem; } .dropstart .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } .dropstart .dropdown-toggle::after { display: none; } .dropstart .dropdown-toggle::before { display: inline-block; margin-right: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0.3em solid; border-bottom: 0.3em solid transparent; } .dropstart .dropdown-toggle:empty::after { margin-left: 0; } .dropstart .dropdown-toggle::before { vertical-align: 0; } .dropdown-divider { height: 0; margin: 0.5rem 0; overflow: hidden; border-top: 1px solid rgba(0, 0, 0, 0.15); } .dropdown-item { display: block; width: 100%; padding: 0.25rem 1rem; clear: both; font-weight: 400; color: #212529; text-align: inherit; text-decoration: none; white-space: nowrap; background-color: transparent; border: 0; } .dropdown-item:hover, .dropdown-item:focus { color: #1e2125; background-color: #e9ecef; } .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #0d6efd; } .dropdown-item.disabled, .dropdown-item:disabled { color: #adb5bd; pointer-events: none; background-color: transparent; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1rem; margin-bottom: 0; font-size: 0.875rem; color: #6c757d; white-space: nowrap; } .dropdown-item-text { display: block; padding: 0.25rem 1rem; color: #212529; } .dropdown-menu-dark { color: #dee2e6; background-color: #343a40; border-color: rgba(0, 0, 0, 0.15); } .dropdown-menu-dark .dropdown-item { color: #dee2e6; } .dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { color: #fff; background-color: rgba(255, 255, 255, 0.15); } .dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { color: #fff; background-color: #0d6efd; } .dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { color: #adb5bd; } .dropdown-menu-dark .dropdown-divider { border-color: rgba(0, 0, 0, 0.15); } .dropdown-menu-dark .dropdown-item-text { color: #dee2e6; } .dropdown-menu-dark .dropdown-header { color: #adb5bd; } .btn-group, .btn-group-vertical { position: relative; display: inline-flex; vertical-align: middle; } .btn-group > .btn, .btn-group-vertical > .btn { position: relative; flex: 1 1 auto; } .btn-group > .btn-check:checked + .btn, .btn-group > .btn-check:focus + .btn, .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn-check:checked + .btn, .btn-group-vertical > .btn-check:focus + .btn, .btn-group-vertical > .btn:hover, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } .btn-toolbar { display: flex; flex-wrap: wrap; justify-content: flex-start; } .btn-toolbar .input-group { width: auto; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) { margin-left: -1px; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:nth-child(n+3), .btn-group > :not(.btn-check) + .btn, .btn-group > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .dropdown-toggle-split { padding-right: 0.5625rem; padding-left: 0.5625rem; } .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { margin-left: 0; } .dropstart .dropdown-toggle-split::before { margin-right: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { padding-right: 0.375rem; padding-left: 0.375rem; } .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; padding-left: 0.75rem; } .btn-group-vertical { flex-direction: column; align-items: flex-start; justify-content: center; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group { width: 100%; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) { margin-top: -1px; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn ~ .btn, .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-top-right-radius: 0; } .nav { display: flex; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: 0.5rem 1rem; text-decoration: none; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .nav-link { transition: none; } } .nav-link.disabled { color: #6c757d; pointer-events: none; cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } .nav-tabs .nav-link { margin-bottom: -1px; background: none; border: 1px solid transparent; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { border-color: #e9ecef #e9ecef #dee2e6; isolation: isolate; } .nav-tabs .nav-link.disabled { color: #6c757d; background-color: transparent; border-color: transparent; } .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: #495057; background-color: #fff; border-color: #dee2e6 #dee2e6 #fff; } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { background: none; border: 0; border-radius: 0.25rem; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #0d6efd; } .nav-fill > .nav-link, .nav-fill .nav-item { flex: 1 1 auto; text-align: center; } .nav-justified > .nav-link, .nav-justified .nav-item { flex-basis: 0; flex-grow: 1; text-align: center; } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .navbar { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar > .container, .navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl { display: flex; flex-wrap: inherit; align-items: center; justify-content: space-between; } .navbar-brand { padding-top: 0.3125rem; padding-bottom: 0.3125rem; margin-right: 1rem; font-size: 1.25rem; text-decoration: none; white-space: nowrap; } .navbar-nav { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; list-style: none; } .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } .navbar-nav .dropdown-menu { position: static; } .navbar-text { padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar-collapse { flex-basis: 100%; flex-grow: 1; align-items: center; } .navbar-toggler { padding: 0.25rem 0.75rem; font-size: 1.25rem; line-height: 1; background-color: transparent; border: 1px solid transparent; border-radius: 0.25rem; transition: box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .navbar-toggler { transition: none; } } .navbar-toggler:hover { text-decoration: none; } .navbar-toggler:focus { text-decoration: none; outline: 0; box-shadow: 0 0 0 0.25rem; } .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; background-repeat: no-repeat; background-position: center; background-size: 100%; } .navbar-nav-scroll { max-height: var(--bs-scroll-height, 75vh); overflow-y: auto; } @media (min-width: 576px) { .navbar-expand-sm { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-sm .navbar-nav { flex-direction: row; } .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-sm .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-sm .navbar-nav-scroll { overflow: visible; } .navbar-expand-sm .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-sm .navbar-toggler { display: none; } } @media (min-width: 768px) { .navbar-expand-md { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-md .navbar-nav { flex-direction: row; } .navbar-expand-md .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-md .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-md .navbar-nav-scroll { overflow: visible; } .navbar-expand-md .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-md .navbar-toggler { display: none; } } @media (min-width: 992px) { .navbar-expand-lg { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-lg .navbar-nav { flex-direction: row; } .navbar-expand-lg .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-lg .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-lg .navbar-nav-scroll { overflow: visible; } .navbar-expand-lg .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-lg .navbar-toggler { display: none; } } @media (min-width: 1200px) { .navbar-expand-xl { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-xl .navbar-nav { flex-direction: row; } .navbar-expand-xl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xl .navbar-nav-scroll { overflow: visible; } .navbar-expand-xl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xl .navbar-toggler { display: none; } } @media (min-width: 1400px) { .navbar-expand-xxl { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-xxl .navbar-nav { flex-direction: row; } .navbar-expand-xxl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xxl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xxl .navbar-nav-scroll { overflow: visible; } .navbar-expand-xxl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xxl .navbar-toggler { display: none; } } .navbar-expand { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand .navbar-nav { flex-direction: row; } .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand .navbar-nav-scroll { overflow: visible; } .navbar-expand .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand .navbar-toggler { display: none; } .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.55); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.7); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.55); border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.55); } .navbar-light .navbar-text a, .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { color: rgba(0, 0, 0, 0.9); } .navbar-dark .navbar-brand { color: #fff; } .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { color: #fff; } .navbar-dark .navbar-nav .nav-link { color: rgba(255, 255, 255, 0.55); } .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { color: rgba(255, 255, 255, 0.75); } .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .nav-link.active { color: #fff; } .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.55); border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.55); } .navbar-dark .navbar-text a, .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { color: #fff; } .card { position: relative; display: flex; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: #fff; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; } .card > hr { margin-right: 0; margin-left: 0; } .card > .list-group { border-top: inherit; border-bottom: inherit; } .card > .list-group:first-child { border-top-width: 0; border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .card > .list-group:last-child { border-bottom-width: 0; border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-left-radius: calc(0.25rem - 1px); } .card > .card-header + .list-group, .card > .list-group + .card-footer { border-top: 0; } .card-body { flex: 1 1 auto; padding: 1rem 1rem; } .card-title { margin-bottom: 0.5rem; } .card-subtitle { margin-top: -0.25rem; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link:hover { text-decoration: none; } .card-link + .card-link { margin-left: 1rem /* rtl:ignore */; } .card-header { padding: 0.5rem 1rem; margin-bottom: 0; background-color: rgba(0, 0, 0, 0.03); border-bottom: 1px solid rgba(0, 0, 0, 0.125); } .card-header:first-child { border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } .card-footer { padding: 0.5rem 1rem; background-color: rgba(0, 0, 0, 0.03); border-top: 1px solid rgba(0, 0, 0, 0.125); } .card-footer:last-child { border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); } .card-header-tabs { margin-right: -0.5rem; margin-bottom: -0.5rem; margin-left: -0.5rem; border-bottom: 0; } .card-header-pills { margin-right: -0.5rem; margin-left: -0.5rem; } .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: 1rem; border-radius: calc(0.25rem - 1px); } .card-img, .card-img-top, .card-img-bottom { width: 100%; } .card-img, .card-img-top { border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .card-img, .card-img-bottom { border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-left-radius: calc(0.25rem - 1px); } .card-group > .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-group { display: flex; flex-flow: row wrap; } .card-group > .card { flex: 1 0 0%; margin-bottom: 0; } .card-group > .card + .card { margin-left: 0; border-left: 0; } .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-bottom, .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-bottom, .card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 0; } } .accordion-button { position: relative; display: flex; align-items: center; width: 100%; padding: 1rem 1.25rem; font-size: 1rem; color: #212529; text-align: left; background-color: transparent; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0; overflow-anchor: none; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; } @media (prefers-reduced-motion: reduce) { .accordion-button { transition: none; } } .accordion-button.collapsed { border-bottom-width: 0; } .accordion-button:not(.collapsed) { color: #0c63e4; background-color: #e7f1ff; } .accordion-button:not(.collapsed)::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); transform: rotate(180deg); } .accordion-button::after { flex-shrink: 0; width: 1.25rem; height: 1.25rem; margin-left: auto; content: ""; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-size: 1.25rem; transition: transform 0.2s ease-in-out; } @media (prefers-reduced-motion: reduce) { .accordion-button::after { transition: none; } } .accordion-button:hover { z-index: 2; } .accordion-button:focus { z-index: 3; border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .accordion-header { margin-bottom: 0; } .accordion-item:first-of-type .accordion-button { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .accordion-item:last-of-type .accordion-button.collapsed { border-bottom-width: 1px; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .accordion-item:last-of-type .accordion-collapse { border-bottom-width: 1px; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .accordion-collapse { border: solid rgba(0, 0, 0, 0.125); border-width: 0 1px; } .accordion-body { padding: 1rem 1.25rem; } .accordion-flush .accordion-button { border-right: 0; border-left: 0; border-radius: 0; } .accordion-flush .accordion-collapse { border-width: 0; } .accordion-flush .accordion-item:first-of-type .accordion-button { border-top-width: 0; border-top-left-radius: 0; border-top-right-radius: 0; } .accordion-flush .accordion-item:last-of-type .accordion-button.collapsed { border-bottom-width: 0; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .breadcrumb { display: flex; flex-wrap: wrap; padding: 0 0; margin-bottom: 1rem; list-style: none; } .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { float: left; padding-right: 0.5rem; color: #6c757d; content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } .breadcrumb-item.active { color: #6c757d; } .pagination { display: flex; padding-left: 0; list-style: none; } .page-link { position: relative; display: block; color: #0d6efd; text-decoration: none; background-color: #fff; border: 1px solid #dee2e6; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .page-link { transition: none; } } .page-link:hover { z-index: 2; color: #0a58ca; background-color: #e9ecef; border-color: #dee2e6; } .page-link:focus { z-index: 3; color: #0a58ca; background-color: #e9ecef; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .page-item:not(:first-child) .page-link { margin-left: -1px; } .page-item.active .page-link { z-index: 3; color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .page-item.disabled .page-link { color: #6c757d; pointer-events: none; background-color: #fff; border-color: #dee2e6; } .page-link { padding: 0.375rem 0.75rem; } .page-item:first-child .page-link { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .page-item:last-child .page-link { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.25rem; } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.875rem; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .badge { display: inline-block; padding: 0.35em 0.65em; font-size: 0.75em; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.25rem; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; } .alert { position: relative; padding: 1rem 1rem; margin-bottom: 1rem; border: 1px solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 3rem; } .alert-dismissible .btn-close { position: absolute; top: 0; right: 0; z-index: 2; padding: 1.25rem 1rem; } .alert-primary { color: #084298; background-color: #cfe2ff; border-color: #b6d4fe; } .alert-primary .alert-link { color: #06357a; } .alert-secondary { color: #41464b; background-color: #e2e3e5; border-color: #d3d6d8; } .alert-secondary .alert-link { color: #34383c; } .alert-success { color: #0f5132; background-color: #d1e7dd; border-color: #badbcc; } .alert-success .alert-link { color: #0c4128; } .alert-info { color: #055160; background-color: #cff4fc; border-color: #b6effb; } .alert-info .alert-link { color: #04414d; } .alert-warning { color: #664d03; background-color: #fff3cd; border-color: #ffecb5; } .alert-warning .alert-link { color: #523e02; } .alert-danger { color: #842029; background-color: #f8d7da; border-color: #f5c2c7; } .alert-danger .alert-link { color: #6a1a21; } .alert-light { color: #636464; background-color: #fefefe; border-color: #fdfdfe; } .alert-light .alert-link { color: #4f5050; } .alert-dark { color: #141619; background-color: #d3d3d4; border-color: #bcbebf; } .alert-dark .alert-link { color: #101214; } @-webkit-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } .progress { display: flex; height: 1rem; overflow: hidden; font-size: 0.75rem; background-color: #e9ecef; border-radius: 0.25rem; } .progress-bar { display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: #fff; text-align: center; white-space: nowrap; background-color: #0d6efd; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { -webkit-animation: 1s linear infinite progress-bar-stripes; animation: 1s linear infinite progress-bar-stripes; } @media (prefers-reduced-motion: reduce) { .progress-bar-animated { -webkit-animation: none; animation: none; } } .list-group { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; border-radius: 0.25rem; } .list-group-item-action { width: 100%; color: #495057; text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { z-index: 1; color: #495057; text-decoration: none; background-color: #f8f9fa; } .list-group-item-action:active { color: #212529; background-color: #e9ecef; } .list-group-item { position: relative; display: block; padding: 0.5rem 1rem; text-decoration: none; background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.125); } .list-group-item:first-child { border-top-left-radius: inherit; border-top-right-radius: inherit; } .list-group-item:last-child { border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; } .list-group-item.disabled, .list-group-item:disabled { color: #6c757d; pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; color: #fff; background-color: #0d6efd; border-color: #0d6efd; } .list-group-item + .list-group-item { border-top-width: 0; } .list-group-item + .list-group-item.active { margin-top: -1px; border-top-width: 1px; } .list-group-horizontal { flex-direction: row; } .list-group-horizontal > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal > .list-group-item.active { margin-top: 0; } .list-group-horizontal > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } @media (min-width: 576px) { .list-group-horizontal-sm { flex-direction: row; } .list-group-horizontal-sm > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-sm > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-sm > .list-group-item.active { margin-top: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 768px) { .list-group-horizontal-md { flex-direction: row; } .list-group-horizontal-md > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-md > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-md > .list-group-item.active { margin-top: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 992px) { .list-group-horizontal-lg { flex-direction: row; } .list-group-horizontal-lg > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-lg > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-lg > .list-group-item.active { margin-top: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 1200px) { .list-group-horizontal-xl { flex-direction: row; } .list-group-horizontal-xl > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xl > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-xl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } @media (min-width: 1400px) { .list-group-horizontal-xxl { flex-direction: row; } .list-group-horizontal-xxl > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xxl > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-xxl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xxl > .list-group-item + .list-group-item { border-top-width: 1px; border-left-width: 0; } .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { margin-left: -1px; border-left-width: 1px; } } .list-group-flush { border-radius: 0; } .list-group-flush > .list-group-item { border-width: 0 0 1px; } .list-group-flush > .list-group-item:last-child { border-bottom-width: 0; } .list-group-item-primary { color: #084298; background-color: #cfe2ff; } .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #084298; background-color: #bacbe6; } .list-group-item-primary.list-group-item-action.active { color: #fff; background-color: #084298; border-color: #084298; } .list-group-item-secondary { color: #41464b; background-color: #e2e3e5; } .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #41464b; background-color: #cbccce; } .list-group-item-secondary.list-group-item-action.active { color: #fff; background-color: #41464b; border-color: #41464b; } .list-group-item-success { color: #0f5132; background-color: #d1e7dd; } .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #0f5132; background-color: #bcd0c7; } .list-group-item-success.list-group-item-action.active { color: #fff; background-color: #0f5132; border-color: #0f5132; } .list-group-item-info { color: #055160; background-color: #cff4fc; } .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #055160; background-color: #badce3; } .list-group-item-info.list-group-item-action.active { color: #fff; background-color: #055160; border-color: #055160; } .list-group-item-warning { color: #664d03; background-color: #fff3cd; } .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #664d03; background-color: #e6dbb9; } .list-group-item-warning.list-group-item-action.active { color: #fff; background-color: #664d03; border-color: #664d03; } .list-group-item-danger { color: #842029; background-color: #f8d7da; } .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #842029; background-color: #dfc2c4; } .list-group-item-danger.list-group-item-action.active { color: #fff; background-color: #842029; border-color: #842029; } .list-group-item-light { color: #636464; background-color: #fefefe; } .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #636464; background-color: #e5e5e5; } .list-group-item-light.list-group-item-action.active { color: #fff; background-color: #636464; border-color: #636464; } .list-group-item-dark { color: #141619; background-color: #d3d3d4; } .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #141619; background-color: #bebebf; } .list-group-item-dark.list-group-item-action.active { color: #fff; background-color: #141619; border-color: #141619; } .btn-close { box-sizing: content-box; width: 1em; height: 1em; padding: 0.25em 0.25em; color: #000; background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; border: 0; border-radius: 0.25rem; opacity: 0.5; } .btn-close:hover { color: #000; text-decoration: none; opacity: 0.75; } .btn-close:focus { outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); opacity: 1; } .btn-close:disabled, .btn-close.disabled { pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; opacity: 0.25; } .btn-close-white { filter: invert(1) grayscale(100%) brightness(200%); } .toast { width: 350px; max-width: 100%; font-size: 0.875rem; pointer-events: auto; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .toast:not(.showing):not(.show) { opacity: 0; } .toast.hide { display: none; } .toast-container { width: -webkit-max-content; width: -moz-max-content; width: max-content; max-width: 100%; pointer-events: none; } .toast-container > :not(:last-child) { margin-bottom: 0.75rem; } .toast-header { display: flex; align-items: center; padding: 0.5rem 0.75rem; color: #6c757d; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border-bottom: 1px solid rgba(0, 0, 0, 0.05); border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .toast-header .btn-close { margin-right: -0.375rem; margin-left: 0.75rem; } .toast-body { padding: 0.75rem; word-wrap: break-word; } .modal-open { overflow: hidden; } .modal-open .modal { overflow-x: hidden; overflow-y: auto; } .modal { position: fixed; top: 0; left: 0; z-index: 1050; display: none; width: 100%; height: 100%; overflow: hidden; outline: 0; } .modal-dialog { position: relative; width: auto; margin: 0.5rem; pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; transform: translate(0, -50px); } @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { transform: none; } .modal.modal-static .modal-dialog { transform: scale(1.02); } .modal-dialog-scrollable { height: calc(100% - 1rem); } .modal-dialog-scrollable .modal-content { max-height: 100%; overflow: hidden; } .modal-dialog-scrollable .modal-body { overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; min-height: calc(100% - 1rem); } .modal-content { position: relative; display: flex; flex-direction: column; width: 100%; pointer-events: auto; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-backdrop { position: fixed; top: 0; left: 0; z-index: 1040; width: 100vw; height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop.show { opacity: 0.5; } .modal-header { display: flex; flex-shrink: 0; align-items: center; justify-content: space-between; padding: 1rem 1rem; border-bottom: 1px solid #dee2e6; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .modal-header .btn-close { padding: 0.5rem 0.5rem; margin: -0.5rem -0.5rem -0.5rem auto; } .modal-title { margin-bottom: 0; line-height: 1.5; } .modal-body { position: relative; flex: 1 1 auto; padding: 1rem; } .modal-footer { display: flex; flex-wrap: wrap; flex-shrink: 0; align-items: center; justify-content: flex-end; padding: 0.75rem; border-top: 1px solid #dee2e6; border-bottom-right-radius: calc(0.3rem - 1px); border-bottom-left-radius: calc(0.3rem - 1px); } .modal-footer > * { margin: 0.25rem; } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } .modal-dialog-scrollable { height: calc(100% - 3.5rem); } .modal-dialog-centered { min-height: calc(100% - 3.5rem); } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { .modal-lg, .modal-xl { max-width: 800px; } } @media (min-width: 1200px) { .modal-xl { max-width: 1140px; } } .modal-fullscreen { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen .modal-header { border-radius: 0; } .modal-fullscreen .modal-body { overflow-y: auto; } .modal-fullscreen .modal-footer { border-radius: 0; } @media (max-width: 575.98px) { .modal-fullscreen-sm-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-sm-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-sm-down .modal-header { border-radius: 0; } .modal-fullscreen-sm-down .modal-body { overflow-y: auto; } .modal-fullscreen-sm-down .modal-footer { border-radius: 0; } } @media (max-width: 767.98px) { .modal-fullscreen-md-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-md-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-md-down .modal-header { border-radius: 0; } .modal-fullscreen-md-down .modal-body { overflow-y: auto; } .modal-fullscreen-md-down .modal-footer { border-radius: 0; } } @media (max-width: 991.98px) { .modal-fullscreen-lg-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-lg-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-lg-down .modal-header { border-radius: 0; } .modal-fullscreen-lg-down .modal-body { overflow-y: auto; } .modal-fullscreen-lg-down .modal-footer { border-radius: 0; } } @media (max-width: 1199.98px) { .modal-fullscreen-xl-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-xl-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-xl-down .modal-header { border-radius: 0; } .modal-fullscreen-xl-down .modal-body { overflow-y: auto; } .modal-fullscreen-xl-down .modal-footer { border-radius: 0; } } @media (max-width: 1399.98px) { .modal-fullscreen-xxl-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-xxl-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-xxl-down .modal-header { border-radius: 0; } .modal-fullscreen-xxl-down .modal-body { overflow-y: auto; } .modal-fullscreen-xxl-down .modal-footer { border-radius: 0; } } .tooltip { position: absolute; z-index: 1070; display: block; margin: 0; font-family: var(--bs-font-sans-serif); font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; opacity: 0; } .tooltip.show { opacity: 0.9; } .tooltip .tooltip-arrow { position: absolute; display: block; width: 0.8rem; height: 0.4rem; } .tooltip .tooltip-arrow::before { position: absolute; content: ""; border-color: transparent; border-style: solid; } .bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] { padding: 0.4rem 0; } .bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { bottom: 0; } .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { top: -1px; border-width: 0.4rem 0.4rem 0; border-top-color: #000; } .bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] { padding: 0 0.4rem; } .bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { left: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { right: -1px; border-width: 0.4rem 0.4rem 0.4rem 0; border-right-color: #000; } .bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] { padding: 0.4rem 0; } .bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { top: 0; } .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { bottom: -1px; border-width: 0 0.4rem 0.4rem; border-bottom-color: #000; } .bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] { padding: 0 0.4rem; } .bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { right: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { left: -1px; border-width: 0.4rem 0 0.4rem 0.4rem; border-left-color: #000; } .tooltip-inner { max-width: 200px; padding: 0.25rem 0.5rem; color: #fff; text-align: center; background-color: #000; border-radius: 0.25rem; } .popover { position: absolute; top: 0; left: 0 /* rtl:ignore */; z-index: 1060; display: block; max-width: 276px; font-family: var(--bs-font-sans-serif); font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; } .popover .popover-arrow { position: absolute; display: block; width: 1rem; height: 0.5rem; } .popover .popover-arrow::before, .popover .popover-arrow::after { position: absolute; display: block; content: ""; border-color: transparent; border-style: solid; } .bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { bottom: calc(-0.5rem - 1px); } .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { bottom: 0; border-width: 0.5rem 0.5rem 0; border-top-color: rgba(0, 0, 0, 0.25); } .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { bottom: 1px; border-width: 0.5rem 0.5rem 0; border-top-color: #fff; } .bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { left: calc(-0.5rem - 1px); width: 0.5rem; height: 1rem; } .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { left: 0; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: rgba(0, 0, 0, 0.25); } .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { left: 1px; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: #fff; } .bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { top: calc(-0.5rem - 1px); } .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { top: 0; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: rgba(0, 0, 0, 0.25); } .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { top: 1px; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: #fff; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: 1rem; margin-left: -0.5rem; content: ""; border-bottom: 1px solid #f0f0f0; } .bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { right: calc(-0.5rem - 1px); width: 0.5rem; height: 1rem; } .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { right: 0; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: rgba(0, 0, 0, 0.25); } .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { right: 1px; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: #fff; } .popover-header { padding: 0.5rem 1rem; margin-bottom: 0; font-size: 1rem; background-color: #f0f0f0; border-bottom: 1px solid #d8d8d8; border-top-left-radius: calc(0.3rem - 1px); border-top-right-radius: calc(0.3rem - 1px); } .popover-header:empty { display: none; } .popover-body { padding: 1rem 1rem; color: #212529; } .carousel { position: relative; } .carousel.pointer-event { touch-action: pan-y; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner::after { display: block; clear: both; content: ""; } .carousel-item { position: relative; display: none; float: left; width: 100%; margin-right: -100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; transition: transform 0.6s ease-in-out; } @media (prefers-reduced-motion: reduce) { .carousel-item { transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { display: block; } /* rtl:begin:ignore */ .carousel-item-next:not(.carousel-item-start), .active.carousel-item-end { transform: translateX(100%); } .carousel-item-prev:not(.carousel-item-end), .active.carousel-item-start { transform: translateX(-100%); } /* rtl:end:ignore */ .carousel-fade .carousel-item { opacity: 0; transition-property: opacity; transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-start, .carousel-fade .carousel-item-prev.carousel-item-end { z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-start, .carousel-fade .active.carousel-item-end { z-index: 0; opacity: 0; transition: opacity 0s 0.6s; } @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-start, .carousel-fade .active.carousel-item-end { transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; padding: 0; color: #fff; text-align: center; background: none; border: 0; opacity: 0.5; transition: opacity 0.15s ease; } @media (prefers-reduced-motion: reduce) { .carousel-control-prev, .carousel-control-next { transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: #fff; text-decoration: none; outline: 0; opacity: 0.9; } .carousel-control-prev { left: 0; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 2rem; height: 2rem; background-repeat: no-repeat; background-position: 50%; background-size: 100% 100%; } /* rtl:options: { "autoRename": true, "stringMap":[ { "name" : "prev-next", "search" : "prev", "replace" : "next" } ] } */ .carousel-control-prev-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; bottom: 0; left: 0; z-index: 2; display: flex; justify-content: center; padding: 0; margin-right: 15%; margin-bottom: 1rem; margin-left: 15%; list-style: none; } .carousel-indicators [data-bs-target] { box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; padding: 0; margin-right: 3px; margin-left: 3px; text-indent: -999px; cursor: pointer; background-color: #fff; background-clip: padding-box; border: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; opacity: 0.5; transition: opacity 0.6s ease; } @media (prefers-reduced-motion: reduce) { .carousel-indicators [data-bs-target] { transition: none; } } .carousel-indicators .active { opacity: 1; } .carousel-caption { position: absolute; right: 15%; bottom: 1.25rem; left: 15%; padding-top: 1.25rem; padding-bottom: 1.25rem; color: #fff; text-align: center; } .carousel-dark .carousel-control-prev-icon, .carousel-dark .carousel-control-next-icon { filter: invert(1) grayscale(100); } .carousel-dark .carousel-indicators [data-bs-target] { background-color: #000; } .carousel-dark .carousel-caption { color: #000; } @-webkit-keyframes spinner-border { to { transform: rotate(360deg) /* rtl:ignore */; } } @keyframes spinner-border { to { transform: rotate(360deg) /* rtl:ignore */; } } .spinner-border { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; -webkit-animation: 0.75s linear infinite spinner-border; animation: 0.75s linear infinite spinner-border; } .spinner-border-sm { width: 1rem; height: 1rem; border-width: 0.2em; } @-webkit-keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } @keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } .spinner-grow { display: inline-block; width: 2rem; height: 2rem; vertical-align: text-bottom; background-color: currentColor; border-radius: 50%; opacity: 0; -webkit-animation: 0.75s linear infinite spinner-grow; animation: 0.75s linear infinite spinner-grow; } .spinner-grow-sm { width: 1rem; height: 1rem; } @media (prefers-reduced-motion: reduce) { .spinner-border, .spinner-grow { -webkit-animation-duration: 1.5s; animation-duration: 1.5s; } } .clearfix::after { display: block; clear: both; content: ""; } .link-primary { color: #0d6efd; } .link-primary:hover, .link-primary:focus { color: #0a58ca; } .link-secondary { color: #6c757d; } .link-secondary:hover, .link-secondary:focus { color: #565e64; } .link-success { color: #198754; } .link-success:hover, .link-success:focus { color: #146c43; } .link-info { color: #0dcaf0; } .link-info:hover, .link-info:focus { color: #3dd5f3; } .link-warning { color: #ffc107; } .link-warning:hover, .link-warning:focus { color: #ffcd39; } .link-danger { color: #dc3545; } .link-danger:hover, .link-danger:focus { color: #b02a37; } .link-light { color: #f8f9fa; } .link-light:hover, .link-light:focus { color: #f9fafb; } .link-dark { color: #212529; } .link-dark:hover, .link-dark:focus { color: #1a1e21; } .ratio { position: relative; width: 100%; } .ratio::before { display: block; padding-top: var(--bs-aspect-ratio); content: ""; } .ratio > * { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .ratio-1x1 { --bs-aspect-ratio: 100%; } .ratio-4x3 { --bs-aspect-ratio: calc(3 / 4 * 100%); } .ratio-16x9 { --bs-aspect-ratio: calc(9 / 16 * 100%); } .ratio-21x9 { --bs-aspect-ratio: calc(9 / 21 * 100%); } .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: 1030; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: 1030; } .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } @media (min-width: 576px) { .sticky-sm-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 768px) { .sticky-md-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 992px) { .sticky-lg-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 1200px) { .sticky-xl-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 1400px) { .sticky-xxl-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } .visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } .stretched-link::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; content: ""; } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .align-baseline { vertical-align: baseline !important; } .align-top { vertical-align: top !important; } .align-middle { vertical-align: middle !important; } .align-bottom { vertical-align: bottom !important; } .align-text-bottom { vertical-align: text-bottom !important; } .align-text-top { vertical-align: text-top !important; } .float-start { float: left !important; } .float-end { float: right !important; } .float-none { float: none !important; } .overflow-auto { overflow: auto !important; } .overflow-hidden { overflow: hidden !important; } .overflow-visible { overflow: visible !important; } .overflow-scroll { overflow: scroll !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-grid { display: grid !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: flex !important; } .d-inline-flex { display: inline-flex !important; } .d-none { display: none !important; } .shadow { box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; } .shadow-sm { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } .shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; } .shadow-none { box-shadow: none !important; } .position-static { position: static !important; } .position-relative { position: relative !important; } .position-absolute { position: absolute !important; } .position-fixed { position: fixed !important; } .position-sticky { position: -webkit-sticky !important; position: sticky !important; } .top-0 { top: 0 !important; } .top-50 { top: 50% !important; } .top-100 { top: 100% !important; } .bottom-0 { bottom: 0 !important; } .bottom-50 { bottom: 50% !important; } .bottom-100 { bottom: 100% !important; } .start-0 { left: 0 !important; } .start-50 { left: 50% !important; } .start-100 { left: 100% !important; } .end-0 { right: 0 !important; } .end-50 { right: 50% !important; } .end-100 { right: 100% !important; } .translate-middle { transform: translate(-50%, -50%) !important; } .translate-middle-x { transform: translateX(-50%) !important; } .translate-middle-y { transform: translateY(-50%) !important; } .border { border: 1px solid #dee2e6 !important; } .border-0 { border: 0 !important; } .border-top { border-top: 1px solid #dee2e6 !important; } .border-top-0 { border-top: 0 !important; } .border-end { border-right: 1px solid #dee2e6 !important; } .border-end-0 { border-right: 0 !important; } .border-bottom { border-bottom: 1px solid #dee2e6 !important; } .border-bottom-0 { border-bottom: 0 !important; } .border-start { border-left: 1px solid #dee2e6 !important; } .border-start-0 { border-left: 0 !important; } .border-primary { border-color: #0d6efd !important; } .border-secondary { border-color: #6c757d !important; } .border-success { border-color: #198754 !important; } .border-info { border-color: #0dcaf0 !important; } .border-warning { border-color: #ffc107 !important; } .border-danger { border-color: #dc3545 !important; } .border-light { border-color: #f8f9fa !important; } .border-dark { border-color: #212529 !important; } .border-white { border-color: #fff !important; } .border-0 { border-width: 0 !important; } .border-1 { border-width: 1px !important; } .border-2 { border-width: 2px !important; } .border-3 { border-width: 3px !important; } .border-4 { border-width: 4px !important; } .border-5 { border-width: 5px !important; } .w-25 { width: 25% !important; } .w-50 { width: 50% !important; } .w-75 { width: 75% !important; } .w-100 { width: 100% !important; } .w-auto { width: auto !important; } .mw-100 { max-width: 100% !important; } .vw-100 { width: 100vw !important; } .min-vw-100 { min-width: 100vw !important; } .h-25 { height: 25% !important; } .h-50 { height: 50% !important; } .h-75 { height: 75% !important; } .h-100 { height: 100% !important; } .h-auto { height: auto !important; } .mh-100 { max-height: 100% !important; } .vh-100 { height: 100vh !important; } .min-vh-100 { min-height: 100vh !important; } .flex-fill { flex: 1 1 auto !important; } .flex-row { flex-direction: row !important; } .flex-column { flex-direction: column !important; } .flex-row-reverse { flex-direction: row-reverse !important; } .flex-column-reverse { flex-direction: column-reverse !important; } .flex-grow-0 { flex-grow: 0 !important; } .flex-grow-1 { flex-grow: 1 !important; } .flex-shrink-0 { flex-shrink: 0 !important; } .flex-shrink-1 { flex-shrink: 1 !important; } .flex-wrap { flex-wrap: wrap !important; } .flex-nowrap { flex-wrap: nowrap !important; } .flex-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-0 { gap: 0 !important; } .gap-1 { gap: 0.25rem !important; } .gap-2 { gap: 0.5rem !important; } .gap-3 { gap: 1rem !important; } .gap-4 { gap: 1.5rem !important; } .gap-5 { gap: 3rem !important; } .justify-content-start { justify-content: flex-start !important; } .justify-content-end { justify-content: flex-end !important; } .justify-content-center { justify-content: center !important; } .justify-content-between { justify-content: space-between !important; } .justify-content-around { justify-content: space-around !important; } .justify-content-evenly { justify-content: space-evenly !important; } .align-items-start { align-items: flex-start !important; } .align-items-end { align-items: flex-end !important; } .align-items-center { align-items: center !important; } .align-items-baseline { align-items: baseline !important; } .align-items-stretch { align-items: stretch !important; } .align-content-start { align-content: flex-start !important; } .align-content-end { align-content: flex-end !important; } .align-content-center { align-content: center !important; } .align-content-between { align-content: space-between !important; } .align-content-around { align-content: space-around !important; } .align-content-stretch { align-content: stretch !important; } .align-self-auto { align-self: auto !important; } .align-self-start { align-self: flex-start !important; } .align-self-end { align-self: flex-end !important; } .align-self-center { align-self: center !important; } .align-self-baseline { align-self: baseline !important; } .align-self-stretch { align-self: stretch !important; } .order-first { order: -1 !important; } .order-0 { order: 0 !important; } .order-1 { order: 1 !important; } .order-2 { order: 2 !important; } .order-3 { order: 3 !important; } .order-4 { order: 4 !important; } .order-5 { order: 5 !important; } .order-last { order: 6 !important; } .m-0 { margin: 0 !important; } .m-1 { margin: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .m-3 { margin: 1rem !important; } .m-4 { margin: 1.5rem !important; } .m-5 { margin: 3rem !important; } .m-auto { margin: auto !important; } .mx-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-auto { margin-right: auto !important; margin-left: auto !important; } .my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-0 { margin-top: 0 !important; } .mt-1 { margin-top: 0.25rem !important; } .mt-2 { margin-top: 0.5rem !important; } .mt-3 { margin-top: 1rem !important; } .mt-4 { margin-top: 1.5rem !important; } .mt-5 { margin-top: 3rem !important; } .mt-auto { margin-top: auto !important; } .me-0 { margin-right: 0 !important; } .me-1 { margin-right: 0.25rem !important; } .me-2 { margin-right: 0.5rem !important; } .me-3 { margin-right: 1rem !important; } .me-4 { margin-right: 1.5rem !important; } .me-5 { margin-right: 3rem !important; } .me-auto { margin-right: auto !important; } .mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: 0.25rem !important; } .mb-2 { margin-bottom: 0.5rem !important; } .mb-3 { margin-bottom: 1rem !important; } .mb-4 { margin-bottom: 1.5rem !important; } .mb-5 { margin-bottom: 3rem !important; } .mb-auto { margin-bottom: auto !important; } .ms-0 { margin-left: 0 !important; } .ms-1 { margin-left: 0.25rem !important; } .ms-2 { margin-left: 0.5rem !important; } .ms-3 { margin-left: 1rem !important; } .ms-4 { margin-left: 1.5rem !important; } .ms-5 { margin-left: 3rem !important; } .ms-auto { margin-left: auto !important; } .p-0 { padding: 0 !important; } .p-1 { padding: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .p-3 { padding: 1rem !important; } .p-4 { padding: 1.5rem !important; } .p-5 { padding: 3rem !important; } .px-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-0 { padding-top: 0 !important; } .pt-1 { padding-top: 0.25rem !important; } .pt-2 { padding-top: 0.5rem !important; } .pt-3 { padding-top: 1rem !important; } .pt-4 { padding-top: 1.5rem !important; } .pt-5 { padding-top: 3rem !important; } .pe-0 { padding-right: 0 !important; } .pe-1 { padding-right: 0.25rem !important; } .pe-2 { padding-right: 0.5rem !important; } .pe-3 { padding-right: 1rem !important; } .pe-4 { padding-right: 1.5rem !important; } .pe-5 { padding-right: 3rem !important; } .pb-0 { padding-bottom: 0 !important; } .pb-1 { padding-bottom: 0.25rem !important; } .pb-2 { padding-bottom: 0.5rem !important; } .pb-3 { padding-bottom: 1rem !important; } .pb-4 { padding-bottom: 1.5rem !important; } .pb-5 { padding-bottom: 3rem !important; } .ps-0 { padding-left: 0 !important; } .ps-1 { padding-left: 0.25rem !important; } .ps-2 { padding-left: 0.5rem !important; } .ps-3 { padding-left: 1rem !important; } .ps-4 { padding-left: 1.5rem !important; } .ps-5 { padding-left: 3rem !important; } .fs-1 { font-size: calc(1.375rem + 1.5vw) !important; } .fs-2 { font-size: calc(1.325rem + 0.9vw) !important; } .fs-3 { font-size: calc(1.3rem + 0.6vw) !important; } .fs-4 { font-size: calc(1.275rem + 0.3vw) !important; } .fs-5 { font-size: 1.25rem !important; } .fs-6 { font-size: 1rem !important; } .fst-italic { font-style: italic !important; } .fst-normal { font-style: normal !important; } .fw-light { font-weight: 300 !important; } .fw-lighter { font-weight: lighter !important; } .fw-normal { font-weight: 400 !important; } .fw-bold { font-weight: 700 !important; } .fw-bolder { font-weight: bolder !important; } .text-lowercase { text-transform: lowercase !important; } .text-uppercase { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } .text-start { text-align: left !important; } .text-end { text-align: right !important; } .text-center { text-align: center !important; } .text-primary { color: #0d6efd !important; } .text-secondary { color: #6c757d !important; } .text-success { color: #198754 !important; } .text-info { color: #0dcaf0 !important; } .text-warning { color: #ffc107 !important; } .text-danger { color: #dc3545 !important; } .text-light { color: #f8f9fa !important; } .text-dark { color: #212529 !important; } .text-white { color: #fff !important; } .text-body { color: #212529 !important; } .text-muted { color: #6c757d !important; } .text-black-50 { color: rgba(0, 0, 0, 0.5) !important; } .text-white-50 { color: rgba(255, 255, 255, 0.5) !important; } .text-reset { color: inherit !important; } .lh-1 { line-height: 1 !important; } .lh-sm { line-height: 1.25 !important; } .lh-base { line-height: 1.5 !important; } .lh-lg { line-height: 2 !important; } .bg-primary { background-color: #0d6efd !important; } .bg-secondary { background-color: #6c757d !important; } .bg-success { background-color: #198754 !important; } .bg-info { background-color: #0dcaf0 !important; } .bg-warning { background-color: #ffc107 !important; } .bg-danger { background-color: #dc3545 !important; } .bg-light { background-color: #f8f9fa !important; } .bg-dark { background-color: #212529 !important; } .bg-body { background-color: #fff !important; } .bg-white { background-color: #fff !important; } .bg-transparent { background-color: transparent !important; } .bg-gradient { background-image: var(--bs-gradient) !important; } .text-wrap { white-space: normal !important; } .text-nowrap { white-space: nowrap !important; } .text-decoration-none { text-decoration: none !important; } .text-decoration-underline { text-decoration: underline !important; } .text-decoration-line-through { text-decoration: line-through !important; } /* rtl:begin:remove */ .text-break { word-wrap: break-word !important; word-break: break-word !important; } /* rtl:end:remove */ .font-monospace { font-family: var(--bs-font-monospace) !important; } .user-select-all { -webkit-user-select: all !important; -moz-user-select: all !important; user-select: all !important; } .user-select-auto { -webkit-user-select: auto !important; -moz-user-select: auto !important; user-select: auto !important; } .user-select-none { -webkit-user-select: none !important; -moz-user-select: none !important; user-select: none !important; } .pe-none { pointer-events: none !important; } .pe-auto { pointer-events: auto !important; } .rounded { border-radius: 0.25rem !important; } .rounded-0 { border-radius: 0 !important; } .rounded-1 { border-radius: 0.2rem !important; } .rounded-2 { border-radius: 0.25rem !important; } .rounded-3 { border-radius: 0.3rem !important; } .rounded-circle { border-radius: 50% !important; } .rounded-pill { border-radius: 50rem !important; } .rounded-top { border-top-left-radius: 0.25rem !important; border-top-right-radius: 0.25rem !important; } .rounded-end { border-top-right-radius: 0.25rem !important; border-bottom-right-radius: 0.25rem !important; } .rounded-bottom { border-bottom-right-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-start { border-bottom-left-radius: 0.25rem !important; border-top-left-radius: 0.25rem !important; } .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } @media (min-width: 576px) { .float-sm-start { float: left !important; } .float-sm-end { float: right !important; } .float-sm-none { float: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-grid { display: grid !important; } .d-sm-table { display: table !important; } .d-sm-table-row { display: table-row !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: flex !important; } .d-sm-inline-flex { display: inline-flex !important; } .d-sm-none { display: none !important; } .flex-sm-fill { flex: 1 1 auto !important; } .flex-sm-row { flex-direction: row !important; } .flex-sm-column { flex-direction: column !important; } .flex-sm-row-reverse { flex-direction: row-reverse !important; } .flex-sm-column-reverse { flex-direction: column-reverse !important; } .flex-sm-grow-0 { flex-grow: 0 !important; } .flex-sm-grow-1 { flex-grow: 1 !important; } .flex-sm-shrink-0 { flex-shrink: 0 !important; } .flex-sm-shrink-1 { flex-shrink: 1 !important; } .flex-sm-wrap { flex-wrap: wrap !important; } .flex-sm-nowrap { flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-sm-0 { gap: 0 !important; } .gap-sm-1 { gap: 0.25rem !important; } .gap-sm-2 { gap: 0.5rem !important; } .gap-sm-3 { gap: 1rem !important; } .gap-sm-4 { gap: 1.5rem !important; } .gap-sm-5 { gap: 3rem !important; } .justify-content-sm-start { justify-content: flex-start !important; } .justify-content-sm-end { justify-content: flex-end !important; } .justify-content-sm-center { justify-content: center !important; } .justify-content-sm-between { justify-content: space-between !important; } .justify-content-sm-around { justify-content: space-around !important; } .justify-content-sm-evenly { justify-content: space-evenly !important; } .align-items-sm-start { align-items: flex-start !important; } .align-items-sm-end { align-items: flex-end !important; } .align-items-sm-center { align-items: center !important; } .align-items-sm-baseline { align-items: baseline !important; } .align-items-sm-stretch { align-items: stretch !important; } .align-content-sm-start { align-content: flex-start !important; } .align-content-sm-end { align-content: flex-end !important; } .align-content-sm-center { align-content: center !important; } .align-content-sm-between { align-content: space-between !important; } .align-content-sm-around { align-content: space-around !important; } .align-content-sm-stretch { align-content: stretch !important; } .align-self-sm-auto { align-self: auto !important; } .align-self-sm-start { align-self: flex-start !important; } .align-self-sm-end { align-self: flex-end !important; } .align-self-sm-center { align-self: center !important; } .align-self-sm-baseline { align-self: baseline !important; } .align-self-sm-stretch { align-self: stretch !important; } .order-sm-first { order: -1 !important; } .order-sm-0 { order: 0 !important; } .order-sm-1 { order: 1 !important; } .order-sm-2 { order: 2 !important; } .order-sm-3 { order: 3 !important; } .order-sm-4 { order: 4 !important; } .order-sm-5 { order: 5 !important; } .order-sm-last { order: 6 !important; } .m-sm-0 { margin: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .m-sm-auto { margin: auto !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-sm-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-sm-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-sm-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-sm-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-sm-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-sm-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-sm-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-sm-0 { margin-top: 0 !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mt-sm-3 { margin-top: 1rem !important; } .mt-sm-4 { margin-top: 1.5rem !important; } .mt-sm-5 { margin-top: 3rem !important; } .mt-sm-auto { margin-top: auto !important; } .me-sm-0 { margin-right: 0 !important; } .me-sm-1 { margin-right: 0.25rem !important; } .me-sm-2 { margin-right: 0.5rem !important; } .me-sm-3 { margin-right: 1rem !important; } .me-sm-4 { margin-right: 1.5rem !important; } .me-sm-5 { margin-right: 3rem !important; } .me-sm-auto { margin-right: auto !important; } .mb-sm-0 { margin-bottom: 0 !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .mb-sm-3 { margin-bottom: 1rem !important; } .mb-sm-4 { margin-bottom: 1.5rem !important; } .mb-sm-5 { margin-bottom: 3rem !important; } .mb-sm-auto { margin-bottom: auto !important; } .ms-sm-0 { margin-left: 0 !important; } .ms-sm-1 { margin-left: 0.25rem !important; } .ms-sm-2 { margin-left: 0.5rem !important; } .ms-sm-3 { margin-left: 1rem !important; } .ms-sm-4 { margin-left: 1.5rem !important; } .ms-sm-5 { margin-left: 3rem !important; } .ms-sm-auto { margin-left: auto !important; } .p-sm-0 { padding: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-sm-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-sm-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-sm-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-sm-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-sm-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-sm-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-sm-0 { padding-top: 0 !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pt-sm-3 { padding-top: 1rem !important; } .pt-sm-4 { padding-top: 1.5rem !important; } .pt-sm-5 { padding-top: 3rem !important; } .pe-sm-0 { padding-right: 0 !important; } .pe-sm-1 { padding-right: 0.25rem !important; } .pe-sm-2 { padding-right: 0.5rem !important; } .pe-sm-3 { padding-right: 1rem !important; } .pe-sm-4 { padding-right: 1.5rem !important; } .pe-sm-5 { padding-right: 3rem !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pb-sm-3 { padding-bottom: 1rem !important; } .pb-sm-4 { padding-bottom: 1.5rem !important; } .pb-sm-5 { padding-bottom: 3rem !important; } .ps-sm-0 { padding-left: 0 !important; } .ps-sm-1 { padding-left: 0.25rem !important; } .ps-sm-2 { padding-left: 0.5rem !important; } .ps-sm-3 { padding-left: 1rem !important; } .ps-sm-4 { padding-left: 1.5rem !important; } .ps-sm-5 { padding-left: 3rem !important; } .text-sm-start { text-align: left !important; } .text-sm-end { text-align: right !important; } .text-sm-center { text-align: center !important; } } @media (min-width: 768px) { .float-md-start { float: left !important; } .float-md-end { float: right !important; } .float-md-none { float: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-grid { display: grid !important; } .d-md-table { display: table !important; } .d-md-table-row { display: table-row !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: flex !important; } .d-md-inline-flex { display: inline-flex !important; } .d-md-none { display: none !important; } .flex-md-fill { flex: 1 1 auto !important; } .flex-md-row { flex-direction: row !important; } .flex-md-column { flex-direction: column !important; } .flex-md-row-reverse { flex-direction: row-reverse !important; } .flex-md-column-reverse { flex-direction: column-reverse !important; } .flex-md-grow-0 { flex-grow: 0 !important; } .flex-md-grow-1 { flex-grow: 1 !important; } .flex-md-shrink-0 { flex-shrink: 0 !important; } .flex-md-shrink-1 { flex-shrink: 1 !important; } .flex-md-wrap { flex-wrap: wrap !important; } .flex-md-nowrap { flex-wrap: nowrap !important; } .flex-md-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-md-0 { gap: 0 !important; } .gap-md-1 { gap: 0.25rem !important; } .gap-md-2 { gap: 0.5rem !important; } .gap-md-3 { gap: 1rem !important; } .gap-md-4 { gap: 1.5rem !important; } .gap-md-5 { gap: 3rem !important; } .justify-content-md-start { justify-content: flex-start !important; } .justify-content-md-end { justify-content: flex-end !important; } .justify-content-md-center { justify-content: center !important; } .justify-content-md-between { justify-content: space-between !important; } .justify-content-md-around { justify-content: space-around !important; } .justify-content-md-evenly { justify-content: space-evenly !important; } .align-items-md-start { align-items: flex-start !important; } .align-items-md-end { align-items: flex-end !important; } .align-items-md-center { align-items: center !important; } .align-items-md-baseline { align-items: baseline !important; } .align-items-md-stretch { align-items: stretch !important; } .align-content-md-start { align-content: flex-start !important; } .align-content-md-end { align-content: flex-end !important; } .align-content-md-center { align-content: center !important; } .align-content-md-between { align-content: space-between !important; } .align-content-md-around { align-content: space-around !important; } .align-content-md-stretch { align-content: stretch !important; } .align-self-md-auto { align-self: auto !important; } .align-self-md-start { align-self: flex-start !important; } .align-self-md-end { align-self: flex-end !important; } .align-self-md-center { align-self: center !important; } .align-self-md-baseline { align-self: baseline !important; } .align-self-md-stretch { align-self: stretch !important; } .order-md-first { order: -1 !important; } .order-md-0 { order: 0 !important; } .order-md-1 { order: 1 !important; } .order-md-2 { order: 2 !important; } .order-md-3 { order: 3 !important; } .order-md-4 { order: 4 !important; } .order-md-5 { order: 5 !important; } .order-md-last { order: 6 !important; } .m-md-0 { margin: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .m-md-auto { margin: auto !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-md-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-md-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-md-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-md-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-md-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-md-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-md-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-md-0 { margin-top: 0 !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mt-md-3 { margin-top: 1rem !important; } .mt-md-4 { margin-top: 1.5rem !important; } .mt-md-5 { margin-top: 3rem !important; } .mt-md-auto { margin-top: auto !important; } .me-md-0 { margin-right: 0 !important; } .me-md-1 { margin-right: 0.25rem !important; } .me-md-2 { margin-right: 0.5rem !important; } .me-md-3 { margin-right: 1rem !important; } .me-md-4 { margin-right: 1.5rem !important; } .me-md-5 { margin-right: 3rem !important; } .me-md-auto { margin-right: auto !important; } .mb-md-0 { margin-bottom: 0 !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .mb-md-3 { margin-bottom: 1rem !important; } .mb-md-4 { margin-bottom: 1.5rem !important; } .mb-md-5 { margin-bottom: 3rem !important; } .mb-md-auto { margin-bottom: auto !important; } .ms-md-0 { margin-left: 0 !important; } .ms-md-1 { margin-left: 0.25rem !important; } .ms-md-2 { margin-left: 0.5rem !important; } .ms-md-3 { margin-left: 1rem !important; } .ms-md-4 { margin-left: 1.5rem !important; } .ms-md-5 { margin-left: 3rem !important; } .ms-md-auto { margin-left: auto !important; } .p-md-0 { padding: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-md-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-md-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-md-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-md-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-md-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-md-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-md-0 { padding-top: 0 !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pt-md-3 { padding-top: 1rem !important; } .pt-md-4 { padding-top: 1.5rem !important; } .pt-md-5 { padding-top: 3rem !important; } .pe-md-0 { padding-right: 0 !important; } .pe-md-1 { padding-right: 0.25rem !important; } .pe-md-2 { padding-right: 0.5rem !important; } .pe-md-3 { padding-right: 1rem !important; } .pe-md-4 { padding-right: 1.5rem !important; } .pe-md-5 { padding-right: 3rem !important; } .pb-md-0 { padding-bottom: 0 !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pb-md-3 { padding-bottom: 1rem !important; } .pb-md-4 { padding-bottom: 1.5rem !important; } .pb-md-5 { padding-bottom: 3rem !important; } .ps-md-0 { padding-left: 0 !important; } .ps-md-1 { padding-left: 0.25rem !important; } .ps-md-2 { padding-left: 0.5rem !important; } .ps-md-3 { padding-left: 1rem !important; } .ps-md-4 { padding-left: 1.5rem !important; } .ps-md-5 { padding-left: 3rem !important; } .text-md-start { text-align: left !important; } .text-md-end { text-align: right !important; } .text-md-center { text-align: center !important; } } @media (min-width: 992px) { .float-lg-start { float: left !important; } .float-lg-end { float: right !important; } .float-lg-none { float: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-grid { display: grid !important; } .d-lg-table { display: table !important; } .d-lg-table-row { display: table-row !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: flex !important; } .d-lg-inline-flex { display: inline-flex !important; } .d-lg-none { display: none !important; } .flex-lg-fill { flex: 1 1 auto !important; } .flex-lg-row { flex-direction: row !important; } .flex-lg-column { flex-direction: column !important; } .flex-lg-row-reverse { flex-direction: row-reverse !important; } .flex-lg-column-reverse { flex-direction: column-reverse !important; } .flex-lg-grow-0 { flex-grow: 0 !important; } .flex-lg-grow-1 { flex-grow: 1 !important; } .flex-lg-shrink-0 { flex-shrink: 0 !important; } .flex-lg-shrink-1 { flex-shrink: 1 !important; } .flex-lg-wrap { flex-wrap: wrap !important; } .flex-lg-nowrap { flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-lg-0 { gap: 0 !important; } .gap-lg-1 { gap: 0.25rem !important; } .gap-lg-2 { gap: 0.5rem !important; } .gap-lg-3 { gap: 1rem !important; } .gap-lg-4 { gap: 1.5rem !important; } .gap-lg-5 { gap: 3rem !important; } .justify-content-lg-start { justify-content: flex-start !important; } .justify-content-lg-end { justify-content: flex-end !important; } .justify-content-lg-center { justify-content: center !important; } .justify-content-lg-between { justify-content: space-between !important; } .justify-content-lg-around { justify-content: space-around !important; } .justify-content-lg-evenly { justify-content: space-evenly !important; } .align-items-lg-start { align-items: flex-start !important; } .align-items-lg-end { align-items: flex-end !important; } .align-items-lg-center { align-items: center !important; } .align-items-lg-baseline { align-items: baseline !important; } .align-items-lg-stretch { align-items: stretch !important; } .align-content-lg-start { align-content: flex-start !important; } .align-content-lg-end { align-content: flex-end !important; } .align-content-lg-center { align-content: center !important; } .align-content-lg-between { align-content: space-between !important; } .align-content-lg-around { align-content: space-around !important; } .align-content-lg-stretch { align-content: stretch !important; } .align-self-lg-auto { align-self: auto !important; } .align-self-lg-start { align-self: flex-start !important; } .align-self-lg-end { align-self: flex-end !important; } .align-self-lg-center { align-self: center !important; } .align-self-lg-baseline { align-self: baseline !important; } .align-self-lg-stretch { align-self: stretch !important; } .order-lg-first { order: -1 !important; } .order-lg-0 { order: 0 !important; } .order-lg-1 { order: 1 !important; } .order-lg-2 { order: 2 !important; } .order-lg-3 { order: 3 !important; } .order-lg-4 { order: 4 !important; } .order-lg-5 { order: 5 !important; } .order-lg-last { order: 6 !important; } .m-lg-0 { margin: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .m-lg-auto { margin: auto !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-lg-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-lg-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-lg-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-lg-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-lg-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-lg-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-lg-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-lg-0 { margin-top: 0 !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mt-lg-3 { margin-top: 1rem !important; } .mt-lg-4 { margin-top: 1.5rem !important; } .mt-lg-5 { margin-top: 3rem !important; } .mt-lg-auto { margin-top: auto !important; } .me-lg-0 { margin-right: 0 !important; } .me-lg-1 { margin-right: 0.25rem !important; } .me-lg-2 { margin-right: 0.5rem !important; } .me-lg-3 { margin-right: 1rem !important; } .me-lg-4 { margin-right: 1.5rem !important; } .me-lg-5 { margin-right: 3rem !important; } .me-lg-auto { margin-right: auto !important; } .mb-lg-0 { margin-bottom: 0 !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .mb-lg-3 { margin-bottom: 1rem !important; } .mb-lg-4 { margin-bottom: 1.5rem !important; } .mb-lg-5 { margin-bottom: 3rem !important; } .mb-lg-auto { margin-bottom: auto !important; } .ms-lg-0 { margin-left: 0 !important; } .ms-lg-1 { margin-left: 0.25rem !important; } .ms-lg-2 { margin-left: 0.5rem !important; } .ms-lg-3 { margin-left: 1rem !important; } .ms-lg-4 { margin-left: 1.5rem !important; } .ms-lg-5 { margin-left: 3rem !important; } .ms-lg-auto { margin-left: auto !important; } .p-lg-0 { padding: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-lg-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-lg-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-lg-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-lg-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-lg-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-lg-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-lg-0 { padding-top: 0 !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pt-lg-3 { padding-top: 1rem !important; } .pt-lg-4 { padding-top: 1.5rem !important; } .pt-lg-5 { padding-top: 3rem !important; } .pe-lg-0 { padding-right: 0 !important; } .pe-lg-1 { padding-right: 0.25rem !important; } .pe-lg-2 { padding-right: 0.5rem !important; } .pe-lg-3 { padding-right: 1rem !important; } .pe-lg-4 { padding-right: 1.5rem !important; } .pe-lg-5 { padding-right: 3rem !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pb-lg-3 { padding-bottom: 1rem !important; } .pb-lg-4 { padding-bottom: 1.5rem !important; } .pb-lg-5 { padding-bottom: 3rem !important; } .ps-lg-0 { padding-left: 0 !important; } .ps-lg-1 { padding-left: 0.25rem !important; } .ps-lg-2 { padding-left: 0.5rem !important; } .ps-lg-3 { padding-left: 1rem !important; } .ps-lg-4 { padding-left: 1.5rem !important; } .ps-lg-5 { padding-left: 3rem !important; } .text-lg-start { text-align: left !important; } .text-lg-end { text-align: right !important; } .text-lg-center { text-align: center !important; } } @media (min-width: 1200px) { .float-xl-start { float: left !important; } .float-xl-end { float: right !important; } .float-xl-none { float: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-grid { display: grid !important; } .d-xl-table { display: table !important; } .d-xl-table-row { display: table-row !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: flex !important; } .d-xl-inline-flex { display: inline-flex !important; } .d-xl-none { display: none !important; } .flex-xl-fill { flex: 1 1 auto !important; } .flex-xl-row { flex-direction: row !important; } .flex-xl-column { flex-direction: column !important; } .flex-xl-row-reverse { flex-direction: row-reverse !important; } .flex-xl-column-reverse { flex-direction: column-reverse !important; } .flex-xl-grow-0 { flex-grow: 0 !important; } .flex-xl-grow-1 { flex-grow: 1 !important; } .flex-xl-shrink-0 { flex-shrink: 0 !important; } .flex-xl-shrink-1 { flex-shrink: 1 !important; } .flex-xl-wrap { flex-wrap: wrap !important; } .flex-xl-nowrap { flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-xl-0 { gap: 0 !important; } .gap-xl-1 { gap: 0.25rem !important; } .gap-xl-2 { gap: 0.5rem !important; } .gap-xl-3 { gap: 1rem !important; } .gap-xl-4 { gap: 1.5rem !important; } .gap-xl-5 { gap: 3rem !important; } .justify-content-xl-start { justify-content: flex-start !important; } .justify-content-xl-end { justify-content: flex-end !important; } .justify-content-xl-center { justify-content: center !important; } .justify-content-xl-between { justify-content: space-between !important; } .justify-content-xl-around { justify-content: space-around !important; } .justify-content-xl-evenly { justify-content: space-evenly !important; } .align-items-xl-start { align-items: flex-start !important; } .align-items-xl-end { align-items: flex-end !important; } .align-items-xl-center { align-items: center !important; } .align-items-xl-baseline { align-items: baseline !important; } .align-items-xl-stretch { align-items: stretch !important; } .align-content-xl-start { align-content: flex-start !important; } .align-content-xl-end { align-content: flex-end !important; } .align-content-xl-center { align-content: center !important; } .align-content-xl-between { align-content: space-between !important; } .align-content-xl-around { align-content: space-around !important; } .align-content-xl-stretch { align-content: stretch !important; } .align-self-xl-auto { align-self: auto !important; } .align-self-xl-start { align-self: flex-start !important; } .align-self-xl-end { align-self: flex-end !important; } .align-self-xl-center { align-self: center !important; } .align-self-xl-baseline { align-self: baseline !important; } .align-self-xl-stretch { align-self: stretch !important; } .order-xl-first { order: -1 !important; } .order-xl-0 { order: 0 !important; } .order-xl-1 { order: 1 !important; } .order-xl-2 { order: 2 !important; } .order-xl-3 { order: 3 !important; } .order-xl-4 { order: 4 !important; } .order-xl-5 { order: 5 !important; } .order-xl-last { order: 6 !important; } .m-xl-0 { margin: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .m-xl-auto { margin: auto !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-xl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-xl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-xl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-xl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-xl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-xl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-xl-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-xl-0 { margin-top: 0 !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mt-xl-3 { margin-top: 1rem !important; } .mt-xl-4 { margin-top: 1.5rem !important; } .mt-xl-5 { margin-top: 3rem !important; } .mt-xl-auto { margin-top: auto !important; } .me-xl-0 { margin-right: 0 !important; } .me-xl-1 { margin-right: 0.25rem !important; } .me-xl-2 { margin-right: 0.5rem !important; } .me-xl-3 { margin-right: 1rem !important; } .me-xl-4 { margin-right: 1.5rem !important; } .me-xl-5 { margin-right: 3rem !important; } .me-xl-auto { margin-right: auto !important; } .mb-xl-0 { margin-bottom: 0 !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .mb-xl-3 { margin-bottom: 1rem !important; } .mb-xl-4 { margin-bottom: 1.5rem !important; } .mb-xl-5 { margin-bottom: 3rem !important; } .mb-xl-auto { margin-bottom: auto !important; } .ms-xl-0 { margin-left: 0 !important; } .ms-xl-1 { margin-left: 0.25rem !important; } .ms-xl-2 { margin-left: 0.5rem !important; } .ms-xl-3 { margin-left: 1rem !important; } .ms-xl-4 { margin-left: 1.5rem !important; } .ms-xl-5 { margin-left: 3rem !important; } .ms-xl-auto { margin-left: auto !important; } .p-xl-0 { padding: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-xl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-xl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-xl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-xl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-xl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-xl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-xl-0 { padding-top: 0 !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pt-xl-3 { padding-top: 1rem !important; } .pt-xl-4 { padding-top: 1.5rem !important; } .pt-xl-5 { padding-top: 3rem !important; } .pe-xl-0 { padding-right: 0 !important; } .pe-xl-1 { padding-right: 0.25rem !important; } .pe-xl-2 { padding-right: 0.5rem !important; } .pe-xl-3 { padding-right: 1rem !important; } .pe-xl-4 { padding-right: 1.5rem !important; } .pe-xl-5 { padding-right: 3rem !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pb-xl-3 { padding-bottom: 1rem !important; } .pb-xl-4 { padding-bottom: 1.5rem !important; } .pb-xl-5 { padding-bottom: 3rem !important; } .ps-xl-0 { padding-left: 0 !important; } .ps-xl-1 { padding-left: 0.25rem !important; } .ps-xl-2 { padding-left: 0.5rem !important; } .ps-xl-3 { padding-left: 1rem !important; } .ps-xl-4 { padding-left: 1.5rem !important; } .ps-xl-5 { padding-left: 3rem !important; } .text-xl-start { text-align: left !important; } .text-xl-end { text-align: right !important; } .text-xl-center { text-align: center !important; } } @media (min-width: 1400px) { .float-xxl-start { float: left !important; } .float-xxl-end { float: right !important; } .float-xxl-none { float: none !important; } .d-xxl-inline { display: inline !important; } .d-xxl-inline-block { display: inline-block !important; } .d-xxl-block { display: block !important; } .d-xxl-grid { display: grid !important; } .d-xxl-table { display: table !important; } .d-xxl-table-row { display: table-row !important; } .d-xxl-table-cell { display: table-cell !important; } .d-xxl-flex { display: flex !important; } .d-xxl-inline-flex { display: inline-flex !important; } .d-xxl-none { display: none !important; } .flex-xxl-fill { flex: 1 1 auto !important; } .flex-xxl-row { flex-direction: row !important; } .flex-xxl-column { flex-direction: column !important; } .flex-xxl-row-reverse { flex-direction: row-reverse !important; } .flex-xxl-column-reverse { flex-direction: column-reverse !important; } .flex-xxl-grow-0 { flex-grow: 0 !important; } .flex-xxl-grow-1 { flex-grow: 1 !important; } .flex-xxl-shrink-0 { flex-shrink: 0 !important; } .flex-xxl-shrink-1 { flex-shrink: 1 !important; } .flex-xxl-wrap { flex-wrap: wrap !important; } .flex-xxl-nowrap { flex-wrap: nowrap !important; } .flex-xxl-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-xxl-0 { gap: 0 !important; } .gap-xxl-1 { gap: 0.25rem !important; } .gap-xxl-2 { gap: 0.5rem !important; } .gap-xxl-3 { gap: 1rem !important; } .gap-xxl-4 { gap: 1.5rem !important; } .gap-xxl-5 { gap: 3rem !important; } .justify-content-xxl-start { justify-content: flex-start !important; } .justify-content-xxl-end { justify-content: flex-end !important; } .justify-content-xxl-center { justify-content: center !important; } .justify-content-xxl-between { justify-content: space-between !important; } .justify-content-xxl-around { justify-content: space-around !important; } .justify-content-xxl-evenly { justify-content: space-evenly !important; } .align-items-xxl-start { align-items: flex-start !important; } .align-items-xxl-end { align-items: flex-end !important; } .align-items-xxl-center { align-items: center !important; } .align-items-xxl-baseline { align-items: baseline !important; } .align-items-xxl-stretch { align-items: stretch !important; } .align-content-xxl-start { align-content: flex-start !important; } .align-content-xxl-end { align-content: flex-end !important; } .align-content-xxl-center { align-content: center !important; } .align-content-xxl-between { align-content: space-between !important; } .align-content-xxl-around { align-content: space-around !important; } .align-content-xxl-stretch { align-content: stretch !important; } .align-self-xxl-auto { align-self: auto !important; } .align-self-xxl-start { align-self: flex-start !important; } .align-self-xxl-end { align-self: flex-end !important; } .align-self-xxl-center { align-self: center !important; } .align-self-xxl-baseline { align-self: baseline !important; } .align-self-xxl-stretch { align-self: stretch !important; } .order-xxl-first { order: -1 !important; } .order-xxl-0 { order: 0 !important; } .order-xxl-1 { order: 1 !important; } .order-xxl-2 { order: 2 !important; } .order-xxl-3 { order: 3 !important; } .order-xxl-4 { order: 4 !important; } .order-xxl-5 { order: 5 !important; } .order-xxl-last { order: 6 !important; } .m-xxl-0 { margin: 0 !important; } .m-xxl-1 { margin: 0.25rem !important; } .m-xxl-2 { margin: 0.5rem !important; } .m-xxl-3 { margin: 1rem !important; } .m-xxl-4 { margin: 1.5rem !important; } .m-xxl-5 { margin: 3rem !important; } .m-xxl-auto { margin: auto !important; } .mx-xxl-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-xxl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-xxl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-xxl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-xxl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-xxl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-xxl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xxl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-xxl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-xxl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-xxl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-xxl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-xxl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-xxl-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-xxl-0 { margin-top: 0 !important; } .mt-xxl-1 { margin-top: 0.25rem !important; } .mt-xxl-2 { margin-top: 0.5rem !important; } .mt-xxl-3 { margin-top: 1rem !important; } .mt-xxl-4 { margin-top: 1.5rem !important; } .mt-xxl-5 { margin-top: 3rem !important; } .mt-xxl-auto { margin-top: auto !important; } .me-xxl-0 { margin-right: 0 !important; } .me-xxl-1 { margin-right: 0.25rem !important; } .me-xxl-2 { margin-right: 0.5rem !important; } .me-xxl-3 { margin-right: 1rem !important; } .me-xxl-4 { margin-right: 1.5rem !important; } .me-xxl-5 { margin-right: 3rem !important; } .me-xxl-auto { margin-right: auto !important; } .mb-xxl-0 { margin-bottom: 0 !important; } .mb-xxl-1 { margin-bottom: 0.25rem !important; } .mb-xxl-2 { margin-bottom: 0.5rem !important; } .mb-xxl-3 { margin-bottom: 1rem !important; } .mb-xxl-4 { margin-bottom: 1.5rem !important; } .mb-xxl-5 { margin-bottom: 3rem !important; } .mb-xxl-auto { margin-bottom: auto !important; } .ms-xxl-0 { margin-left: 0 !important; } .ms-xxl-1 { margin-left: 0.25rem !important; } .ms-xxl-2 { margin-left: 0.5rem !important; } .ms-xxl-3 { margin-left: 1rem !important; } .ms-xxl-4 { margin-left: 1.5rem !important; } .ms-xxl-5 { margin-left: 3rem !important; } .ms-xxl-auto { margin-left: auto !important; } .p-xxl-0 { padding: 0 !important; } .p-xxl-1 { padding: 0.25rem !important; } .p-xxl-2 { padding: 0.5rem !important; } .p-xxl-3 { padding: 1rem !important; } .p-xxl-4 { padding: 1.5rem !important; } .p-xxl-5 { padding: 3rem !important; } .px-xxl-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-xxl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-xxl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-xxl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-xxl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-xxl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xxl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-xxl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-xxl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-xxl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-xxl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-xxl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-xxl-0 { padding-top: 0 !important; } .pt-xxl-1 { padding-top: 0.25rem !important; } .pt-xxl-2 { padding-top: 0.5rem !important; } .pt-xxl-3 { padding-top: 1rem !important; } .pt-xxl-4 { padding-top: 1.5rem !important; } .pt-xxl-5 { padding-top: 3rem !important; } .pe-xxl-0 { padding-right: 0 !important; } .pe-xxl-1 { padding-right: 0.25rem !important; } .pe-xxl-2 { padding-right: 0.5rem !important; } .pe-xxl-3 { padding-right: 1rem !important; } .pe-xxl-4 { padding-right: 1.5rem !important; } .pe-xxl-5 { padding-right: 3rem !important; } .pb-xxl-0 { padding-bottom: 0 !important; } .pb-xxl-1 { padding-bottom: 0.25rem !important; } .pb-xxl-2 { padding-bottom: 0.5rem !important; } .pb-xxl-3 { padding-bottom: 1rem !important; } .pb-xxl-4 { padding-bottom: 1.5rem !important; } .pb-xxl-5 { padding-bottom: 3rem !important; } .ps-xxl-0 { padding-left: 0 !important; } .ps-xxl-1 { padding-left: 0.25rem !important; } .ps-xxl-2 { padding-left: 0.5rem !important; } .ps-xxl-3 { padding-left: 1rem !important; } .ps-xxl-4 { padding-left: 1.5rem !important; } .ps-xxl-5 { padding-left: 3rem !important; } .text-xxl-start { text-align: left !important; } .text-xxl-end { text-align: right !important; } .text-xxl-center { text-align: center !important; } } @media (min-width: 1200px) { .fs-1 { font-size: 2.5rem !important; } .fs-2 { font-size: 2rem !important; } .fs-3 { font-size: 1.75rem !important; } .fs-4 { font-size: 1.5rem !important; } } @media print { .d-print-inline { display: inline !important; } .d-print-inline-block { display: inline-block !important; } .d-print-block { display: block !important; } .d-print-grid { display: grid !important; } .d-print-table { display: table !important; } .d-print-table-row { display: table-row !important; } .d-print-table-cell { display: table-cell !important; } .d-print-flex { display: flex !important; } .d-print-inline-flex { display: inline-flex !important; } .d-print-none { display: none !important; } } /*# sourceMappingURL=source-maps/empty.css.map */ clean-css-5.3.3/test/fixtures/issue-1232-min.css 0000664 0000000 0000000 00000000126 14532047255 0021240 0 ustar 00root root 0000000 0000000 @container (min-width:300px){ .test{font-size:15px;font-weight:700;line-height:10px} } clean-css-5.3.3/test/fixtures/issue-1232.css 0000664 0000000 0000000 00000000201 14532047255 0020451 0 ustar 00root root 0000000 0000000 @container (min-width:300px) { .test { font-size: 15px; font-weight: bold; line-height: 10px; } } clean-css-5.3.3/test/fixtures/issue-1239-min.css 0000664 0000000 0000000 00000000041 14532047255 0021243 0 ustar 00root root 0000000 0000000 @media print{ a{display:block} } clean-css-5.3.3/test/fixtures/issue-1239.css 0000664 0000000 0000000 00000000053 14532047255 0020465 0 ustar 00root root 0000000 0000000 @import url("./partials/comment.css")print; clean-css-5.3.3/test/fixtures/issue-1242-min.css 0000664 0000000 0000000 00000000107 14532047255 0021240 0 ustar 00root root 0000000 0000000 @layer custom{ .test{font-size:15px;font-weight:700;line-height:10px} } clean-css-5.3.3/test/fixtures/issue-1242.css 0000664 0000000 0000000 00000000162 14532047255 0020460 0 ustar 00root root 0000000 0000000 @layer custom { .test { font-size: 15px; font-weight: bold; line-height: 10px; } } clean-css-5.3.3/test/fixtures/issue-159-snippet-min.css 0000664 0000000 0000000 00000000423 14532047255 0022647 0 ustar 00root root 0000000 0000000 .zocial.acrobat:before{content:"\00E3";color:#fb0000} .zocial.amazon:before{content:"a"} .zocial.android:before{content:"&"} .zocial.angellist:before{content:"\00D6"} .zocial.aol:before{content:"\""} .zocial.appnet:before{content:"\00E1"} .zocial.appstore:before{content:"A"} clean-css-5.3.3/test/fixtures/issue-159-snippet.css 0000664 0000000 0000000 00000000453 14532047255 0022071 0 ustar 00root root 0000000 0000000 .zocial.acrobat:before {content: "\00E3"; color: #FB0000;} .zocial.amazon:before {content: "a";} .zocial.android:before {content: "&";} .zocial.angellist:before {content: "\00D6";} .zocial.aol:before {content: "\"";} .zocial.appnet:before {content: "\00E1";} .zocial.appstore:before {content: "A";} clean-css-5.3.3/test/fixtures/issue-192-min.css 0000664 0000000 0000000 00000000051 14532047255 0021161 0 ustar 00root root 0000000 0000000 .vrac{overflow:hidden;position:relative} clean-css-5.3.3/test/fixtures/issue-192.css 0000664 0000000 0000000 00000000330 14532047255 0020400 0 ustar 00root root 0000000 0000000 /* @import url(//fonts.googleapis.com/css?family=PT+Sans+Caption:400italic,400,700italic,700); @import url(//fonts.googleapis.com/css?family=Droid+Sans:400,700); */ .vrac { overflow: hidden; position: relative } clean-css-5.3.3/test/fixtures/issue-198-min.css 0000664 0000000 0000000 00000000165 14532047255 0021175 0 ustar 00root root 0000000 0000000 .one{color:red} .three{background-image:url(test/fixtures/partials/extra/down.gif)} .imports-with-comment{color:#999} clean-css-5.3.3/test/fixtures/issue-198.css 0000664 0000000 0000000 00000000213 14532047255 0020406 0 ustar 00root root 0000000 0000000 @import url('./partials/one.css'); @import url('./partials/three.css'); /*some comment, you guys!*/ .imports-with-comment { color: #999; } clean-css-5.3.3/test/fixtures/issue-232-min.css 0000664 0000000 0000000 00000000223 14532047255 0021155 0 ustar 00root root 0000000 0000000 .bar{padding:0} .bug-selector,.bug-selector1{background:url('test/fixtures/images/b-toolbar.gif') #000;background:linear-gradient(#5e6081,#353340)} clean-css-5.3.3/test/fixtures/issue-232.css 0000664 0000000 0000000 00000000322 14532047255 0020374 0 ustar 00root root 0000000 0000000 .bug-selector, .bug-selector1 { background: red; } .bar { padding: 0; } .bug-selector, .bug-selector1 { background: black url('images/b-toolbar.gif'); background: linear-gradient(#5e6081, #353340); } clean-css-5.3.3/test/fixtures/issue-241-min.css 0000664 0000000 0000000 00000000104 14532047255 0021153 0 ustar 00root root 0000000 0000000 .c4:not(.c1,.c2){width:1px} @media (min-width:1px){ .c3{width:1px} } clean-css-5.3.3/test/fixtures/issue-241.css 0000664 0000000 0000000 00000000115 14532047255 0020374 0 ustar 00root root 0000000 0000000 .c4:not(.c1, .c2){width: 1px;} @media (min-width: 1px) { .c3{width: 1px;} } clean-css-5.3.3/test/fixtures/issue-304-2-min.css 0000664 0000000 0000000 00000000361 14532047255 0021317 0 ustar 00root root 0000000 0000000 .one{background:url(test/fixtures/one.png) right 10px top 10px no-repeat,linear-gradient(0deg,#efefef 0,#fff 100%)} .two{background:url(test/fixtures/two.png) right 9px top 15px/9px 7px no-repeat,linear-gradient(-179deg,#fff 0,#f9f9f9 100%)} clean-css-5.3.3/test/fixtures/issue-304-2.css 0000664 0000000 0000000 00000000362 14532047255 0020537 0 ustar 00root root 0000000 0000000 .one { background: url(one.png) no-repeat right 10px top 10px, linear-gradient(0deg, #efefef 0%, #ffffff 100%); } .two { background: url(two.png) no-repeat right 9px top 15px/9px 7px, linear-gradient(-179deg, #FFFFFF 0%, #F9F9F9 100%); } clean-css-5.3.3/test/fixtures/issue-304-min.css 0000664 0000000 0000000 00000000270 14532047255 0021157 0 ustar 00root root 0000000 0000000 .test{background:url(test/fixtures/top.png) left 0 top -12px no-repeat,url(test/fixtures/bottom.png) left 0 bottom -12px no-repeat,url(test/fixtures/middle.png) left 0 top 0 no-repeat} clean-css-5.3.3/test/fixtures/issue-304.css 0000664 0000000 0000000 00000000272 14532047255 0020400 0 ustar 00root root 0000000 0000000 .test { background: url(top.png) no-repeat, url(bottom.png) no-repeat, url(middle.png) no-repeat; background-position: left 0px top -12px, left 0px bottom -12px, left 0px top 0px; } clean-css-5.3.3/test/fixtures/issue-305-min.css 0000664 0000000 0000000 00000000027 14532047255 0021160 0 ustar 00root root 0000000 0000000 div{border-width:thin} clean-css-5.3.3/test/fixtures/issue-305.css 0000664 0000000 0000000 00000000036 14532047255 0020377 0 ustar 00root root 0000000 0000000 div { border-width: thin; } clean-css-5.3.3/test/fixtures/issue-308-min.css 0000664 0000000 0000000 00000000035 14532047255 0021162 0 ustar 00root root 0000000 0000000 p{background-image:url('/*')} clean-css-5.3.3/test/fixtures/issue-308.css 0000664 0000000 0000000 00000000054 14532047255 0020402 0 ustar 00root root 0000000 0000000 p { background-image: url('/*'); } /* */ clean-css-5.3.3/test/fixtures/issue-312-min.css 0000664 0000000 0000000 00000000307 14532047255 0021157 0 ustar 00root root 0000000 0000000 .envelope{background:url(test/fixtures/one.png) top center/35px 4px repeat-x,url(test/fixtures/one.png) bottom center/35px 4px repeat-x,url(test/fixtures/two.png) 110% 10px/101px 61px no-repeat #eee} clean-css-5.3.3/test/fixtures/issue-312.css 0000664 0000000 0000000 00000000404 14532047255 0020374 0 ustar 00root root 0000000 0000000 .envelope { background: url(one.png), url(one.png), url(two.png); background-color: #eee; background-repeat: repeat-x, repeat-x, no-repeat; background-size: 35px 4px, 35px 4px, 101px 61px; background-position: top center, bottom center, 110% 10px; } clean-css-5.3.3/test/fixtures/issue-337-min.css 0000664 0000000 0000000 00000000037 14532047255 0021166 0 ustar 00root root 0000000 0000000 div{background:#fff!important} clean-css-5.3.3/test/fixtures/issue-337.css 0000664 0000000 0000000 00000000122 14532047255 0020400 0 ustar 00root root 0000000 0000000 div { background: #eeeeee !important; background-color: #ffffff !important; } clean-css-5.3.3/test/fixtures/issue-395-min.css 0000664 0000000 0000000 00000000517 14532047255 0021175 0 ustar 00root root 0000000 0000000 div{background:url("data:image/svg+xml,%3Csvg viewBox%3D%270 0 40 40%27 height%3D%2725%27 width%3D%2725%27%0Axmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3Cpath fill%3D%27rgb(91%2C 183%2C 91)%27 d%3D%27M2.379%2C%0A14.729L5.208%2C11.899L12.958%2C19.648L25.877%2C6.733L28.707%2C9.561L12.958%2C25.308Z%27%0A%2F%3E%3C%2Fsvg%3E")} clean-css-5.3.3/test/fixtures/issue-395.css 0000664 0000000 0000000 00000000525 14532047255 0020413 0 ustar 00root root 0000000 0000000 div { background: url("data:image/svg+xml,%3Csvg viewBox%3D%270 0 40 40%27 height%3D%2725%27 width%3D%2725%27%0Axmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3Cpath fill%3D%27rgb(91%2C 183%2C 91)%27 d%3D%27M2.379%2C%0A14.729L5.208%2C11.899L12.958%2C19.648L25.877%2C6.733L28.707%2C9.561L12.958%2C25.308Z%27%0A%2F%3E%3C%2Fsvg%3E") } clean-css-5.3.3/test/fixtures/issue-432-min.css 0000664 0000000 0000000 00000000164 14532047255 0021163 0 ustar 00root root 0000000 0000000 .c,.c-10,.c-11,.c-12,.c-2,.c-3,.c-4,.c-5,.c-6,.c-7,.c-8,.c-9{background-image:url('test/fixtures/images/image.png')} clean-css-5.3.3/test/fixtures/issue-432.css 0000664 0000000 0000000 00000001411 14532047255 0020376 0 ustar 00root root 0000000 0000000 /* Assets with non-stylistic syntax */ .c { background-image:url('images/image.png'); } .c-2 { background-image: url('images/image.png'); } .c-3 { background-image: url('images/image.png'); } .c-4 { background-image: url( 'images/image.png'); } .c-5 { background-image: url( 'images/image.png'); } .c-6 { background-image: url(' images/image.png'); } .c-7 { background-image: url('images/image.png '); } .c-8 { background-image: url('images/image.png' ); } .c-9 { background-image: url('images/image.png' ); } .c-10 { background-image: url('images/image.png') ; } .c-11 { background-image: url('images/image.png') ; } .c-12 { background-image: URL('images/image.png'); } clean-css-5.3.3/test/fixtures/issue-437-min.css 0000664 0000000 0000000 00000001751 14532047255 0021173 0 ustar 00root root 0000000 0000000 .one,.two{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACPklEQVQ4jaWST0jTARTHv+/9fm46XcOxFCxpObE1igiiCKMMCjqZThGLoINBIUR0K4quFSHRxQ4ZFEiWqSuK8GSnLiGUHZwZcxNLysw/8//P/d7rNpzUKnq39w4fvt/3/QL/ObT+cN/nc3vc3kaTzaOwUt01Y8NPsgHMtUvnpvL9Zq6jnUVHoBoRh/36rxU89QerDMYzIblQHxt+2OErLTHczj1EJCqr/Q2JxNffAtrh3eDaWvwBjEvfY9HuYn/wJgycUaH3RMRC2MUpvWuNRq82ANZaAANAXmDjOWYaCMeij4sCoRY1sG9+ei5UG48erBkZPMDTMyE1tdLhD974pYJIINSroo8WZ5N9Lo97GLzqT4kU5iDvlrJsYMX5peTCjzxP/pAtKzvr4vHRDAUCfQO2enNdBV5mXAzHYhMm5+5WtVsVeCDg1hOTY+Oq9NYQ55Uuf8W1nrLtr9KArF+27fVRzzMAVj2cBjCoEuI4trw4PyWC2z2BQFFKlt8RGc0wjNMMae7wlZYQ6V6bV+6AjISCh9ZYsPuYqe7U1JfPxNxGyIlYs9ZCbXywOhwbqsJMcsbpye+Cjba6eHwUhEZbU5H0EzvLyjymOgdIU5cnEp+6ssXoKK2ohcnXv60kd5wdH19M++vcXH7IdJjPsxWpe8u2JjKoBaThcOxjX0YTgXVVJkQsWeqxkqumq9ATJtVqJfKLtdxYPzbSn9GDDAhQkBMIniTwERF9qQovG3rcVnkxm5y61zQ5Ofen5P5pfgKK5A55njIWAwAAAABJRU5ErkJggg==);background-size:120px 240px} .one{background-position:0 -200px} .two{background-position:-40px -200px} clean-css-5.3.3/test/fixtures/issue-437.css 0000664 0000000 0000000 00000003622 14532047255 0020411 0 ustar 00root root 0000000 0000000 .one { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACPklEQVQ4jaWST0jTARTHv+/9fm46XcOxFCxpObE1igiiCKMMCjqZThGLoINBIUR0K4quFSHRxQ4ZFEiWqSuK8GSnLiGUHZwZcxNLysw/8//P/d7rNpzUKnq39w4fvt/3/QL/ObT+cN/nc3vc3kaTzaOwUt01Y8NPsgHMtUvnpvL9Zq6jnUVHoBoRh/36rxU89QerDMYzIblQHxt+2OErLTHczj1EJCqr/Q2JxNffAtrh3eDaWvwBjEvfY9HuYn/wJgycUaH3RMRC2MUpvWuNRq82ANZaAANAXmDjOWYaCMeij4sCoRY1sG9+ei5UG48erBkZPMDTMyE1tdLhD974pYJIINSroo8WZ5N9Lo97GLzqT4kU5iDvlrJsYMX5peTCjzxP/pAtKzvr4vHRDAUCfQO2enNdBV5mXAzHYhMm5+5WtVsVeCDg1hOTY+Oq9NYQ55Uuf8W1nrLtr9KArF+27fVRzzMAVj2cBjCoEuI4trw4PyWC2z2BQFFKlt8RGc0wjNMMae7wlZYQ6V6bV+6AjISCh9ZYsPuYqe7U1JfPxNxGyIlYs9ZCbXywOhwbqsJMcsbpye+Cjba6eHwUhEZbU5H0EzvLyjymOgdIU5cnEp+6ssXoKK2ohcnXv60kd5wdH19M++vcXH7IdJjPsxWpe8u2JjKoBaThcOxjX0YTgXVVJkQsWeqxkqumq9ATJtVqJfKLtdxYPzbSn9GDDAhQkBMIniTwERF9qQovG3rcVnkxm5y61zQ5Ofen5P5pfgKK5A55njIWAwAAAABJRU5ErkJggg==); background-position: 0 -200px; background-size: 120px 240px; } .two { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACPklEQVQ4jaWST0jTARTHv+/9fm46XcOxFCxpObE1igiiCKMMCjqZThGLoINBIUR0K4quFSHRxQ4ZFEiWqSuK8GSnLiGUHZwZcxNLysw/8//P/d7rNpzUKnq39w4fvt/3/QL/ObT+cN/nc3vc3kaTzaOwUt01Y8NPsgHMtUvnpvL9Zq6jnUVHoBoRh/36rxU89QerDMYzIblQHxt+2OErLTHczj1EJCqr/Q2JxNffAtrh3eDaWvwBjEvfY9HuYn/wJgycUaH3RMRC2MUpvWuNRq82ANZaAANAXmDjOWYaCMeij4sCoRY1sG9+ei5UG48erBkZPMDTMyE1tdLhD974pYJIINSroo8WZ5N9Lo97GLzqT4kU5iDvlrJsYMX5peTCjzxP/pAtKzvr4vHRDAUCfQO2enNdBV5mXAzHYhMm5+5WtVsVeCDg1hOTY+Oq9NYQ55Uuf8W1nrLtr9KArF+27fVRzzMAVj2cBjCoEuI4trw4PyWC2z2BQFFKlt8RGc0wjNMMae7wlZYQ6V6bV+6AjISCh9ZYsPuYqe7U1JfPxNxGyIlYs9ZCbXywOhwbqsJMcsbpye+Cjba6eHwUhEZbU5H0EzvLyjymOgdIU5cnEp+6ssXoKK2ohcnXv60kd5wdH19M++vcXH7IdJjPsxWpe8u2JjKoBaThcOxjX0YTgXVVJkQsWeqxkqumq9ATJtVqJfKLtdxYPzbSn9GDDAhQkBMIniTwERF9qQovG3rcVnkxm5y61zQ5Ofen5P5pfgKK5A55njIWAwAAAABJRU5ErkJggg==); background-position: -40px -200px; background-size: 120px 240px; } clean-css-5.3.3/test/fixtures/issue-464-min.css 0000664 0000000 0000000 00000003610 14532047255 0021167 0 ustar 00root root 0000000 0000000 div{background:url('data:image/svg+xml;charset=US-ASCII,%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%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2230px%22%20height%3D%2230px%22%20%20viewBox%3D%22-317%20386%2030%2030%22%20enable-background%3D%22new%20-317%20386%2030%2030%22%20xml%3Aspace%3D%22preserve%22%3E%3Ctitle%3ERectangle%20166%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch%20Beta.%3C%2Fdesc%3E%3Cg%20id%3D%22item-form1%22%20sketch%3Atype%3D%22MSPage%22%3E%20%3Cg%20id%3D%22in-course%22%20transform%3D%22translate(-613.000000%2C%20-1744.000000)%22%20sketch%3Atype%3D%22MSArtboardGroup%22%3E%20%20%3Cg%20id%3D%22Feedback-added-to-Answer%22%20transform%3D%22translate(526.000000%2C%201230.000000)%22%20sketch%3Atype%3D%22MSLayerGroup%22%3E%20%20%20%3Cg%20id%3D%22Answer-2%22%20transform%3D%22translate(0.000000%2C%20297.000000)%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%20%20%20%20%3Cg%20id%3D%22Clicked_x2F_Feedbac%22%20transform%3D%22translate(76.000000%2C%20208.000000)%22%3E%20%20%20%20%20%3Cg%20id%3D%22Text-stuff-copy%22%3E%20%20%20%20%20%20%3Cg%20id%3D%22B-_x7C_-i-_x7C_-_x3D_%22%20transform%3D%22translate(11.000000%2C%200.000000)%22%3E%20%20%20%20%20%20%20%3Cpath%20id%3D%22Rectangle-166%22%20fill%3D%22%23393F44%22%20d%3D%22M-298.5%2C414.5v-9h-4c-1.653%2C0-3%2C1.344-3%2C3c0%2C1.653%2C1.343%2C3%2C3%2C3v3h2v-8h1v8H-298.5%20%20%20%20%20%20%20%20z%22%2F%3E%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fg%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E')} clean-css-5.3.3/test/fixtures/issue-464.css 0000664 0000000 0000000 00000003611 14532047255 0020407 0 ustar 00root root 0000000 0000000 div{background:url('data:image/svg+xml;charset=US-ASCII,%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%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2230px%22%20height%3D%2230px%22%20%20viewBox%3D%22-317%20386%2030%2030%22%20enable-background%3D%22new%20-317%20386%2030%2030%22%20xml%3Aspace%3D%22preserve%22%3E%3Ctitle%3ERectangle%20166%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch%20Beta.%3C%2Fdesc%3E%3Cg%20id%3D%22item-form1%22%20sketch%3Atype%3D%22MSPage%22%3E%20%3Cg%20id%3D%22in-course%22%20transform%3D%22translate(-613.000000%2C%20-1744.000000)%22%20sketch%3Atype%3D%22MSArtboardGroup%22%3E%20%20%3Cg%20id%3D%22Feedback-added-to-Answer%22%20transform%3D%22translate(526.000000%2C%201230.000000)%22%20sketch%3Atype%3D%22MSLayerGroup%22%3E%20%20%20%3Cg%20id%3D%22Answer-2%22%20transform%3D%22translate(0.000000%2C%20297.000000)%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%20%20%20%20%3Cg%20id%3D%22Clicked_x2F_Feedbac%22%20transform%3D%22translate(76.000000%2C%20208.000000)%22%3E%20%20%20%20%20%3Cg%20id%3D%22Text-stuff-copy%22%3E%20%20%20%20%20%20%3Cg%20id%3D%22B-_x7C_-i-_x7C_-_x3D_%22%20transform%3D%22translate(11.000000%2C%200.000000)%22%3E%20%20%20%20%20%20%20%3Cpath%20id%3D%22Rectangle-166%22%20fill%3D%22%23393F44%22%20d%3D%22M-298.5%2C414.5v-9h-4c-1.653%2C0-3%2C1.344-3%2C3c0%2C1.653%2C1.343%2C3%2C3%2C3v3h2v-8h1v8H-298.5%20%20%20%20%20%20%20%20z%22%2F%3E%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fg%3E%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E')} clean-css-5.3.3/test/fixtures/issue-466-min.css 0000664 0000000 0000000 00000000211 14532047255 0021163 0 ustar 00root root 0000000 0000000 div{background:url(test/fixtures/image.png);background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.5)),url(test/fixtures/image.png)} clean-css-5.3.3/test/fixtures/issue-466.css 0000664 0000000 0000000 00000000173 14532047255 0020411 0 ustar 00root root 0000000 0000000 div { background: url(image.png); background-image: linear-gradient(rgba(0,0,0,.1), rgba(0,0,0,.5)), url(image.png); } clean-css-5.3.3/test/fixtures/issue-490-min.css 0000664 0000000 0000000 00000000641 14532047255 0021167 0 ustar 00root root 0000000 0000000 div{background:url(test/fixtures/image.png),-webkit-linear-gradient(160.57deg,#4393b8 0,#346aa9 100%);background:url(test/fixtures/image.png),-moz-linear-gradient(83.68% 67.94% 160.57deg,#4393b8 0,#346aa9 100%);background:url(test/fixtures/image.png),linear-gradient(160.57deg,#4393b8 0,#346aa9 100%);background-repeat:no-repeat;background-position:25% 60%;z-index:1;background-size:100%;height:auto;min-height:820px} clean-css-5.3.3/test/fixtures/issue-490.css 0000664 0000000 0000000 00000000653 14532047255 0020411 0 ustar 00root root 0000000 0000000 div { background: url(image.png), -webkit-linear-gradient(160.57deg, #4393b8 0%, #346aa9 100%); background: url(image.png), -moz-linear-gradient(83.68% 67.94% 160.57deg, #4393b8 0%, #346aa9 100%); background: url(image.png), linear-gradient(160.57deg, #4393b8 0%, #346aa9 100%); background-repeat: no-repeat; background-position: 25% 60%; z-index: 1; background-size: 100%; height: auto; min-height: 820px; } clean-css-5.3.3/test/fixtures/issue-543-min.css 0000664 0000000 0000000 00000000606 14532047255 0021167 0 ustar 00root root 0000000 0000000 @font-face{src:url("test/font/myfont.eot");/*! IE9 */ src:url("test/font/myfont.eot?#iefix") format("embedded-opentype"),url("test/font/myfont.woff") format("woff"),url("test/font/myfont.ttf") format("truetype"),url("test/font/myfont.svg#myfont") format("svg");/*! IE6-IE8 */ /*! chrome, firefox */ /*! chrome, firefox, opera, Safari, Android, iOS 4.2+ */ font-style:normal;font-weight:400} clean-css-5.3.3/test/fixtures/issue-543.css 0000664 0000000 0000000 00000000653 14532047255 0020410 0 ustar 00root root 0000000 0000000 @font-face { src: url("../font/myfont.eot"); /*! IE9 */ src: url("../font/myfont.eot?#iefix") format("embedded-opentype"), /*! IE6-IE8 */ url("../font/myfont.woff") format("woff"), /*! chrome, firefox */ url("../font/myfont.ttf") format("truetype"), /*! chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url("../font/myfont.svg#myfont") format("svg"); /* iOS 4.1- */ font-style: normal; font-weight: normal; } clean-css-5.3.3/test/fixtures/issue-544-min.css 0000664 0000000 0000000 00000000246 14532047255 0021170 0 ustar 00root root 0000000 0000000 .btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%)} clean-css-5.3.3/test/fixtures/issue-544.css 0000664 0000000 0000000 00000000427 14532047255 0020410 0 ustar 00root root 0000000 0000000 .btn-danger { background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); } .btn-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); } clean-css-5.3.3/test/fixtures/issue-789-min.css 0000664 0000000 0000000 00000000127 14532047255 0021201 0 ustar 00root root 0000000 0000000 .windowsizer{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0} clean-css-5.3.3/test/fixtures/issue-789.css 0000664 0000000 0000000 00000000165 14532047255 0020422 0 ustar 00root root 0000000 0000000 .windowsizer { width:100%; height:100%; margin:0; padding:0; position:absolute; top:0; left:0; } clean-css-5.3.3/test/fixtures/issue-828-min.css 0000664 0000000 0000000 00000000175 14532047255 0021176 0 ustar 00root root 0000000 0000000 @media screen and(-webkit-min-device-pixel-ratio:0){ .logo img{-chrome-:only(;image-rendering:-webkit-optimize-contrast;)} } clean-css-5.3.3/test/fixtures/issue-828.css 0000664 0000000 0000000 00000000212 14532047255 0020405 0 ustar 00root root 0000000 0000000 @media screen and(-webkit-min-device-pixel-ratio:0) { .logo img{-chrome-:only(; image-rendering:-webkit-optimize-contrast; );} } clean-css-5.3.3/test/fixtures/line-breaks-in-attributes-min.css 0000664 0000000 0000000 00000000260 14532047255 0024506 0 ustar 00root root 0000000 0000000 .test[title="my very long title"]{background-image:url("test/fixtures/very/long/path")} .test[title=my_very_long_title]{background-image:url("test/fixtures/my/very/long/path")} clean-css-5.3.3/test/fixtures/line-breaks-in-attributes.css 0000664 0000000 0000000 00000000247 14532047255 0023732 0 ustar 00root root 0000000 0000000 .test[title="my very long \ title"]{background-image:url("very/long/\ path")} .test[title="my_very_long_\ title"] { background-image: url("my/very/long/\ path") } clean-css-5.3.3/test/fixtures/partials-absolute/ 0000775 0000000 0000000 00000000000 14532047255 0021664 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/partials-absolute/base.css 0000664 0000000 0000000 00000000063 14532047255 0023307 0 ustar 00root root 0000000 0000000 @import url(./extra/sub.css); .base { margin:0px } clean-css-5.3.3/test/fixtures/partials-absolute/base2.css 0000664 0000000 0000000 00000000033 14532047255 0023366 0 ustar 00root root 0000000 0000000 .base2 { border-width:0px } clean-css-5.3.3/test/fixtures/partials-absolute/extra/ 0000775 0000000 0000000 00000000000 14532047255 0023007 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/partials-absolute/extra/sub.css 0000664 0000000 0000000 00000000117 14532047255 0024311 0 ustar 00root root 0000000 0000000 @import url(/test/fixtures/partials-absolute/base2.css); .sub { padding:0px } clean-css-5.3.3/test/fixtures/partials-relative/ 0000775 0000000 0000000 00000000000 14532047255 0021661 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/partials-relative/base.css 0000664 0000000 0000000 00000000102 14532047255 0023276 0 ustar 00root root 0000000 0000000 a { background:url(../partials/extra/down.gif) 0 0 no-repeat; } clean-css-5.3.3/test/fixtures/partials-relative/extra/ 0000775 0000000 0000000 00000000000 14532047255 0023004 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/partials-relative/extra/included.css 0000664 0000000 0000000 00000000027 14532047255 0025304 0 ustar 00root root 0000000 0000000 @import '../base.css'; clean-css-5.3.3/test/fixtures/partials/ 0000775 0000000 0000000 00000000000 14532047255 0020050 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/partials/comment.css 0000664 0000000 0000000 00000000056 14532047255 0022225 0 ustar 00root root 0000000 0000000 /* comment to be stripped */ a{display:block} clean-css-5.3.3/test/fixtures/partials/extra/ 0000775 0000000 0000000 00000000000 14532047255 0021173 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/partials/extra/down.gif 0000775 0000000 0000000 00000000073 14532047255 0022634 0 ustar 00root root 0000000 0000000 GIF89a € ;Jc !ù , Œ©Ë혰j…9ú ; clean-css-5.3.3/test/fixtures/partials/extra/four.css 0000664 0000000 0000000 00000000061 14532047255 0022655 0 ustar 00root root 0000000 0000000 @import url('../two.css'); .four { color:#00f; } clean-css-5.3.3/test/fixtures/partials/extra/three.css 0000664 0000000 0000000 00000000026 14532047255 0023012 0 ustar 00root root 0000000 0000000 .three { color:#0f0; } clean-css-5.3.3/test/fixtures/partials/five.css 0000664 0000000 0000000 00000000063 14532047255 0021512 0 ustar 00root root 0000000 0000000 .five{background:url(data:image/jpeg;base64,/9j/)} clean-css-5.3.3/test/fixtures/partials/four.css 0000664 0000000 0000000 00000000071 14532047255 0021533 0 ustar 00root root 0000000 0000000 .four {background-image: url(/partials/extra/down.gif);} clean-css-5.3.3/test/fixtures/partials/one.css 0000664 0000000 0000000 00000000025 14532047255 0021340 0 ustar 00root root 0000000 0000000 .one { color:#f00; } clean-css-5.3.3/test/fixtures/partials/remote.css 0000664 0000000 0000000 00000000064 14532047255 0022055 0 ustar 00root root 0000000 0000000 @import url(http://clean-css.github.io/styles.css); clean-css-5.3.3/test/fixtures/partials/three.css 0000664 0000000 0000000 00000000060 14532047255 0021665 0 ustar 00root root 0000000 0000000 .three {background-image: url(extra/down.gif);} clean-css-5.3.3/test/fixtures/partials/two.css 0000664 0000000 0000000 00000000157 14532047255 0021376 0 ustar 00root root 0000000 0000000 @import url('one.css'); @import url('extra/three.css'); @import url('./extra/four.css'); .two { color:#fff; } clean-css-5.3.3/test/fixtures/partials/with spaces in filename.css 0000664 0000000 0000000 00000000031 14532047255 0025116 0 ustar 00root root 0000000 0000000 .block { color:#f00; } clean-css-5.3.3/test/fixtures/partials/with-commented-import.css 0000664 0000000 0000000 00000000106 14532047255 0025013 0 ustar 00root root 0000000 0000000 /* @import */ @font-face{font-family:"Font";src:url("/path/to/font")} clean-css-5.3.3/test/fixtures/partials/with__double_underscore.css 0000664 0000000 0000000 00000000031 14532047255 0025451 0 ustar 00root root 0000000 0000000 .one { color: green; } clean-css-5.3.3/test/fixtures/reset-min.css 0000664 0000000 0000000 00000001502 14532047255 0020644 0 ustar 00root root 0000000 0000000 a,abbr,acronym,address,applet,big,blockquote,body,caption,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,ul,var{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline} :focus{outline:0} body{line-height:1;color:#000;background:#fff} ol,ul{list-style:none} table{border-collapse:separate;border-spacing:0} caption,td,th{text-align:left;font-weight:400} blockquote:after,blockquote:before,q:after,q:before{content:""} blockquote,q{quotes:"" ""} .clear{clear:both;display:block} .clear:after,.container:after{content:".";display:block;height:0;clear:both;visibility:hidden} * html .clear{height:1%} clean-css-5.3.3/test/fixtures/reset.css 0000664 0000000 0000000 00000002262 14532047255 0020067 0 ustar 00root root 0000000 0000000 /*reset*/ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; } /* remember to define focus styles! */ :focus { outline: 0; } body { line-height: 1; color: black; background: white; } ol, ul { list-style: none; } /* tables still need 'cellspacing="0"' in the markup */ table { border-collapse: separate; border-spacing: 0; } caption, th, td { text-align: left; font-weight: normal; } blockquote:before, blockquote:after, q:before, q:after { content: ""; } blockquote, q { quotes: "" ""; } .clear { clear:both; display: inline-block; } .clear:after, .container:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } * html .clear { height: 1%; } .clear { display: block; } clean-css-5.3.3/test/fixtures/source-maps/ 0000775 0000000 0000000 00000000000 14532047255 0020467 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/source-maps/empty.css.map 0000664 0000000 0000000 00000000000 14532047255 0023101 0 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/source-maps/import.css 0000664 0000000 0000000 00000000060 14532047255 0022507 0 ustar 00root root 0000000 0000000 @import url(some.css); @import url(styles.css); clean-css-5.3.3/test/fixtures/source-maps/nested/ 0000775 0000000 0000000 00000000000 14532047255 0021751 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/source-maps/nested/once.css 0000664 0000000 0000000 00000000106 14532047255 0023404 0 ustar 00root root 0000000 0000000 section > div a { color: red; } /*# sourceMappingURL=once.css.map */ clean-css-5.3.3/test/fixtures/source-maps/nested/once.css.map 0000664 0000000 0000000 00000000150 14532047255 0024157 0 ustar 00root root 0000000 0000000 {"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"} clean-css-5.3.3/test/fixtures/source-maps/nested/once.less 0000664 0000000 0000000 00000000053 14532047255 0023563 0 ustar 00root root 0000000 0000000 section { > div a { color:red; } } clean-css-5.3.3/test/fixtures/source-maps/nested/twice.css 0000664 0000000 0000000 00000000104 14532047255 0023571 0 ustar 00root root 0000000 0000000 body > nav a { color: red; } /*# sourceMappingURL=twice.css.map */ clean-css-5.3.3/test/fixtures/source-maps/nested/twice.css.map 0000664 0000000 0000000 00000000152 14532047255 0024350 0 ustar 00root root 0000000 0000000 {"version":3,"sources":["twice.less"],"names":[],"mappings":"AAAA,IACE,MACE;EACE,UAAA","file":"twice.css"} clean-css-5.3.3/test/fixtures/source-maps/nested/twice.less 0000664 0000000 0000000 00000000066 14532047255 0023756 0 ustar 00root root 0000000 0000000 body { > nav { a { color:red; } } } clean-css-5.3.3/test/fixtures/source-maps/no-map-import.css 0000664 0000000 0000000 00000000062 14532047255 0023676 0 ustar 00root root 0000000 0000000 @import url(styles.css); @import url(no-map.css); clean-css-5.3.3/test/fixtures/source-maps/no-map.css 0000664 0000000 0000000 00000000024 14532047255 0022364 0 ustar 00root root 0000000 0000000 div { color: red; } clean-css-5.3.3/test/fixtures/source-maps/relative.css 0000664 0000000 0000000 00000000035 14532047255 0023012 0 ustar 00root root 0000000 0000000 @import url(sub/styles.css); clean-css-5.3.3/test/fixtures/source-maps/some.css 0000664 0000000 0000000 00000000072 14532047255 0022143 0 ustar 00root root 0000000 0000000 div { color: red; } /*# sourceMappingURL=some.css.map */ clean-css-5.3.3/test/fixtures/source-maps/some.css.map 0000664 0000000 0000000 00000000136 14532047255 0022720 0 ustar 00root root 0000000 0000000 {"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"} clean-css-5.3.3/test/fixtures/source-maps/styles.css 0000664 0000000 0000000 00000000101 14532047255 0022514 0 ustar 00root root 0000000 0000000 div > a { color: blue; } /*# sourceMappingURL=styles.css.map */ clean-css-5.3.3/test/fixtures/source-maps/styles.css.map 0000664 0000000 0000000 00000000147 14532047255 0023302 0 ustar 00root root 0000000 0000000 {"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"} clean-css-5.3.3/test/fixtures/source-maps/styles.less 0000664 0000000 0000000 00000000033 14532047255 0022676 0 ustar 00root root 0000000 0000000 div > a { color: blue; } clean-css-5.3.3/test/fixtures/source-maps/sub/ 0000775 0000000 0000000 00000000000 14532047255 0021260 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/source-maps/sub/styles.css 0000664 0000000 0000000 00000000102 14532047255 0023306 0 ustar 00root root 0000000 0000000 div > a { color: blue; } /*# sourceMappingURL=styles.css.map */ clean-css-5.3.3/test/fixtures/source-maps/sub/styles.css.map 0000664 0000000 0000000 00000000147 14532047255 0024073 0 ustar 00root root 0000000 0000000 {"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GACE;EACE,WAAA","file":"styles.css"} clean-css-5.3.3/test/fixtures/utf8-bom/ 0000775 0000000 0000000 00000000000 14532047255 0017672 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/fixtures/utf8-bom/utf8-bom-common.css 0000664 0000000 0000000 00000000143 14532047255 0023331 0 ustar 00root root 0000000 0000000 body { color: #f00; } p, ul, li { margin: 0; padding: 0; } /* UTF8测试文件1 */ clean-css-5.3.3/test/fixtures/utf8-bom/utf8-bom.css 0000664 0000000 0000000 00000000172 14532047255 0022045 0 ustar 00root root 0000000 0000000 @import url('utf8-bom-common.css'); h1 { font-size: 16px; } p{ font-size:14px; } /* UTF8 BOM 测试文件 */ clean-css-5.3.3/test/integration-test.js 0000664 0000000 0000000 00000332433 14532047255 0020226 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var path = require('path'); var optimizerContext = require('./test-helper').optimizerContext; var lineBreak = require('os').EOL; function generateComments(count) { var output = []; var i; for (i = 0; i < count; i++) { output.push('/* */'); } return output.join(''); } vows.describe('integration tests') .addBatch( optimizerContext('identity', { 'preserve minified content': [ 'a{color:#f10}', 'a{color:#f10}' ] }) ) .addBatch( optimizerContext('semicolons', { 'multiple semicolons': [ 'a{color:#fff;;;width:0; ;}', 'a{color:#fff;width:0}' ], 'trailing semicolon': [ 'a{color:#fff;}', 'a{color:#fff}' ], 'trailing semicolon and space': [ 'a{color:#fff ; }', 'a{color:#fff}' ], 'comma and space': [ 'a{color:rgba(0, 0, 5, .5)}', 'a{color:rgba(0,0,5,.5)}' ] }) ) .addBatch( optimizerContext('whitespace', { 'one argument': [ 'div a { color:#fff }', 'div a{color:#fff}' ], 'tabs': [ 'div\t\ta{display:block}\tp{color:red}', 'div a{display:block}p{color:red}' ], 'line breaks #1': [ 'div \na\r\n { width:500px }', 'div a{width:500px}' ], 'line breaks #2': [ 'div \na\r\n, p { width:500px }', 'div a,p{width:500px}' ], 'line breaks with whitespace lines': [ 'div \n \t\n \na\r\n, p { width:500px }', 'div a,p{width:500px}' ], 'multiple arguments': [ 'a{color:#fff ; font-weight: bolder }', 'a{color:#fff;font-weight:bolder}' ], 'space delimited arguments': [ 'a {border: 1px solid #f10; margin: 0 auto }', 'a{border:1px solid #f10;margin:0 auto}' ], 'at beginning': [ ' a {color:#fff}', 'a{color:#fff}' ], 'at end': [ 'a{color:#fff } ', 'a{color:#fff}' ], 'not inside calc method #1': [ 'a{width:-moz-calc(100% - 1em);width:calc(100% - 1em)}', 'a{width:-moz-calc(100% - 1em);width:calc(100% - 1em)}' ], 'not inside calc method #2': [ 'div{margin:-moz-calc(50% + 15px) -moz-calc(50% + 15px);margin:calc(50% + .5rem) calc(50% + .5rem)}', 'div{margin:-moz-calc(50% + 15px);margin:calc(50% + .5rem)}' ], 'not inside calc method with more parentheses': [ 'div{height:-moz-calc((10% + 13px)/ 2 + 10em)}', 'div{height:-moz-calc((10% + 13px)/ 2 + 10em)}' ], 'not inside calc method with multiplication': [ 'div{height:-moz-calc(3 * 2em + 10px)}', 'div{height:-moz-calc(3 * 2em + 10px)}' ], 'not inside calc method with brackets': [ 'body{margin-left:calc(50vw + (1024px/2))}', 'body{margin-left:calc(50vw + (1024px/2))}' ], 'not inside calc method with brackets #2': [ 'body{width:calc((978px * 2/3) - 30px)}', 'body{width:calc((978px * 2/3) - 30px)}' ], 'not inside calc method with brackets #3': [ 'body{margin:calc(99.99% * 1/3 - (30px - 30px * 1/3) + 30px)}', 'body{margin:calc(99.99% * 1/3 - (30px - 30px * 1/3) + 30px)}' ], 'with space between braces': [ 'body{width:calc( ( 100% - 13px) / 3 )}', 'body{width:calc((100% - 13px)/ 3)}' ], 'before colon': [ '#test{padding-left :0}', '#test{padding-left:0}' ], 'before colon but not selectors #1': [ 'div :before{display:block}', 'div :before{display:block}' ], 'before colon but not selectors #2': [ 'div ::-webkit-search-decoration{display:block}', 'div ::-webkit-search-decoration{display:block}' ], 'before colon but not selectors #3': [ 'div :after{color:red}', 'div :after{color:red}' ], 'windows breaks': [ 'div>a{color:red\r\n }', 'div>a{color:red}' ], 'whitespace in media queries': [ '@media ( min-width: 980px ) {\n#page .span4 {\nwidth: 250px;\n}\n\n.row {\nmargin-left: -10px;\n}\n}', '@media (min-width:980px){#page .span4{width:250px}.row{margin-left:-10px}}' ], 'line breaks in media queries': [ '@media\nonly screen and (max-width: 1319px) and (min--moz-device-pixel-ratio: 1.5),\nonly screen and (max-width: 1319px) and (-moz-min-device-pixel-ratio: 1.5)\n{ a { color:#000 } }', '@media only screen and (max-width:1319px) and (min--moz-device-pixel-ratio:1.5),only screen and (max-width:1319px) and (-moz-min-device-pixel-ratio:1.5){a{color:#000}}' ], 'in content preceded by #content': [ '#content{display:block}#foo{content:"\0BB "}', '#content{display:block}#foo{content:"\0BB "}' ], 'in content preceded by .content': [ '.content{display:block}#foo{content:"\0BB "}', '.content{display:block}#foo{content:"\0BB "}' ], 'in content preceded by line break': [ '.content{display:block}#foo{' + lineBreak + 'content:"x"}', '.content{display:block}#foo{content:"x"}' ], 'after rgb': [ 'a{text-shadow:rgb(255,0,1) 1px 1px}', 'a{text-shadow:#ff0001 1px 1px}' ], 'after rgba #1': [ 'a{text-shadow:rgba(255,0,0,.1) 0 1px}', 'a{text-shadow:rgba(255,0,0,.1) 0 1px}' ], 'after rgba #2': [ 'a{text-shadow:rgba(255,0,0,1) 0 1px}', 'a{text-shadow:red 0 1px}' ], 'after hsl': [ 'a{text-shadow:hsl(240,100%,40%) -1px 1px}', 'a{text-shadow:#00c -1px 1px}' ], 'after hsla': [ 'a{text-shadow:hsla(240,100%,40%,.5) -1px 1px}', 'a{text-shadow:hsla(240,100%,40%,.5) -1px 1px}' ], 'inside background': [ 'a{background:calc(100% - 2px) 10px no-repeat}', 'a{background:calc(100% - 2px) 10px no-repeat}' ], 'inside background with fraction unit': [ 'a{background:calc(100% - 2px) .5em no-repeat}', 'a{background:calc(100% - 2px) .5em no-repeat}' ], 'inside background with urls': [ 'a{background:url(image.png) no-repeat}', 'a{background:url(image.png) no-repeat}' ], 'inside background with rgba': [ 'a{background:calc(100% - 10px) no-repeat}', 'a{background:calc(100% - 10px) no-repeat}' ], 'inside margin': [ 'a{margin:calc(100% - 2px) calc(100% - 5px)}', 'a{margin:calc(100% - 2px) calc(100% - 5px)}' ], 'inside transform': [ 'a{transform:translateX(10px) translateY(10px)}', 'a{transform:translateX(10px) translateY(10px)}' ], 'after :not #1': [ 'li:not(.foo).bar{color:red}', 'li:not(.foo).bar{color:red}' ], 'after :not #2': [ 'li:not(.foo)[data-type=none]{color:red}', 'li:not(.foo)[data-type=none]{color:red}' ], 'after :not #3': [ 'li:not(.foo)#id{color:red}', 'li:not(.foo)#id{color:red}' ] }, { level: 2 }) ) .addBatch( optimizerContext('whitespace with spaceAfterClosingBrace', { 'after rgb': [ 'a{text-shadow:rgb(255,0,1) 1px 1px}', 'a{text-shadow:#ff0001 1px 1px}' ], 'after rgba': [ 'a{text-shadow:rgba(255,0,0,.1) 0 1px}', 'a{text-shadow:rgba(255,0,0,.1) 0 1px}' ], 'after hsl': [ 'a{text-shadow:hsl(240,100%,40%) -1px 1px}', 'a{text-shadow:#00c -1px 1px}' ], 'after hsla': [ 'a{text-shadow:hsla(240,100%,40%,.5) -1px 1px}', 'a{text-shadow:hsla(240,100%,40%,.5) -1px 1px}' ], 'inside background': [ 'a{background:calc(100% - 2px) 10px no-repeat}', 'a{background:calc(100% - 2px)10px no-repeat}' ], 'inside background with fraction unit': [ 'a{background:calc(100% - 2px) .5em no-repeat}', 'a{background:calc(100% - 2px).5em no-repeat}' ], 'inside background with urls': [ 'a{background:url(image.png) no-repeat}', 'a{background:url(image.png)no-repeat}' ], 'inside background with rgba': [ 'a{background:calc(100% - 10px) no-repeat}', 'a{background:calc(100% - 10px)no-repeat}' ], 'inside margin': [ 'a{margin:calc(100% - 2px) calc(100% - 5px)}', 'a{margin:calc(100% - 2px) calc(100% - 5px)}' ], 'inside transform': [ 'a{transform:translateX(10px) translateY(10px)}', 'a{transform:translateX(10px)translateY(10px)}' ], 'inside @media': [ '@media only screen and (max-width:1319px) and (min--moz-device-pixel-ratio:1.5){a{color:red}}', '@media only screen and (max-width:1319px)and (min--moz-device-pixel-ratio:1.5){a{color:red}}' ] }, { compatibility: { properties: { spaceAfterClosingBrace: false } } }) ) .addBatch( optimizerContext('line breaks', { 'line breaks #1': [ 'div\na\r\n{width:500px}', 'div a{width:500px}' ], 'line breaks #2': [ 'div\na\r\n,p{width:500px}', 'div a,p{width:500px}' ], 'multiple line breaks #2': [ 'div \r\n\r\na\r\n,p{width:500px}', 'div a,p{width:500px}' ], 'line breaks with whitespace lines': [ 'div \n \t\n \na\r\n, p { width:500px }', 'div a,p{width:500px}' ], 'line breaks with multiple selectors': [ 'p{width:500px}a{color:red}span{font-style:italic}', 'p{width:500px}' + lineBreak + 'a{color:red}' + lineBreak + 'span{font-style:italic}' ], 'charset not at beginning': [ 'a{ color: #f10; }\n@charset \'utf-8\';\nb { font-weight: bolder}', '@charset \'utf-8\';' + lineBreak + 'a{color:#f10}' + lineBreak + 'b{font-weight:bolder}' ], 'charset multiple charsets': [ '@charset \'utf-8\';\ndiv :before { display: block }\n@charset \'utf-8\';\na { color: #f10 }', '@charset \'utf-8\';' + lineBreak + 'div :before{display:block}' + lineBreak + 'a{color:#f10}' ], 'charset with double line break': [ '@charset \'utf-8\';' + lineBreak + lineBreak + 'a{display:block}', '@charset \'utf-8\';' + lineBreak + 'a{display:block}' ], 'uppercase charset': [ '@CHARSET \'utf-8\';h1{color:red}', 'h1{color:red}' ], 'mixed case charset': [ '@chArSET \'utf-8\';h1{color:red}', 'h1{color:red}' ] }, { format: 'keep-breaks' }) ) .addBatch( optimizerContext('line breaks and important comments', { 'charset to beginning with comment removal': [ '/*! some comment */' + lineBreak + lineBreak + '@charset \'utf-8\';' + lineBreak + lineBreak + 'a{display:block}', '@charset \'utf-8\';' + lineBreak + 'a{display:block}' ] }, { format: 'keep-breaks', level: { 1: { specialComments: 0 } } }) ) .addBatch( optimizerContext('CRLF line breaks', { 'uses specified one': [ '.block{color:red;display:block}', '.block{color:red;\r\ndisplay:block\r\n}' ] }, { format: { breaks: { afterProperty: true }, breakWith: 'crlf' } }) ) .addBatch( optimizerContext('CRLF line with format as string', { 'uses specified one': [ '.block{color:red;display:block}', '.block{color:red;\r\ndisplay:block\r\n}' ] }, { format: 'breaks:afterProperty=on;breakWith:crlf' }) ) .addBatch( optimizerContext('LF line breaks', { 'uses specified one': [ '.block{color:red;display:block}', '.block{color:red;\ndisplay:block\n}' ] }, { format: { breaks: { afterProperty: true }, breakWith: 'lf' } }) ) .addBatch( optimizerContext('selectors', { 'not expand + in selectors mixed with calc methods': [ 'div{width:calc(50% + 3em)}div + div{width:100%}div:hover{width:calc(50% + 4em)}* > div {border:1px solid #f0f}', 'div{width:calc(50% + 3em)}div+div{width:100%}div:hover{width:calc(50% + 4em)}*>div{border:1px solid #f0f}' ], 'process selectors ending with -0 correctly': [ '.selector-0,a{display:block}', '.selector-0,a{display:block}' ], 'process selectors ending with -1 correctly': [ '.selector-1,a{display:block}', '.selector-1,a{display:block}' ] }) ) .addBatch( optimizerContext('universal selector in ie8 compatibility mode', { '+html': [ '*+html .foo{display:inline}', '' ], '+html:first-child': [ '*:first-child+html .foo{display:inline}', '' ], 'complex': [ '*:first-child+html .foo,.bar{display:inline}', '.bar{display:inline}' ] }, { compatibility: 'ie8' }) ) .addBatch( optimizerContext('universal selector in ie7 compatibility mode', { '+html': [ '*+html .foo{display:inline}', '*+html .foo{display:inline}' ], ':first-child+html': [ '*:first-child+html .foo{display:inline}', '*:first-child+html .foo{display:inline}' ], 'complex': [ '*:first-child+html .foo,.bar{display:inline}', '*:first-child+html .foo,.bar{display:inline}' ] }, { compatibility: 'ie7' }) ) .addBatch( optimizerContext('comments', { 'single line': [ 'a{color:#fff}/* some comment*/p{height:10px/* other comment */}', 'a{color:#fff}p{height:10px}' ], 'multiline': [ '/* \r\n multiline \n comment */a{color:rgba(0,0,0,0.8)}', 'a{color:rgba(0,0,0,.8)}' ], 'comment chars in comments': [ '/* \r\n comment chars * inside / comments */a{color:#fff}', 'a{color:#fff}' ], 'comment inside block': [ 'a{/* \r\n some comments */color:#fff}', 'a{color:#fff}' ], 'special comments': [ '/*! special comment */a{color:#f10} /* normal comment */', '/*! special comment */a{color:#f10}' ], 'should keep exact structure': [ '/*! \n a > span { } with some content */', '/*! \n a > span { } with some content */' ], 'should remove comments with forward slashes inside': [ '/*////*/a{color:red}', 'a{color:red}' ], 'should properly handle line breaks and ** characters inside comments': [ '/**====**\\\n/**2nd comment line/**===**/a{color:red}', 'a{color:red}' ], 'selector between comments': [ '/*comment*/*/*comment*/{color:red}', '*{color:red}' ], 'inside url': [ 'p{background-image:url(\'/*\')}/* */', 'p{background-image:url(\'/*\')}' ], 'inside url twice': [ 'p{background-image:url(\'/* */\" /*\')}/* */', 'p{background-image:url(\'/* */\" /*\')}' ], 'inside url with more quotation': [ 'p{background-image:url(\'/*\');content:""/* */}', 'p{background-image:url(\'/*\');content:""}' ], 'with quote marks': [ '/*"*//* */', '' ], 'important after value': [ 'div{color:red;/*!comment*/}', 'div{color:red/*!comment*/}' ], 'important between values': [ 'div{color:red;/*!comment*/display:block}', 'div{color:red;/*!comment*/display:block}' ], 'important between and after values': [ 'div{color:red;/*!comment1*/display:block;/*!comment2*/}', 'div{color:red;/*!comment1*/display:block/*!comment2*/}' ], 'two important after value': [ 'div{color:red;/*!1*//*!2*/}', 'div{color:red/*!1*//*!2*/}' ], 'two comments, general selector right after first, and quotes': [ '/*! comment */*{box-sizing:border-box}div:before{content:" "}/*! @comment */div{display:inline-block}', '/*! comment */*{box-sizing:border-box}div:before{content:" "}/*! @comment */div{display:inline-block}' ], 'clean-css ignore comments on top level': [ '/* clean-css ignore:start */\n .block { color:transparent } \n/* clean-css ignore:end */', '\n .block { color:transparent } \n' ], 'clean-css ignore comments on nested block level': [ '@media print { /* clean-css ignore:start */\n .block { color:transparent } \n/* clean-css ignore:end */ }', '@media print{\n .block { color:transparent } \n}' ], 'clean-css ignore comments on rule level': [ '.block { /* clean-css ignore:start */ *!color:transparent /* clean-css ignore:end */ }', '.block{ *!color:transparent }' ], 'clean-css ignore comments with nested block': [ '/* clean-css ignore:start */ @media print { a { *!color:transparent } } /* clean-css ignore:end */', ' @media print { a { *!color:transparent } } ' ] }) ) .addBatch( optimizerContext('escaping', { 'escaped @ symbol in class name': [ '.pad--all0\\@sm{padding:0}', '.pad--all0\\@sm{padding:0}' ], 'escaped @ symbol in id': [ '#id\\@sm{padding:0}', '#id\\@sm{padding:0}' ], 'escaped slash': [ 'a{content:"\\\\"}', 'a{content:"\\\\"}' ], 'escaped quote': [ 'a{content:"\\\""}', 'a{content:"\\\""}' ], 'escaped quote in selector name': [ '.this-class\\\'s-got-an-apostrophe{color:red}a{color:#f00}', '.this-class\\\'s-got-an-apostrophe,a{color:red}' ], 'escaped quotes in selector name': [ '.this-class\\\"s-got-an-apostrophes\\\'{color:red}a{color:#f00}', '.this-class\\\"s-got-an-apostrophes\\\',a{color:red}' ], 'escaped tab': [ 'a{content:"\\\t"}', 'a{content:"\\\t"}' ] }, { level: 2 }) ) .addBatch( optimizerContext('important comments - one', { 'strip all but first': [ '/*! important comment */a{color:red}/* some comment *//*! important comment */', '/*! important comment */a{color:red}' ] }, { level: { 1: { specialComments: 1 } } }) ) .addBatch( optimizerContext('important comments - none', { 'strip all': [ '/*! important comment */a{color:red}/* some comment *//*! important comment */', 'a{color:red}' ], 'move charset before': [ '/*! some comment */' + lineBreak + lineBreak + '@charset \'utf-8\';' + lineBreak + lineBreak + 'a{display:block}', '@charset \'utf-8\';a{display:block}' ] }, { level: { 1: { specialComments: 0 } } }) ) .addBatch( optimizerContext('important comments - specialComments when a string', { 'strip all': [ '/*! important comment */a{color:red}/* some comment *//*! important comment */', 'a{color:red}' ] }, { level: { 1: { specialComments: '0' } } }) ) .addBatch( optimizerContext('expressions', { 'empty': [ 'a{color:expression()}', 'a{color:expression()}' ], 'method call': [ 'a{color:expression(this.parentNode.currentStyle.color)}', 'a{color:expression(this.parentNode.currentStyle.color)}' ], 'multiple call': [ 'a{color:expression(x = 0 , this.parentNode.currentStyle.color)}', 'a{color:expression(x = 0 , this.parentNode.currentStyle.color)}' ], 'mixed content': [ 'a{zoom:expression(this.runtimeStyle["zoom"] = "1", this.innerHTML = "")}', 'a{zoom:expression(this.runtimeStyle["zoom"] = "1", this.innerHTML = "")}' ], 'in comment': [ '/*! expression(this.runtimeStyle["zoom"]) */', '/*! expression(this.runtimeStyle["zoom"]) */' ], 'complex': [ 'a{width:expression((this.parentNode.innerWidth + this.parentNode.innerHeight) / 2 )}', 'a{width:expression((this.parentNode.innerWidth + this.parentNode.innerHeight) / 2 )}' ], 'with parentheses': [ 'a{width:expression(this.parentNode.innerText == ")" ? "5px" : "10px" )}', 'a{width:expression(this.parentNode.innerText == ")" ? "5px" : "10px" )}' ], 'open ended (broken)': [ 'a{width:expression(this.parentNode.innerText == }', 'a{width:expression(this.parentNode.innerText ==}' ], 'function call & level 2': [ 'a{zoom:expression(function (el){el.style.zoom="1"}(this))}', 'a{zoom:expression(function (el){el.style.zoom="1"}(this))}' ] }) ) .addBatch( optimizerContext('text content', { 'normal #1': [ 'a{content:"."}', 'a{content:"."}' ], 'normal #2': [ 'a:before{content : "test\'s test"; }', 'a:before{content:"test\'s test"}' ], 'open quote': [ 'a{content : open-quote;opacity:1}', 'a{content:open-quote;opacity:1}' ], 'close quote': [ 'a{content: close-quote;clear:left}', 'a{content:close-quote;clear:left}' ], 'special characters': [ 'a{content : " a > div { } "}', 'a{content:" a > div { } "}' ], 'with JSON': [ 'body::before{content:\'{ "current" : "small", "all" : ["small"], "position" : 0 }\'}', 'body::before{content:\'{ "current" : "small", "all" : ["small"], "position" : 0 }\'}' ] }) ) .addBatch( optimizerContext('zero values', { 'with units': [ 'a{margin:0px 0pt 0em 0%;padding: 0in 0cm 0mm 0pc;border-top-width:0ex}', 'a{margin:0;padding:0;border-top-width:0}' ], 'multiple into one': [ 'a{margin:0 0 0 0;padding:0 0 0 0;border-width:0 0 0 0}', 'a{margin:0;padding:0;border-width:0}' ], 'background\'s none to zero': [ 'a{background:none}', 'a{background:0 0}' ], 'border\'s none to none': [ 'a{border:none}p{border-top:none}', 'a{border:none}p{border-top:none}' ], 'background:transparent to zero': [ 'a{background:transparent}p{background:transparent url(logo.png)}', 'a{background:0 0}p{background:url(logo.png)}' ], 'outline:none to outline:0': [ 'a{outline:none}', 'a{outline:0}' ], 'display:none not changed': [ 'a{display:none}', 'a{display:none}' ], 'mixed zeros not changed': [ 'div{margin:0 0 1px 2px}', 'div{margin:0 0 1px 2px}' ], 'mixed zeros not changed #2': [ 'div{padding:0 1px 0 3px}', 'div{padding:0 1px 0 3px}' ], 'mixed zeros not changed #3': [ 'div{padding:10px 0 0 1px}', 'div{padding:10px 0 0 1px}' ], 'multiple zeros with fractions #1': [ 'div{padding:0 0 0 0.5em}', 'div{padding:0 0 0 .5em}' ], 'multiple zeros with fractions #2': [ 'div{padding:0 0 0 .5em}', 'div{padding:0 0 0 .5em}' ], 'rect zeros #1': [ 'div{clip:rect(0 0 0 0)}', 'div{clip:rect(0 0 0 0)}' ], 'rect zeros #2': [ 'div{clip:rect(0px 0px 0px 0px)}', 'div{clip:rect(0 0 0 0)}' ], 'rect zeros #3': [ 'div{clip:rect( 0px 0px 0px 0px )}', 'div{clip:rect(0 0 0 0)}' ], 'rect zeros #4': [ 'div{clip:rect(0px, 0px, 0px, 0px)}', 'div{clip:rect(0,0,0,0)}' ], 'rect zeros #5': [ 'div{clip:rect(0.5% 0px 0px 0px)}', 'div{clip:rect(.5% 0 0 0)}' ], 'rect zeros #6': [ 'div{clip:rect(0px 0px 0px 10px)}', 'div{clip:rect(0 0 0 10px)}' ], 'box shadow zeros with four zeros': [ 'a{box-shadow:0 0 0 0}', 'a{box-shadow:0 0}' ], 'box shadow with two zeros': [ 'a{box-shadow:0 0}', 'a{box-shadow:0 0}' ], 'box shadow with three zeros and a fraction': [ 'a{box-shadow:0 0 0 0.15em #ebebeb}', 'a{box-shadow:0 0 0 .15em #ebebeb}' ], 'box shadow with three zeros and a value': [ 'a{box-shadow:0 0 0 15px #ebebeb}', 'a{box-shadow:0 0 0 15px #ebebeb}' ], 'prefixed box shadow zeros': [ 'a{-webkit-box-shadow:0 0 0 0; -moz-box-shadow:0 0 0 0}', 'a{-webkit-box-shadow:0 0;-moz-box-shadow:0 0}' ], 'zero as .0 #1': [ 'a{color:rgba(0,0,.0,.1)}', 'a{color:rgba(0,0,0,.1)}' ], 'zero as .0 #2': [ 'body{margin:.0}', 'body{margin:0}' ], 'zero as .0 #3': [ 'body{margin:.0em}', 'body{margin:0}' ], 'zero as .0 #4': [ 'body{margin:.0 1em .0 .0}', 'body{margin:0 1em 0 0}' ], 'missing #1': [ 'body{margin:2.em}', 'body{margin:2.em}' ], 'missing #2': [ 'p{opacity:1.}', 'p{opacity:1.}' ], 'missing #3': [ 'p{opacity:11.px}', 'p{opacity:11.px}' ], 'minus zero as value to zero': [ 'body{margin:-0}', 'body{margin:0}' ], 'minus zero in function to zero': [ 'body{color:rgba(-0,-0,-0,-0)}', 'body{color:transparent}' ], 'minus zero px to zero': [ 'body{margin:-0px}', 'body{margin:0}' ], 'zero em to zero': [ 'body{margin:0.0em}', 'body{margin:0}' ] }, { level: 2 }) ) .addBatch( optimizerContext('zero values in ie8 compatibility mode', { 'rems': [ 'div{width:0rem;height:0rem}', 'div{width:0rem;height:0rem}' ] }, { compatibility: 'ie8' }) ) .addBatch( optimizerContext('zero values in any other compatibility mode', { 'rems': [ 'div{width:0rem;height:0rem}', 'div{width:0;height:0}' ] }, { compatibility: '*' }) ) .addBatch( optimizerContext('shorthands', { 'padding - same 4 values': [ 'div{padding:1px 1px 1px 1px}', 'div{padding:1px}' ], 'margin - same 4 values': [ 'div{margin:1% 1% 1% 1%}', 'div{margin:1%}' ], 'border-width - same 4 values': [ 'div{border-width:1em 1em 1em 1em}', 'div{border-width:1em}' ], 'border-style - same 4 values': [ 'div{border-style:solid solid solid solid}', 'div{border-style:solid}' ], 'border-color - same 4 values': [ 'div{border-color:red red red red}', 'div{border-color:red}' ], 'border-color - same 4 values as hex': [ 'div{border-color:#f0f #f0f #f0f #f0f}', 'div{border-color:#f0f}' ], 'border-color - same 4 values as rgb': [ 'div{border-color:rgb(0,0,0) rgb(0,0,0) rgb(0,0,0) rgb(0,0,0)}', 'div{border-color:#000}' ], 'border-color - same 4 values as rgba': [ 'div{border-color:rgba(0,0,0,.5) rgba(0,0,0,.5) rgba(0,0,0,.5) rgba(0,0,0,.5)}', 'div{border-color:rgba(0,0,0,.5)}' ], 'border-radius - same 4 values': [ 'div{border-radius:3px 3px 3px 3px}', 'div{border-radius:3px}' ], 'border-radius - same 4 values with vendor prefixes': [ 'div{-moz-border-radius:3px 3px 3px 3px;-o-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}', 'div{-moz-border-radius:3px;-o-border-radius:3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px}' ], 'padding - same pairs': [ 'div{padding:15.5em 10.5em 15.5em 10.5em}', 'div{padding:15.5em 10.5em}' ], 'margin - same 2nd and 4th value': [ 'div{margin:1px 2px 3px 2px}', 'div{margin:1px 2px 3px}' ], 'padding - same 3 values': [ 'div{padding:1px 1px 1px}', 'div{padding:1px}' ], 'padding - different 3 values': [ 'div{padding:1px 1em 1%}', 'div{padding:1px 1em 1%}' ], 'margin - 3 callapsible values': [ 'div{margin:1ex 2ex 1ex}', 'div{margin:1ex 2ex}' ], 'border-radius - same 3 values with one vendor prefixe': [ 'div{-webkit-border-radius:3px 3px 3px;border-radius:3px 3px 3px}', 'div{-webkit-border-radius:3px 3px 3px;border-radius:3px}' ], 'border-color - same 2nd and 4th value as rgb': [ 'div{border-color:rgb(0,0,0) rgb(34,0,0) rgb(255,0,0) rgb(34,0,0)}', 'div{border-color:#000 #200 red}' ], 'margin - 3 different values': [ 'div{margin:1px 1px 3px}', 'div{margin:1px 1px 3px}' ], 'border width - 3 different values': [ 'div{border-width:1px 2px 3px}', 'div{border-width:1px 2px 3px}' ], 'padding - same 2 values': [ 'div{padding:1px 1px}', 'div{padding:1px}' ], 'margin - same 2 values': [ 'div{margin:5% 5%}', 'div{margin:5%}' ], 'border-width - same 2 values': [ 'div{border-width:.5em .5em}', 'div{border-width:.5em}' ], 'different units': [ 'div{padding:1px 1em 1% 1rem}', 'div{padding:1px 1em 1% 1rem}' ], 'fractions': [ 'div{margin:.1em .1em .1em .1em}', 'div{margin:.1em}' ], 'preceding value': [ 'div{padding:010px 00015px}', 'div{padding:10px 15px}' ], 'preceding value with fraction zeros': [ 'div{padding:010.0em .05rem}', 'div{padding:10em .05rem}' ] }, { level: 2 }) ) .addBatch( optimizerContext('units', { 'negative padding': [ 'div{padding-left:2px;padding-top:-2px;padding-right:5px;padding-bottom:0}', 'div{padding-left:2px;padding-right:5px;padding-bottom:0}' ], 'negative padding after negative shorthand': [ 'div{padding:-5px 0 0 0;padding-left:2px;padding-top:-2px;padding-right:5px;padding-bottom:0}', 'div{padding-left:2px;padding-right:5px;padding-bottom:0}' ], 'negative padding in calculations': [ 'div{padding:calc(100% - 5px) 0 0}', 'div{padding:calc(100% - 5px) 0 0}' ] }) ) .addBatch( optimizerContext('units with level 2', { 'uppercase': [ '.block{border:1PX solid #eee}', '.block{border:1PX solid #eee}' ], 'mixed case': [ '.block{border:1ReM solid #eee}', '.block{border:1ReM solid #eee}' ] }, { level: 2 }) ) .addBatch( optimizerContext('floats', { 'strips zero in fractions': [ 'a{ margin-bottom: 0.5em}', 'a{margin-bottom:.5em}' ], 'not strips zero in fractions of numbers greater than zero': [ 'a{ margin-bottom: 20.5em}', 'a{margin-bottom:20.5em}' ], 'strip fraction zero #1': [ 'a{opacity:1.0}', 'a{opacity:1}' ], 'strip fraction zero #2': [ 'a{opacity:15.000%}', 'a{opacity:15%}' ], 'strip fraction zero #3': [ 'a{padding:15.55000em}', 'a{padding:15.55em}' ], 'strip fraction zero #4': [ 'a{padding:15.101em}', 'a{padding:15.101em}' ], 'strip fraction zero #5': [ 'a{border-width:0.20em 20.30em}', 'a{border-width:.2em 20.3em}' ], 'strip fraction zeros': [ 'div{margin:1.000em 2.00em 3.100em 4.01em}', 'div{margin:1em 2em 3.1em 4.01em}' ], 'leave pixels as is': [ 'div{transform:translateY(-418.505123px)}', 'div{transform:translateY(-418.505123px)}' ], 'do not round percentages': [ 'div{left:20.505%}', 'div{left:20.505%}' ], 'do not round ems': [ 'div{font-size:1.505em}', 'div{font-size:1.505em}' ], 'leave "fractions" in urls alone': [ '.block{background:url(\'foo.10.png\')}', '.block{background:url(\'foo.10.png\')}' ], 'leave "fractions" in image sets alone': [ '.block{background:image-set(url(\'foo.10.png\') 1x)}', '.block{background:image-set(url(\'foo.10.png\') 1x)}' ] }) ) .addBatch( optimizerContext('floats - rounding to 4', { 'gives value correctly rounded': [ 'div{transform:translateY(-418.505123px)}', 'div{transform:translateY(-418.5051px)}' ] }, { level: { 1: { roundingPrecision: 4 } } }) ) .addBatch( optimizerContext('floats - rounding to 2', { 'gives value correctly rounded': [ 'div{transform:translateY(-418.505123px)}', 'div{transform:translateY(-418.51px)}' ], 'rounds .9999 correctly': [ 'a{stroke-width:.99999px}', 'a{stroke-width:1px}' ], 'rounds 9.995 correctly': [ 'a{stroke-width:9.995px}', 'a{stroke-width:9.99px}' ] }, { level: { 1: { roundingPrecision: 2 } } }) ) .addBatch( optimizerContext('floats - rounding disabled via -1', { 'does not round': [ 'div{transform:translateY(-418.505123px)}', 'div{transform:translateY(-418.505123px)}' ] }, { level: { 1: { roundingPrecision: -1 } } }) ) .addBatch( optimizerContext('floats - rounding disabled', { 'does not round': [ 'div{transform:translateY(-418.505123px)}', 'div{transform:translateY(-418.505123px)}' ] }, { level: { 1: { roundingPrecision: 'off' } } }) ) .addBatch( optimizerContext('colors', { 'shorten rgb to standard hexadecimal format': [ 'a{ color:rgb(5, 10, 15) }', 'a{color:#050a0f}' ], 'skip rgba shortening': [ 'a{ color:rgba(5, 10, 15, 0.5)}', 'a{color:rgba(5,10,15,.5)}' ], 'shorten colors to 3 digit hex instead of 6 digit': [ 'a{ background-color: #aa0000; color:rgb(0, 17, 255)}', 'a{background-color:#a00;color:#01f}' ], 'color names to hex values': [ 'a{color:white;border-color:black;background-color:fuchsia}p{background:yellow}', 'a{color:#fff;border-color:#000;background-color:#f0f}p{background:#ff0}' ], 'keep selectors with color name #1': [ '.black-and-white .foo{color:#fff;background-color:#000}', '.black-and-white .foo{color:#fff;background-color:#000}' ], 'keep selectors with color name #2': [ '.go-blues{background:#000}', '.go-blues{background:#000}' ], 'keep selectors with color name #3': [ '#top_white{background:#000}', '#top_white{background:#000}' ], 'keep selectors with color name #4': [ 'a[data-sth=white]{background:#000}', 'a[data-sth=white]{background:#000}' ], 'color names to hex values with important': [ 'a{color:white !important}', 'a{color:#fff!important}' ], 'color names to hex values in gradients': [ 'p{background:linear-gradient(-90deg,black,white)}', 'p{background:linear-gradient(-90deg,#000,#fff)}' ], 'hex value to color name if shorter': [ 'p{color:#f00}', 'p{color:red}' ], 'upper case hex value to color name if shorter': [ 'p{color:#F00}', 'p{color:red}' ], 'upper case long hex value to color name if shorter': [ 'p{color:#FF0000}', 'p{color:red}' ], 'hex value to color name in borders': [ 'p{border:1px solid #f00}', 'p{border:1px solid red}' ], 'hex value to color name in gradients': [ 'p{background:-moz-linear-gradient(-90deg,#000,#f00)}', 'p{background:-moz-linear-gradient(-90deg,#000,red)}' ], 'hex value to color name in gradients #2': [ 'p{background:-webkit-gradient(linear, left top, left bottom, from(#000), to(#f00))}', 'p{background:-webkit-gradient(linear,left top,left bottom,from(#000),to(red))}' ], 'border color - keep unchanged': [ 'p{border:1px solid #f94311}', 'p{border:1px solid #f94311}' ], 'border color - hex to name': [ 'p{border:1em dotted #f00}', 'p{border:1em dotted red}' ], 'border color - name to hex': [ 'p{border:1em dotted white}', 'p{border:1em dotted #fff}' ], 'border color - rgb': [ 'p{border:1em dotted rgb(255,0,0)}', 'p{border:1em dotted red}' ], 'colors and colons': [ 'a{background-image:linear-gradient(top,red,#e6e6e6)}', 'a{background-image:linear-gradient(top,red,#e6e6e6)}' ], 'colors and parentheses': [ 'a{background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6))}', 'a{background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6))}' ], 'rgb percents': [ 'a{color:rgb(100%,0%,0%)}', 'a{color:rgb(100%,0%,0%)}' ], 'rgba percents': [ 'a{color:rgba(100%,0%,0%,.5)}', 'a{color:rgba(100%,0%,0%,.5)}' ], 'hsla percents': [ 'a{color:hsla(1,0%,0%,.5)}', 'a{color:hsla(1,0%,0%,.5)}' ], 'hsla custom ': [ 'a{color:hsl(80,30%,50%,.5)}', 'a{color:hsl(80,30%,50%,.5)}' ], 'hsl to hex #1': [ 'a{color:hsl(0,0%,0%)}', 'a{color:#000}' ], 'hsl to hex #2': [ 'a{color:hsl(0,100%,100%)}', 'a{color:#fff}' ], 'hsl to hex #3': [ 'a{color:hsl(240,100%,50%)}', 'a{color:#00f}' ], 'hsl to hex #4': [ 'a{color:hsl(240,100%,50%)}', 'a{color:#00f}' ], 'hsl to hex #5': [ 'a{color:hsl(120,100%,25%)}', 'a{color:#007f00}' ], 'hsl to hex #6': [ 'a{color:hsl(99,66%,33%)}', 'a{color:#438b1c}' ], 'hsl to hex #7': [ 'a{color:hsl(360,100%,50%)}', 'a{color:red}' ], 'hsla not to hex': [ 'a{color:hsl(99,66%,33%,.5)}', 'a{color:hsl(99,66%,33%,.5)}' ], 'hsl out of bounds #1': [ 'a{color:hsl(120,200%,50%)}', 'a{color:#0f0}' ], 'hsl out of bounds #2': [ 'a{color:hsl(120,-100%,50%)}', 'a{color:#7f7f7f}' ], 'hsl out of bounds #3': [ 'a{color:hsl(480,100%,25%)}', 'a{color:#007f00}' ], 'hsl out of bounds #4': [ 'a{color:hsl(-240,100%,75%)}', 'a{color:#7fff7f}' ], 'hsl out of bounds #5': [ 'a{color:hsl(-600,100%,75%)}', 'a{color:#7fff7f}' ], 'hsl out of bounds #6': [ 'a{color:hsl(0,0%,122%)}', 'a{color:#fff}' ], 'hsl out of bounds #7': [ 'a{color:hsl(0,0%,-10%)}', 'a{color:#000}' ], 'rgb out of a lower bound': [ 'a{color:rgb(-1,-1,-1)}', 'a{color:#000}' ], 'rgb out of an upper bound': [ 'a{color:rgb(256,256,256)}', 'a{color:#fff}' ], 'turns rgba(0,0,0,0) to transparent': [ 'a{color:rgba(0,0,0,0)}', 'a{color:transparent}' ], 'turns rgba(0.0,0.0,0.0,0) to transparent': [ 'a{color:rgba(0.0,0.0,0.0,0)}', 'a{color:transparent}' ], 'turns hsla(0,0%,0%,0) to transparent': [ 'a{color:hsla(0,0%,0%,0)}', 'a{color:transparent}' ], 'turns hsla(0,0,0,0) to transparent': [ 'a{color:hsla(0,0,0,0)}', 'a{color:transparent}' ], 'turns hsla(0.0,0.0%,0.0%,0) to transparent': [ 'a{color:hsla(0.0,0.0%,0.0%,0)}', 'a{color:transparent}' ], 'turns hsla(0.0,0.0,0.0,0) to transparent': [ 'a{color:hsla(0.0,0.0,0.0,0)}', 'a{color:transparent}' ], 'keeps rgba(0,0,0,0) for background': [ 'a{background:rgba(0,0,0,0)}', 'a{background:rgba(0,0,0,0)}' ], 'keeps rgba(0,0,0,0) for background-color': [ 'a{background-color:rgba(0,0,0,0)}', 'a{background-color:rgba(0,0,0,0)}' ], 'keeps rgba(255,255,255,0)': [ 'a{color:rgba(255,255,255,0)}', 'a{color:rgba(255,255,255,0)}' ], 'keeps rgba(255,0,255,0)': [ 'a{color:rgba(255,0,255,0)}', 'a{color:rgba(255,0,255,0)}' ], 'keeps hsla(120,100%,50%,0)': [ 'a{color:hsla(120,100%,50%,0)}', 'a{color:hsla(120,100%,50%,0)}' ], 'keeps rgba(0,0,0,.5)': [ 'a{color:rgba(0,0,0,.5)}', 'a{color:rgba(0,0,0,.5)}' ], 'keeps rgba(0,255,0,.5)': [ 'a{color:rgba(0,255,0,.5)}', 'a{color:rgba(0,255,0,.5)}' ], 'keeps hsla(120,100%,50%,.5)': [ 'a{color:hsla(120,100%,50%,.5)}', 'a{color:hsla(120,100%,50%,.5)}' ], 'keeps rgba(0,0,0,0) when inside a gradient': [ 'a{background:linear-gradient(0,#000,rgba(0,0,0,0))}', 'a{background:linear-gradient(0,#000,rgba(0,0,0,0))}' ], 'keeps hsla(120,100%,50%,0) when inside a gradient': [ 'a{background:linear-gradient(0,#000,hsla(120,100%,50%,0))}', 'a{background:linear-gradient(0,#000,hsla(120,100%,50%,0))}' ], 'keeps transparent color in layered background': [ 'a{background:linear-gradient(0,#000,hsla(120,100%,50%,0)),rgba(0,0,0,0)}', 'a{background:linear-gradient(0,#000,hsla(120,100%,50%,0)),rgba(0,0,0,0)}' ] }) ) .addBatch( optimizerContext('border-radius', { 'border radius H+V 0/0': [ 'a{border-radius:0 / 0}', 'a{border-radius:0}' ], 'border radius side H+V 0/0': [ 'a{border-top-left-radius:0 / 0}', 'a{border-top-left-radius:0}' ], 'border radius H+V same values': [ 'a{border-radius:5px / 5px}', 'a{border-radius:5px}' ], 'border radius side H+V same values': [ 'a{border-top-left-radius:1em / 1em}', 'a{border-top-left-radius:1em}' ] }) ) .addBatch( optimizerContext('font weights', { 'font weight in font declarations': [ 'body{font:normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif}', 'body{font:normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif}' ], 'font weight in extended font declarations': [ 'a{font:normal normal normal 13px/20px Helvetica}', 'a{font:normal normal normal 13px/20px Helvetica}' ], 'font weight where style and weight are declared': [ 'a{font:normal 300 100%/1.5 sans-serif}', 'a{font:normal 300 100%/1.5 sans-serif}' ] }) ) .addBatch( optimizerContext('unicode', { 'font-names': [ 'body{font-family:\\5FAE\\8F6F\\96C5\\9ED1,\\5B8B\\4F53,sans-serif}', 'body{font-family:\\5FAE\\8F6F\\96C5\\9ED1,\\5B8B\\4F53,sans-serif}' ] }) ) .addBatch( optimizerContext('urls', { 'keep urls without parentheses unchanged': [ 'a{background:url(/images/blank.png)}', 'a{background:url(/images/blank.png)}' ], 'keep quotes in base64 encoded PNG data URI': [ '.icon-logo{background-image:url(\'data:image/png;base64,iVBORw0\')}', '.icon-logo{background-image:url(\'data:image/png;base64,iVBORw0\')}' ], 'keep quotes in base64 encoded ICO data URI': [ '.icon-logo{background-image:url("data:image/x-icon;base64,AAABAAEAEBA")}', '.icon-logo{background-image:url("data:image/x-icon;base64,AAABAAEAEBA")}' ], 'keep quotes in font data URI with mediatype': [ '@font-face{src:url("data:application/x-font-woff;base64,d09GRk9UVE8AAENAAA0AAAAA")}', '@font-face{src:url("data:application/x-font-woff;base64,d09GRk9UVE8AAENAAA0AAAAA")}' ], 'keep quotes in font data URI without mediatype': [ '@font-face{src:url("data:;base64,d09GRk9UVE8AAENAAA0AAAAA")}', '@font-face{src:url("data:;base64,d09GRk9UVE8AAENAAA0AAAAA")}' ], 'cut off url content on selector level': [ 'a{background:url(image/}', '' ], 'cut off url content on block level': [ '@font-face{src:url(data:application/x-font-woff;base64,d09GRk9UVE8AAENAAA0AAAAA}', '' ], 'cut off url content on top level': [ '@font-face{src:url(data:application/x-font-woff;base64,d09GRk9UVE8AAENAAA0AAAAA', '' ], 'keep quoting if whitespace': [ 'a{background:url("/images/blank image.png")}', 'a{background:url("/images/blank image.png")}' ], 'keep quoting if whitespace inside @font-face': [ '@font-face{src:url("Helvetica Neue.eot")}', '@font-face{src:url("Helvetica Neue.eot")}' ], 'not add a space before url\'s hash': [ 'a{background:url(/fonts/d90b3358-e1e2-4abb-ba96-356983a54c22.svg#d90b3358-e1e2-4abb-ba96-356983a54c22)}', 'a{background:url(/fonts/d90b3358-e1e2-4abb-ba96-356983a54c22.svg#d90b3358-e1e2-4abb-ba96-356983a54c22)}' ], 'keep urls from being stripped down #1': [ 'a{background:url(/image-1.0.png)}', 'a{background:url(/image-1.0.png)}' ], 'keep urls from being stripped down #2': [ 'a{background:url(/image-white.png)}', 'a{background:url(/image-white.png)}' ], 'keep urls from being stripped down #3': [ 'a{background:url(/libraries/jquery-ui-1.10.1.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top #eee}', 'a{background:url(/libraries/jquery-ui-1.10.1.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top #eee}' ], 'keep special markers in comments (so order is important)': [ '/*! __ESCAPED_URL_CLEAN_CSS0__ */a{display:block}', '/*! __ESCAPED_URL_CLEAN_CSS0__ */a{display:block}' ], 'strip new line in urls': [ 'a{background:url(/very/long/' + lineBreak + 'path)}', 'a{background:url(/very/long/path)}' ], 'uppercase': [ 'a{background-image: URL("images/image.png");}', 'a{background-image:url("images/image.png")}' ], 'image-set': [ 'a{background:url(one.png);background:-webkit-image-set(url(one.png) 1x,url(two.png) 2x)}', 'a{background:url(one.png);background:-webkit-image-set(url(one.png) 1x,url(two.png) 2x)}' ], 'with square brackets and protocol-less value': [ '.block{background:url([//example.com/logo.png])}', '.block{background:url([//example.com/logo.png])}' ] }) ) .addBatch( optimizerContext('urls with URL quotes removing', { 'strip quotes from base64 encoded PNG data URI': [ '.icon-logo{background-image:url(\'data:image/png;base64,iVBORw0\')}', '.icon-logo{background-image:url(data:image/png;base64,iVBORw0)}' ], 'strip quotes from base64 encoded ICO data URI': [ '.icon-logo{background-image:url("data:image/x-icon;base64,AAABAAEAEBA")}', '.icon-logo{background-image:url(data:image/x-icon;base64,AAABAAEAEBA)}' ], 'strip quotes from font data URI with mediatype': [ '@font-face{src:url("data:application/x-font-woff;base64,d09GRk9UVE8AAENAAA0AAAAA")}', '@font-face{src:url(data:application/x-font-woff;base64,d09GRk9UVE8AAENAAA0AAAAA)}' ], 'strip quotes from font data URI without mediatype': [ '@font-face{src:url("data:;base64,d09GRk9UVE8AAENAAA0AAAAA")}', '@font-face{src:url(data:;base64,d09GRk9UVE8AAENAAA0AAAAA)}' ], 'strip single parentheses': [ 'a{background:url(\'/images/blank.png\')}', 'a{background:url(/images/blank.png)}' ], 'strip double parentheses': [ 'a{background:url("/images/blank.png")}', 'a{background:url(/images/blank.png)}' ], 'strip more': [ 'p{background:url("/images/blank.png")}b{display:block}a{background:url("/images/blank2.png")}', 'p{background:url(/images/blank.png)}b{display:block}a{background:url(/images/blank2.png)}' ], 'not strip comments if spaces inside': [ 'p{background:url("/images/long image name.png")}b{display:block}a{background:url("/images/no-spaces.png")}', 'p{background:url("/images/long image name.png")}b{display:block}a{background:url(/images/no-spaces.png)}' ], 'strip new line in urls': [ 'a{background:url("/very/long/' + lineBreak + 'path")}', 'a{background:url(/very/long/path)}' ], 'uppercase': [ 'a{background-image: URL("images/image.png");}', 'a{background-image:url(images/image.png)}' ], }, { compatibility: { properties: { urlQuotes: false } } }) ) .addBatch( optimizerContext('urls custom protocol and url rewriting', { 'simple': [ 'a{background:url(app://abc.png)}', 'a{background:url(app://abc.png)}' ], 'complex': [ 'a{background:url(git+ssh2://abc.png)}', 'a{background:url(git+ssh2://abc.png)}' ] }) ) .addBatch( optimizerContext('urls whitespace in compatibility mode', { 'keeps spaces as they are': [ '*{background:url(test.png) no-repeat}', '*{background:url(test.png) no-repeat}' ] }, { compatibility: 'ie8' }) ) .addBatch( optimizerContext('urls whitespace with url rewriting', { 'keep quoting if whitespace': [ 'a{background:url("/images/blank image.png")}', 'a{background:url("/images/blank image.png")}' ], 'keep quoting if whitespace inside @font-face': [ '@font-face{src:url("/Helvetica Neue.eot")}', '@font-face{src:url("/Helvetica Neue.eot")}' ], 'keep SVG data URI unchanged': [ 'div{background:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2018%2018%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2214%22%20height%3D%2214%22%2Fsvg%3E)}', 'div{background:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2018%2018%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2214%22%20height%3D%2214%22%2Fsvg%3E)}' ], 'quotes SVG data URI if with parentheses': [ 'div{background:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2018%2018%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2214%22%20height%3D%2214%22%20transform%3D%22translate(2%202)%22%2F%3E%3C%2Fsvg%3E) bottom left}', 'div{background:url(\'data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2018%2018%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%2214%22%20height%3D%2214%22%20transform%3D%22translate(2%202)%22%2F%3E%3C%2Fsvg%3E\') bottom left}' ], 'quotes SVG data URI trailed with !important': [ 'div{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=")!important}', 'div{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=")!important}' ], 'quotes SVG data URI trailed with !important without quotes': [ 'div{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}', 'div{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}' ], 'do not unquote double quoted URI with unescaped single quotes inside': [ 'a{background:url("data:image/svg+xml,%3csvg%20xmlns%3d\'http://www.w3.org/2000/svg\'/%3e")}', 'a{background:url("data:image/svg+xml,%3csvg%20xmlns%3d\'http://www.w3.org/2000/svg\'/%3e")}' ], 'do not unquote single quoted URI with unescaped double quotes inside': [ 'a{background:url(\'data:image/svg+xml,%3csvg%20xmlns%3d"http://www.w3.org/2000/svg"/%3e\')}', 'a{background:url(\'data:image/svg+xml,%3csvg%20xmlns%3d"http://www.w3.org/2000/svg"/%3e\')}' ] }, { rebase: true }) ) .addBatch( optimizerContext('urls whitespace with url rewriting and no URL quotes', { 'strip single parentheses': [ 'a{background:url("/images/blank.png")}', 'a{background:url(/images/blank.png)}' ], 'strip double parentheses': [ 'a{background:url("/images/blank.png")}', 'a{background:url(/images/blank.png)}' ] }, { compatibility: { properties: { urlQuotes: false } }, rebase: true }) ) .addBatch( optimizerContext('urls quotes in compatibility mode', { 'keeps quotes as they are': [ 'div{background:url("test.png")}', 'div{background:url("test.png")}' ], 'keeps quotes as they are when minify hash data': [ {'temp/file.css': { styles: 'div{background:url("test.png")}' }}, 'div{background:url("temp/test.png")}' ], 'no quotes added when minify hash data': [ {'temp/file.css': { styles: 'div{background:url(test.png)}' }}, 'div{background:url(temp/test.png)}' ] }, { rebase: true, compatibility: { properties: { urlQuotes: true } } }) ) .addBatch( optimizerContext('urls rewriting - rebaseTo', { 'no @import': [ 'a{background:url(test/fixtures/partials/extra/down.gif) 0 0 no-repeat}', 'a{background:url(partials/extra/down.gif) 0 0 no-repeat}' ], 'relative @import': [ '@import url(test/fixtures/partials-relative/base.css);', 'a{background:url(partials/extra/down.gif) 0 0 no-repeat}' ], 'relative @import twice': [ '@import url(test/fixtures/partials-relative/extra/included.css);', 'a{background:url(partials/extra/down.gif) 0 0 no-repeat}' ], 'absolute @import': [ '@import url(/test/fixtures/partials-relative/base.css);', 'a{background:url(partials/extra/down.gif) 0 0 no-repeat}' ], 'document-local reference': [ 'svg{marker-end:url(#arrow)}', 'svg{marker-end:url(#arrow)}' ], 'chrome extension': [ 'a{background-image:url("chrome-extension://__MSG_@@extension_id__/someFile.png")}', 'a{background-image:url("chrome-extension://__MSG_@@extension_id__/someFile.png")}' ] }, { rebase: true, rebaseTo: path.join('test', 'fixtures') }) ) .addBatch( optimizerContext('urls rewriting - rebaseTo as a missing directory', { 'url': [ 'a{background:url(test/partials/extra/down.gif) no-repeat}', 'a{background:url(../partials/extra/down.gif) no-repeat}' ], 'relative @import': [ '@import url(test/fixtures/partials-relative/base.css);', 'a{background:url(../fixtures/partials/extra/down.gif) 0 0 no-repeat}' ], 'absolute @import': [ '@import url(/test/fixtures/partials-relative/base.css);', 'a{background:url(../fixtures/partials/extra/down.gif) 0 0 no-repeat}' ] }, { rebase: true, rebaseTo: path.join('test', 'fixtures2') }) ) .addBatch( optimizerContext('urls rewriting - rebase off', { 'keeps urls the same': [ '@import url(test/fixtures/partials-relative/base.css);', 'a{background:url(../partials/extra/down.gif) 0 0 no-repeat}' ] }) ) .addBatch( optimizerContext('fonts', { 'keep format quotation': [ '@font-face{font-family:PublicVintage;src:url(/PublicVintage.otf) format("opentype")}', '@font-face{font-family:PublicVintage;src:url(/PublicVintage.otf) format("opentype")}' ], 'keep local quotation': [ '@font-face{font-family:X;src:local("Pacifico") format("opentype")}', '@font-face{font-family:X;src:local("Pacifico") format("opentype")}' ], 'remove font family quotation': [ 'a{font-family:"Helvetica",\'Arial\'}', 'a{font-family:Helvetica,Arial}' ], 'keeps quoting for generic families' : [ '.block{font-family:"cursive","default","emoji","fangsong","fantasy","inherit","initial","math","monospace","revert","revert-layer","sans-serif","serif","system-ui","ui-monospace","ui-rounded","ui-sans-serif","ui-serif","unset"}', '.block{font-family:"cursive","default","emoji","fangsong","fantasy","inherit","initial","math","monospace","revert","revert-layer","sans-serif","serif","system-ui","ui-monospace","ui-rounded","ui-sans-serif","ui-serif","unset"}' ], 'do not remove font family double quotation if space inside': [ 'a{font-family:"Courier New"}', 'a{font-family:"Courier New"}' ], 'do not remove font quotation if starts with a number': [ 'a{font:\'123font\'}', 'a{font:\'123font\'}' ], 'do not remove font family quotation if starts with a number': [ 'a{font-family:\'123font\'}', 'a{font-family:\'123font\'}' ], 'remove font quotation': [ 'a{font:13px/15px "Helvetica",\'Arial\'}', 'a{font:13px/15px Helvetica,Arial}' ], 'remove font quotation #2': [ 'a{font:13px/15px "Helvetica1_12",\'Arial_1451\'}', 'a{font:13px/15px Helvetica1_12,Arial_1451}' ], 'remove font quotation #3': [ 'a{font:13px/15px "Helvetica-Regular",\'Arial-Bold\'}', 'a{font:13px/15px Helvetica-Regular,Arial-Bold}' ], 'do not remove quotation from enclosed JSON (weird, I know)': [ 'p{font-family:\'{ "current" : "large", "all" : ["small", "medium", "large"], "position" : 2 }\'}', 'p{font-family:\'{ "current" : "large", "all" : ["small", "medium", "large"], "position" : 2 }\'}' ] }) ) .addBatch( optimizerContext('IE 8 hacks', { 'asterisk': [ 'a{*color:#fff}', 'a{*color:#fff}' ], 'unserscore': [ 'a{_color:#fff}', 'a{_color:#fff}' ], 'backslash': [ 'a{color:#fff\\9}', 'a{color:#fff\\9}' ], 'overriding by an asterisk': [ 'a{color:red;display:block;*color:#fff}', 'a{color:red;display:block;*color:#fff}' ], 'overriding by an underscore': [ 'a{color:red;display:block;_color:#fff}', 'a{color:red;display:block;_color:#fff}' ], 'overriding by an backslash': [ 'a{color:red;display:block;color:#fff\\9}', 'a{color:red;display:block;color:#fff\\9}' ], 'overriding an asterisk': [ 'a{*color:red;display:block;*color:#fff}', 'a{display:block;*color:#fff}' ], 'overriding an underscore': [ 'a{_color:red;display:block;_color:#fff}', 'a{display:block;_color:#fff}' ], 'overriding a backslash': [ 'a{color:red\\9;display:block;color:#fff\\9}', 'a{display:block;color:#fff\\9}' ], 'overriding a star by a non-ajacent selector': [ '.block-1{color:red}.block-2{color:#000}.block-1{*color:#fff}', '.block-1{color:red}.block-2{color:#000}.block-1{*color:#fff}' ], 'overriding an underscore by a non-ajacent selector': [ '.block-1{color:red}.block-2{color:#000}.block-1{_color:#fff}', '.block-1{color:red}.block-2{color:#000}.block-1{_color:#fff}' ], 'overriding a backslash by a non-ajacent selector': [ '.block-1{color:red}.block-2{color:#fff}.block-1{color:#fff\\9}', '.block-1{color:red}.block-2{color:#fff}.block-1{color:#fff\\9}' ], 'preserving backslash in overriddable': [ 'a{border:1px solid #ccc\\9}', 'a{border:1px solid #ccc\\9}' ], 'keeps rgba(0,0,0,0)': [ 'a{color:rgba(0,0,0,0)}', 'a{color:rgba(0,0,0,0)}' ], 'keeps rgba(255,255,255,0)': [ 'a{color:rgba(255,255,255,0)}', 'a{color:rgba(255,255,255,0)}' ], 'keeps hsla(120,100%,50%,0)': [ 'a{color:hsla(120,100%,50%,0)}', 'a{color:hsla(120,100%,50%,0)}' ] }, { compatibility: 'ie8', level: 2 }) ) .addBatch( optimizerContext('IE 7 hacks', { 'keeps !ie hack': [ 'a{list-style-type:none;list-style-type:decimal !ie}', 'a{list-style-type:none;list-style-type:decimal !ie}' ] }, { compatibility: 'ie7' }) ) .addBatch( optimizerContext('IE hacks without IE compatibility', { 'star': [ 'a{*color:#fff}', '' ], 'unserscore': [ 'a{_color:#fff}', '' ], 'two in a row': [ 'a{padding:0;*height:13px;*width:13px}', 'a{padding:0}' ], 'two in a row mixed': [ 'a{padding:0;*height:13px;_width:13px}', 'a{padding:0}' ], 'backslash': [ 'a{color:#fff\\9}', '' ] }) ) .addBatch( optimizerContext('animations', { 'shorten': [ '@keyframes test\n{ from\n { width:90px; }\n to { width:200px; }\n}', '@keyframes test{from{width:90px}to{width:200px}}' ], 'remove name quotes': [ '@keyframes "test1"{a{display:block}}@keyframes \'test2\'{a{display:block}}', '@keyframes test1{a{display:block}}@keyframes test2{a{display:block}}' ], 'not remove name quotes if whitespace inside': [ '@keyframes "test 1"{a{display:block}}@keyframes \'test 2\'{a{display:block}}', '@keyframes "test 1"{a{display:block}}@keyframes \'test 2\'{a{display:block}}' ], 'remove name quotes for vendor prefixes': [ '@-moz-keyframes \'test\'{a{display:block}}@-o-keyframes \'test\'{a{display:block}}@-webkit-keyframes \'test\'{a{display:block}}', '@-moz-keyframes test{a{display:block}}@-o-keyframes test{a{display:block}}@-webkit-keyframes test{a{display:block}}' ], 'remove quotes in animation': [ 'div{animation:\'test\' 2s ease-in .5s 3}', 'div{animation:test 2s ease-in .5s 3}' ], 'not remove quotes in animation when name with space inside': [ 'div{animation:\'test 1\' 2s ease-in .5s 3}', 'div{animation:\'test 1\' 2s ease-in .5s 3}' ], 'remove quotes in vendor prefixed animation': [ 'div{-moz-animation:\'test\' 2s ease-in;-o-animation:\'test\' 2s ease-in;-webkit-animation:\'test\' 2s ease-in}', 'div{-moz-animation:test 2s ease-in;-o-animation:test 2s ease-in;-webkit-animation:test 2s ease-in}' ], 'remove quotes in animation-name': [ 'div{animation-name:\'test\'}', 'div{animation-name:test}' ], 'not remove quotes in animation-name when name with space inside': [ 'div{animation-name:\'test 1\'}', 'div{animation-name:\'test 1\'}' ], 'remove quotes in vendor prefixed animation-name': [ 'div{-moz-animation-name:\'test\';-o-animation-name:\'test\';-webkit-animation-name:\'test\'}', 'div{-moz-animation-name:test;-o-animation-name:test;-webkit-animation-name:test}' ], 'animation named null': [ '@keyframes slideout-null{0%{opacity:1}100%{opacity:1}}.null{animation:slideout-null 10ms}', '@keyframes slideout-null{0%{opacity:1}100%{opacity:1}}.null{animation:slideout-null 10ms}' ] }) ) .addBatch( optimizerContext('attributes', { 'should keep selector if no value': [ 'div[data-type]{border-color:red}', 'div[data-type]{border-color:red}' ], 'should keep selector if no quotation': [ 'div[data-type=something]{border-color:red}', 'div[data-type=something]{border-color:red}' ], 'should keep selector if equals in value': [ 'div[data-type="stupid=value"]{border-color:red}', 'div[data-type="stupid=value"]{border-color:red}' ], 'should keep quotation if whitespace inside': [ 'div[data-type^=\'object 1\']{border-color:red}', 'div[data-type^=\'object 1\']{border-color:red}' ], 'should keep quotations if special characters inside': [ 'a[data-type="object+1"]{color:red}p[data-target="#some-place"]{color:#0f0}', 'a[data-type="object+1"]{color:red}p[data-target="#some-place"]{color:#0f0}' ], 'should keep quotation if is a number': [ 'div[data-number=\'1\']{border-color:red}', 'div[data-number=\'1\']{border-color:red}' ], 'should keep quotation if starts with a number': [ 'div[data-type^=\'1something\']{border-color:red}', 'div[data-type^=\'1something\']{border-color:red}' ], 'should keep quotation if starts with a hyphen': [ 'div[data-type$=\'-something\']{border-color:red}', 'div[data-type$=\'-something\']{border-color:red}' ], 'should keep quotation if key only (which is invalid)': [ 'div["data-type"]{color:red}', 'div["data-type"]{color:red}' ], 'should strip quotation if is a word': [ 'a[data-href=\'object\']{border-color:red}', 'a[data-href=object]{border-color:red}' ], 'should strip quotation if is a hyphen separated words': [ 'a[data-href=\'object-1-two\']{border-color:red}', 'a[data-href=object-1-two]{border-color:red}' ], 'should strip quotations if is less specific selectors': [ 'a[data-href*=\'object1\']{border-color:red}a[data-href|=\'object2\']{border-color:#0f0}', 'a[data-href*=object1]{border-color:red}a[data-href|=object2]{border-color:#0f0}' ], 'should keep special characters inside attributes #1': [ 'a[data-css=\'color:white\']{display:block}', 'a[data-css=\'color:white\']{display:block}' ], 'should keep special characters inside attributes #2': [ 'a[href="/version-0.01.html"]{display:block}', 'a[href="/version-0.01.html"]{display:block}' ], 'should strip escaped new lines inside attributes': [ '.test[title="my very long \\' + lineBreak + 'title"]{display:block}', '.test[title="my very long title"]{display:block}' ], 'should strip escaped new lines inside attributes which can be unquoted': [ '.test[title="my_very_long_\\' + lineBreak + 'title"]{display:block}', '.test[title=my_very_long_title]{display:block}' ], 'should strip whitespace between square brackets': [ 'body[ data-title ]{color:red}', 'body[data-title]{color:red}' ], 'should strip whitespace inside square brackets': [ 'body[ data-title = x ]{color:red}', 'body[data-title=x]{color:red}' ] }) ) .addBatch( optimizerContext('ie filters', { 'short alpha': [ // 'a{ filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80); -ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';}', 'a{ filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}', 'a{filter:alpha(Opacity=80)}' ], 'short chroma': [ 'a{filter:progid:DXImageTransform.Microsoft.Chroma(color=#919191)}', 'a{filter:chroma(color=#919191)}' ], 'matrix filter spaces': [ 'a{filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.984, M22=0.984, M12=0.17, M21=-0.17, SizingMethod=\'auto expand\')}', 'a{filter:progid:DXImageTransform.Microsoft.Matrix(M11=.984, M22=.984, M12=.17, M21=-.17, SizingMethod=\'auto expand\')}' ], 'multiple filters (IE7 issue)': [ 'a{filter:progid:DXImageTransform.Microsoft.Chroma(color=#919191) progid:DXImageTransform.Microsoft.Matrix(M11=0.984, M22=0.984, M12=0.17, M21=-0.17, SizingMethod=\'auto expand\')}', 'a{filter:progid:DXImageTransform.Microsoft.Chroma(color=#919191) progid:DXImageTransform.Microsoft.Matrix(M11=.984, M22=.984, M12=.17, M21=-.17, SizingMethod=\'auto expand\')}' ], 'AlphaImageLoader': [ 'div{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/skyline.jpg)}', 'div{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/skyline.jpg)}' ], 'colors #1': [ 'a{filter:chroma(color=#ffffff)}', 'a{filter:chroma(color=#ffffff)}' ], 'colors #2': [ 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#cccccc\', endColorstr=\'#000000\')}', 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#cccccc\', endColorstr=\'#000000\')}' ], 'colors #3': [ 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#DDDDDD\', endColorstr=\'#333333\')}', 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#DDDDDD\', endColorstr=\'#333333\')}' ], 'whitespace': [ 'a{ filter: chroma(color = "#ff0000")}', 'a{filter:chroma(color="#ff0000")}' ] }, { compatibility: 'ie9' }) ) .addBatch( optimizerContext('charsets', { 'not at beginning': [ 'a{ color: #f10; }@charset \'utf-8\';b { font-weight: bolder}', '@charset \'utf-8\';a{color:#f10}b{font-weight:bolder}' ], 'multiple charsets': [ '@charset \'utf-8\';div :before { display: block }@charset \'utf-8\';a { color: #f10 }', '@charset \'utf-8\';div :before{display:block}a{color:#f10}' ], 'charset and space after': [ '@charset \'utf-8\';' + lineBreak + lineBreak + 'a{display:block}', '@charset \'utf-8\';a{display:block}' ] }) ) .addBatch( optimizerContext('important', { 'space before': [ 'body{background-color:#fff !important}', 'body{background-color:#fff!important}' ], 'space between ! and important': [ 'body{background-color:#fff ! important}', 'body{background-color:#fff!important}' ], 'Capital letters': [ 'a{color: red !ImporTant }', 'a{color:red!important}' ], 'Match word': [ 'a{color: red !importante }', '' ] }) ) .addBatch( optimizerContext('empty elements', { 'single': [ ' div p { \n}', '' ], 'between non-empty': [ 'div {color:#fff} a{ } p{ line-height:1.35em}', 'div{color:#fff}p{line-height:1.35em}' ], 'just a semicolon': [ 'div { ; }', '' ], 'inside @media': [ '@media screen { .test {} } .test1 { color: green; }', '.test1{color:green}' ], 'inside nested @media': [ '@media screen { @media (orientation:landscape) { @media (max-width:999px) { .test {} } } }', '' ], 'inside not empty @media': [ '@media screen { .test {} .some { display:none } }', '@media screen{.some{display:none}}' ], 'inside nested not empty @media': [ '@media screen { @media (orientation:landscape) { @media (max-width:999px) { .test {} } a {color:red} } }', '@media screen{@media (orientation:landscape){a{color:red}}}' ] }) ) .addBatch( optimizerContext('empty @media', { 'simple': [ '@media print{}', '' ], 'simple with and': [ '@media print and screen{}', '' ], 'complex': [ '@media print, (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {\n}', '' ] }) ) .addBatch( optimizerContext('@import', { 'empty': [ '@import url();', '' ], 'of an unknown file': [ '@import url(\'fake.css\');', '' ], 'of an unknown file with a missing trailing semicolon': [ '@import url(fake.css)', '' ], 'of a directory': [ '@import url(test/fixtures/partials);', '' ], 'of a real file': [ '@import url(test/fixtures/partials/one.css);', '.one{color:red}' ], 'of a real file twice': [ '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/one.css);', '.one{color:red}' ], 'of a real file with current path prefix': [ '@import url(./test/fixtures/partials/one.css);', '.one{color:red}' ], 'of a real file with quoted path': [ '@import url(\'test/fixtures/partials/one.css\');', '.one{color:red}' ], 'of a real file with double-quoted path': [ '@import url("test/fixtures/partials/one.css");', '.one{color:red}' ], 'of a real file with bare path': [ '@import test/fixtures/partials/one.css;', '.one{color:red}' ], 'of a real file with bare quoted path': [ '@import "test/fixtures/partials/one.css";', '.one{color:red}' ], 'of a real file with bare double-quoted path': [ '@import "test/fixtures/partials/one.css";', '.one{color:red}' ], 'of a real file with single simple media': [ '@import url(test/fixtures/partials/one.css) screen;', '@media screen{.one{color:red}}' ], 'of a real file with multiple simple media': [ '@import "test/fixtures/partials/one.css" screen, tv, print;', '@media screen,tv,print{.one{color:red}}' ], 'of a real file with complex media': [ '@import \'test/fixtures/partials/one.css\' screen and (orientation:landscape);', '@media screen and (orientation:landscape){.one{color:red}}' ], 'of a real file with a missing trailing semicolon': [ '@import url(test/fixtures/partials/one.css)', '' ], 'of a real files with a missing trailing semicolon': [ '@import url(test/fixtures/partials/one.css)@import url(test/fixtures/partials/two.css)', '' ], 'of more files': [ '@import url(test/fixtures/partials/one.css);\n\n@import url(test/fixtures/partials/extra/three.css);\n\na{display:block}', '.one{color:red}.three{color:#0f0}a{display:block}' ], 'of more files with media': [ '@import url(test/fixtures/partials/one.css) screen;@import url(test/fixtures/partials/extra/three.css) tv;', '@media screen{.one{color:red}}@media tv{.three{color:#0f0}}' ], 'of multi-level, circular dependency file': [ '@import url(test/fixtures/partials/two.css);', '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}' ], 'of a file with a relative resource path': [ '@import url(test/fixtures/partials/three.css);', '.three{background-image:url(test/fixtures/partials/extra/down.gif)}' ], 'of a file with an absolute resource path': [ '@import url(test/fixtures/partials/four.css);', '.four{background-image:url(/partials/extra/down.gif)}' ], 'of a file with a resource URI': [ '@import url(test/fixtures/partials/five.css);', '.five{background:url(data:image/jpeg;base64,/9j/)}' ], 'cut off': [ '@impo', '' ], 'cut off inside a comment': [ '/* @impo', '' ], 'inside a comment': [ '/* @import url(test/fixtures/partials/five.css); */a { color: red; }', 'a{color:red}' ], 'after a comment': [ '/* @import url(test/fixtures/partials/one.css); */@import url(test/fixtures/partials/one.css);a { color: red; }', '.one{color:red}a{color:red}' ], 'used arbitrarily in comment': [ '/* @import foo */a { color: red; }', 'a{color:red}' ], 'used arbitrarily in comment multiple times': [ '/* @import foo */a { color: red; }\n/* @import bar */p { color: #fff; }', 'a{color:red}p{color:#fff}' ], 'used arbitrarily in comment including unrelated comment': [ '/* foo */a { color: red; }/* bar *//* @import */', 'a{color:red}' ], 'of a file with a comment': [ '@import url(test/fixtures/partials/comment.css);', 'a{display:block}' ], 'of a file with media having a comment': [ '@import url(test/fixtures/partials/comment.css) screen and (device-height: 600px);', '@media screen and (device-height:600px){a{display:block}}' ], 'after standard content': [ 'a{display:block}@import url(test/fixtures/partials/one.css);body{margin:0}', 'a{display:block}body{margin:0}' ], 'with content between': [ '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two { color:#fff; }@import url(test/fixtures/partials/extra/sub.css);.base { margin:0px }', '.one{color:red}.three{color:#0f0}.two{color:#fff}.four{color:#00f}.two{color:#fff}.base{margin:0}' ], 'after quoted content': [ '/*a{display:block}*/@import url(test/fixtures/partials/one.css);', '.one{color:red}' ], 'with double underscore': [ '@import url(test/fixtures/partials/with__double_underscore.css);', '.one{color:green}' ], 'remote inside local': [ '@import url(test/fixtures/partials/remote.css);', '@import url(http://clean-css.github.io/styles.css);' ], 'remote inside local after content': [ 'a{color:red}@import url(test/fixtures/partials/remote.css);', 'a{color:red}' ], 'remote inside local after imported content': [ '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/remote.css);', '.one{color:red}' ], 'scanning comments and stack too deep exception': [ generateComments(30000) + '@import url(fonts.google.com/some.css);', '' ] }, { rebase: true }) ) .addBatch( optimizerContext('@import with rebase turned off', { 'of a file with a relative resource path': [ '@import url(test/fixtures/partials/three.css);', '.three{background-image:url(extra/down.gif)}' ], 'of a file with an absolute resource path': [ '@import url(test/fixtures/partials/four.css);', '.four{background-image:url(/partials/extra/down.gif)}' ], 'of a file with a resource URI': [ '@import url(test/fixtures/partials/five.css);', '.five{background:url(data:image/jpeg;base64,/9j/)}' ], }) ) .addBatch( optimizerContext('malformed but still valid @import', { 'prefixed with whitespace': [ ' @import \'test/fixtures/partials/one.css\';', '.one{color:red}' ], 'no whitespace between @import and filename': [ '@import\'test/fixtures/partials/one.css\';', '.one{color:red}' ], 'extra whitespace between @import and filename': [ '@import \'test/fixtures/partials/one.css\';', '.one{color:red}' ], 'line break between @import and filename': [ '@import ' + lineBreak + '\'test/fixtures/partials/one.css\';', '.one{color:red}' ], 'extra whitespace prefix in file name': [ '@import \' test/fixtures/partials/one.css\';', '.one{color:red}' ], 'extra whitespace suffix in file name': [ '@import \'test/fixtures/partials/one.css \';', '.one{color:red}' ], 'extra whitespace after': [ '@import \'test/fixtures/partials/one.css\' ;', '.one{color:red}' ], 'uppercase @import': [ '@IMPORT \'test/fixtures/partials/one.css\';', '.one{color:red}' ], 'extra whitespace between url and filename': [ '@import url( test/fixtures/partials/one.css);', '.one{color:red}' ], 'extra whitespace prefix in file name - url': [ '@import url(\' test/fixtures/partials/one.css\');', '.one{color:red}' ], 'extra whitespace suffix in file name - url': [ '@import url(\'test/fixtures/partials/one.css \');', '.one{color:red}' ] }) ) .addBatch( optimizerContext('@import with absolute paths', { 'of an unknown file': [ '@import url(/fake.css);', '' ], 'of a real file': [ '@import url(/test/fixtures/partials/one.css);', '.one{color:red}' ], 'of a real file with quoted paths': [ '@import url("/test/fixtures/partials/one.css");', '.one{color:red}' ], 'of two files with mixed paths': [ '@import url(/test/fixtures/partials/one.css);@import url(/test/fixtures/partials/extra/three.css);a{display:block}', '.one{color:red}.three{color:#0f0}a{display:block}' ], 'of a multi-level, circular dependency file': [ '@import url(/test/fixtures/partials/two.css);', '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}' ], 'of a multi-level, circular dependency file with mixed paths': [ '@import url(/test/fixtures/partials-absolute/base.css);', '.base2{border-width:0}.sub{padding:0}.base{margin:0}' ] }) ) .addBatch( optimizerContext('@import with inline option', { 'of an unknown file': [ '@import url(/fake.css);', '@import url(/fake.css);' ], 'of an unknown file with extra whitespace': [ '@import url( /fake.css );', '@import url(/fake.css);' ], 'of comment chars within import url': [ '@import \'necolas/normalize.css@*/normalize.css\';', '@import url(necolas/normalize.css@*/normalize.css);' ] }, { inline: 'none' }) ) .addBatch( optimizerContext('@import with no import and no level 2', { 'empty body': [ '@import url(//fonts.googleapis.com/css?family=Domine:700);body{/* comment */}body h1{font-family:Domine}', '@import url(//fonts.googleapis.com/css?family=Domine:700);body h1{font-family:Domine}' ], 'no empty body': [ '@import url(//fonts.googleapis.com/css?family=Domine:700);body{color:red}body h1{font-family:Domine}', '@import url(//fonts.googleapis.com/css?family=Domine:700);body{color:red}body h1{font-family:Domine}' ] }, { inline: 'none', level: 1 }) ) .addBatch( optimizerContext('@import with no url', { 'matching too much': [ '@import url(test.css);@font-face{font-family:"icomoon"}', '@import url(test.css);@font-face{font-family:icomoon}' ] }, { inline: 'none' }) ) .addBatch( optimizerContext('@apply', { 'single @apply': [ 'a{@apply(--rule);}', 'a{@apply(--rule);}' ], 'multiple @apply': [ 'a{@apply(--rule1);@apply(--rule2);}', 'a{@apply(--rule1);@apply(--rule2);}' ], 'multiple @apply with some styling': [ 'a{@apply(--rule1);@apply(--rule2);color:red;display:block}', 'a{@apply(--rule1);@apply(--rule2);color:red;display:block}' ], 'multiple @apply with whitespace': [ 'a{' + lineBreak + '@apply(--rule1);' + lineBreak + ' @apply(--rule2);' + lineBreak + 'color:red;display:block}', 'a{@apply(--rule1);@apply(--rule2);color:red;display:block}' ], '@apply another rule within :root context': [ ':root{--layout:{display:flex};--layout-horizontal:{@apply(--layout);};}', ':root{--layout:{display:flex};--layout-horizontal:{@apply(--layout);};}' ] }) ) .addBatch( optimizerContext('duplicate selectors with disabled level 2 processing', { 'of a duplicate selector': [ 'a,a{color:red}', 'a{color:red}' ] }, { level: 1 }) ) .addBatch( optimizerContext('line breaks with disabled level 2 processing', { 'should be applied': [ 'a{color:red}p{display:block}', 'a{color:red}' + lineBreak + 'p{display:block}' ] }, { format: 'keep-breaks', level: 1 }) ) .addBatch( optimizerContext('invalid data tokenization', { 'extra top-level closing brace': [ 'a{color:red}}p{width:auto}', 'a{color:red}' ], 'extra top-level closing braces': [ 'a{color:red}}}}p{width:auto}', 'a{color:red}' ], 'SASS content': [ '.one{color:red;&:hover{color:#000}}', '.one{color:red}' ] }) ) .addBatch( optimizerContext('duplicate selectors in a list', { 'of a duplicate selector': [ 'a,a{color:red}', 'a{color:red}' ], 'of an unordered multiply repeated selector': [ 'a,b,p,a{color:red}', 'a,b,p{color:red}' ], 'of an unordered multiply repeated selector within a block': [ '@media screen{a,b,p,a{color:red}}', '@media screen{a,b,p{color:red}}' ], 'of an unordered multiply repeated complex selector within a block #1': [ '@media screen{.link[data-path],a,p,.link[data-path]{color:red}}', '@media screen{.link[data-path],a,p{color:red}}' ], 'of an unordered multiply repeated complex selector within a block #2': [ '@media screen{#foo[data-path^="bar bar"],a,p,#foo[data-path^="bar bar"]{color:red}}', '@media screen{#foo[data-path^="bar bar"],a,p{color:red}}' ] }) ) .addBatch( optimizerContext('rerun optimizers', { 'selectors reducible once': [ '.one{color:red;margin:0}.two{color:red}.one{margin:0}', '.one,.two{color:red}.one{margin:0}' ] }, { level: { 2: { restructureRules: true } } }) ) .addBatch( optimizerContext('units - IE8 compatibility', { 'rems': [ 'div{padding-top:15px;color:red;padding-top:1rem}', 'div{padding-top:15px;color:red;padding-top:1rem}' ] }, { compatibility: 'ie8' }) ) .addBatch( optimizerContext('redefined more granular properties with property merging', { 'should merge background with background-attachment': [ 'a{background:0;background-attachment:fixed}', 'a{background:0 fixed}' ], 'should NOT merge background with inherited background-attachment': [ 'a{background:0;background-attachment:inherit}', 'a{background:0;background-attachment:inherit}' ], 'should merge background with background-color': [ 'a{background:0;background-color:#9fce00}', 'a{background:0 #9fce00}' ], 'should NOT merge background with inherited background-color': [ 'a{background:0;background-color:inherit}', 'a{background:0;background-color:inherit}' ], 'should NOT merge background with background-color set to none': [ 'a{background:url(logo.png) center no-repeat;background-color:none}', 'a{background:url(logo.png) center no-repeat;background-color:none}' ], 'should merge background with background-image': [ 'a{background:0;background-image:url(hello_world)}', 'a{background:url(hello_world) 0}' ], 'should NOT merge background with inherited background-image': [ 'a{background:0;background-image:inherit}', 'a{background:0;background-image:inherit}' ], 'should merge background with background-position': [ 'a{background:0;background-position:3px 4px}', 'a{background:3px 4px}' ], 'should NOT merge background with inherited background-position': [ 'a{background:0;background-position:inherit}', 'a{background:0;background-position:inherit}' ], 'should merge background with background-repeat': [ 'a{background:0;background-repeat:repeat-y}', 'a{background:0 repeat-y}' ], 'should NOT merge background with inherited background-repeat': [ 'a{background:0;background-repeat:inherit}', 'a{background:0;background-repeat:inherit}' ], 'should merge outline with outline-color': [ 'a{outline:1px;outline-color:#9fce00}', 'a{outline:#9fce00 1px}' ], 'should NOT merge outline with inherited outline-color': [ 'a{outline:0;outline-color:inherit}', 'a{outline:0;outline-color:inherit}' ], 'should merge outline with outline-style': [ 'a{outline:0;outline-style:dashed}', 'a{outline:dashed 0}' ], 'should NOT merge outline with inherited outline-style': [ 'a{outline:0;outline-style:inherit}', 'a{outline:0;outline-style:inherit}' ], 'should merge outline with outline-width': [ 'a{outline:0;outline-width:5px}', 'a{outline:5px}' ], 'should NOT merge outline with inherited outline-width': [ 'a{outline:0;outline-width:inherit}', 'a{outline:0;outline-width:inherit}' ], 'should merge list-style with list-style-type': [ 'li{list-style-type:disc;list-style:inside}', 'li{list-style:inside}' ] }, { level: 2 }) ) .addBatch( optimizerContext('merging of rules', { 'rules without pseudo classes should be merged': [ 'a{color:red}b{color:red}', 'a,b{color:red}' ], 'rules with well-supported pseudo classes should be merged #1': [ 'a:focus{color:red}b{color:red}', 'a:focus,b{color:red}' ], 'rules with well-supported pseudo classes should be merged #2': [ 'a:nth-of-type(5){color:red}b{color:red}', 'a:nth-of-type(5),b{color:red}' ], 'rules with well-supported pseudo classes should be merged #3': [ 'a:first-of-type{color:red}b{color:red}', 'a:first-of-type,b{color:red}' ], 'rules with well-supported pseudo classes should be merged #4': [ 'a:first-child{color:red}b{color:red}', 'a:first-child,b{color:red}' ], 'rules with prefixed pseudo classes should not be merged #1': [ 'a:-moz-full-screen{color:red}b{color:red}', 'a:-moz-full-screen{color:red}b{color:red}' ], 'rules with prefixed pseudo classes should not be merged #2': [ 'a:-moz-dir(rtl){color:red}b{color:red}', 'a:-moz-dir(rtl){color:red}b{color:red}' ], 'rules with not-so-well-supported pseudo classes should not be merged #1': [ 'a:fullscreen{color:red}b{color:red}', 'a:fullscreen{color:red}b{color:red}' ], 'rules with not-so-well-supported pseudo classes should not be merged #2': [ 'a:dir(ltr){color:red}b{color:red}', 'a:dir(ltr){color:red}b{color:red}' ], 'rules with not-so-well-supported pseudo classes should not be merged #3': [ 'a:right{color:red}b{color:red}', 'a:right{color:red}b{color:red}' ], 'rules with not-so-well-supported pseudo classes should not be merged #4': [ 'a:first{color:red}b{color:red}', 'a:first{color:red}b{color:red}' ], 'rules with not-so-well-supported pseudo classes should not be merged #5': [ ':placeholder{color:red}b{color:red}', ':placeholder{color:red}b{color:red}' ], 'rules with not-so-well-supported pseudo classes should not be merged #6': [ ':selection{color:red}b{color:red}', ':selection{color:red}b{color:red}' ], 'rules with :host Polymer pseudo class should not be merged into': [ ':host{color:red}b{color:red}', ':host{color:red}b{color:red}' ], 'rules with ::content Polymer pseudo element should not be merged into': [ '.wrapper ::content a{color:red}b{color:red}', '.wrapper ::content a{color:red}b{color:red}' ], 'rules with /deep/ Polymer combinator not be merged into': [ '.wrapper /deep/ a{color:red}b{color:red}', '.wrapper /deep/ a{color:red}b{color:red}' ], 'rules with ::shadow Polymer combinator not be merged into': [ '.wrapper ::shadow a{color:red}b{color:red}', '.wrapper ::shadow a{color:red}b{color:red}' ] }, { level: 2 }) ) .addBatch( optimizerContext('grouping with level 2 optimizations', { '@-moz-document': [ '@-moz-document domain(mozilla.org){a{color:red}}', '@-moz-document domain(mozilla.org){a{color:red}}' ], '@media': [ '@media{a{color:red}}', '@media{a{color:red}}' ], '@page': [ '@page{margin:.5em}', '@page{margin:.5em}' ], '@page named': [ '@page :first{margin:.5em}', '@page :first{margin:.5em}' ], '@page named with page-margin box': [ '@page :first{margin:10px;@top-center{content:"Page One"}padding:5px}', '@page :first{margin:10px;@top-center{content:"Page One"}padding:5px}' ], '@supports': [ '@supports (display:flexbox){.flex{display:flexbox}}', '@supports (display:flexbox){.flex{display:flexbox}}' ], '@supports with quoted text': [ '@supports (font-feature-settings:"liga" 0){html{--font:"font-with-features",helvetica,sans-serif}}', '@supports (font-feature-settings:"liga" 0){html{--font:"font-with-features",helvetica,sans-serif}}' ], '@-ms-viewport': [ '@-ms-viewport{width:device-width}', '@-ms-viewport{width:device-width}' ], '@-o-viewport': [ '@-o-viewport{width:device-width}', '@-o-viewport{width:device-width}' ], '@viewport': [ '@viewport{width:device-width}', '@viewport{width:device-width}' ], '@counter-style': [ '@counter-style triangle{system:cyclic;symbols:‣;suffix:" "}', '@counter-style triangle{system:cyclic;symbols:‣;suffix:" "}' ] }, { level: 2 }) ) .addBatch( optimizerContext('background size', { 'with background-position': [ 'a{background:url(top.jpg) 50% 0/auto 25% no-repeat}', 'a{background:url(top.jpg) 50% 0/auto 25% no-repeat}' ], 'with background-position and spaces': [ 'a{background:url(top.jpg) 50% 0 / auto 25% no-repeat}', 'a{background:url(top.jpg) 50% 0/auto 25% no-repeat}' ], 'with background-position shorthands': [ 'a{background:url(top.jpg) 50px/25% no-repeat}', 'a{background:url(top.jpg) 50px/25% no-repeat}' ], 'with background-position shorthands and spaces': [ 'a{background:url(top.jpg) 0 / cover no-repeat}', 'a{background:url(top.jpg) 0/cover no-repeat}' ], 'with background-size property': [ 'a{background:none;background-image:url(1.png);background-size:28px 28px}', 'a{background:url(1.png) 0 0/28px 28px}' ] }, { level: 2 }) ) .addBatch( optimizerContext('background position', { 'calc as a value': [ '*{background:white calc(100% - 10px) center no-repeat;background-image:url(test.png)}', '*{background:calc(100% - 10px) center no-repeat #fff;background-image:url(test.png)}' ] }, { level: 2 }) ) .addBatch( optimizerContext('background-clip', { 'inside background shorthand': [ 'div{background:content-box #000}', 'div{background:content-box #000}' ] }, { level: 2 }) ) .addBatch( optimizerContext('background size with +properties.backgroundSizeMerging', { 'with background-size property': [ 'a{background:none;background-image:url(1.png);background-size:28px 28px}', 'a{background:url(1.png) 0 0/28px 28px}' ], 'important overriding': [ 'a{background:url(a.jpg) !important; background-color:#fff !important; background-size:10px 10px !important}', 'a{background:url(a.jpg) 0 0/10px 10px #fff!important}' ] }, { level: 2, compatibility: '+properties.backgroundSizeMerging' }) ) .addBatch( optimizerContext('multiple backgrounds', { 'should not produce longer values': [ 'p{background:no-repeat;background-position:100% 0,0 100%,100% 100%,50% 50%}', 'p{background:no-repeat;background-position:100% 0,0 100%,100% 100%,50% 50%}' ] }, { level: 2 }) ) .addBatch( optimizerContext('misc level 2', { 'outline auto': [ 'a{outline:5px auto -webkit-focus-ring-color}', 'a{outline:-webkit-focus-ring-color auto 5px}' ], 'border radius side H+V': [ 'a{border-top-left-radius:2em / 1em}', 'a{border-top-left-radius:2em/1em}' ], 'border radius expanded H+V': [ 'a{border-radius:1em 1em 1em 1em / 2em 2em 2em 2em}', 'a{border-radius:1em/2em}' ], 'border radius expanded H+V with mixed values #1': [ 'a{border-radius:1em 2em 1em 2em / 1em 2em 3em 2em}', 'a{border-radius:1em 2em/1em 2em 3em}' ], 'border radius expanded H+V with mixed values #2': [ 'a{border-radius:1em/1em 1em 1em 2em}', 'a{border-radius:1em/1em 1em 1em 2em}' ], 'border radius H+V': [ 'a{border-radius:50%/100%}', 'a{border-radius:50%/100%}' ], 'lost background position': [ '.one{background:50% no-repeat}.one{background-image:url(/img.png)}', '.one{background:url(/img.png) 50% no-repeat}' ], 'unknown @ rule': [ '@unknown "test";h1{color:red}', '@unknown "test";h1{color:red}' ], 'property without a value': [ 'a{color:}', '' ], 'properties without values': [ 'a{padding:;border-radius: ;background:red}', 'a{background:red}' ] }, { level: 2 }) ) .addBatch( optimizerContext('level 2 in ie8 mode', { 'plain component to complex shorthand': [ 'a{background:linear-gradient(to bottom,#000,#fff 4em) #000;background-color:#fff}', 'a{background:linear-gradient(to bottom,#000,#fff 4em) #000;background-color:#fff}' ], 'plain component to shorthand': [ 'a{background:url(bg.png) #000;background-color:#fff}', 'a{background:url(bg.png) #fff}' ], 'merging rgba with standard colors': [ 'div{background-color:red;background:rgba(1,2,3,.5)}', 'div{background-color:red;background:rgba(1,2,3,.5)}' ] }, { compatibility: 'ie8', level: 2 }) ) .addBatch( optimizerContext('viewport units', { 'shorthand margin with viewport width not changed': [ 'div{margin:5vw}', 'div{margin:5vw}' ] }) ) .addBatch( optimizerContext('variables - level 1', { 'whitespace inside definition #1': [ 'a{--border:var(\n--default-border\n\n)}', 'a{--border:var(--default-border)}' ], 'whitespace inside definition #2': [ 'a{--border:1px solid var(\n--default-color\n\n)}', 'a{--border:1px solid var(--default-color)}' ], 'whitespace inside declarations': [ 'a{--border:#000}.one{border:1px solid var(\n--border\n)}', 'a{--border:#000}.one{border:1px solid var(--border)}' ], 'more complex case': [ '.alert--primary{--ifm-alert-background-color:var(\n --ifm-color-primary-contrast-background\n );--ifm-alert-background-color-highlight:rgba(53, 120, 229, 0.15);--ifm-alert-foreground-color:var(\n --ifm-color-primary-contrast-foreground\n );--ifm-alert-border-color:var(--ifm-color-primary-dark)}', '.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53, 120, 229, 0.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}' ] }) ) .addBatch( optimizerContext('variables - level 2', { 'stripping': [ 'a{--border:#000}.one{border:1px solid var(--border)}', 'a{--border:#000}.one{border:1px solid var(--border)}' ], 'whitespace inside declarations': [ 'a{--border:#000}.one{border:1px solid var(\n--border\n)}', 'a{--border:#000}.one{border:1px solid var(--border)}' ], 'all values': [ 'a{--width:1px;--style:solid;--color:#000}.one{border:var(--width)var(--style)var(--color)}', 'a{--width:1px;--style:solid;--color:#000}.one{border:var(--width) var(--style) var(--color)}' ], 'Polymer mixins - simple optimizations': [ 'a{ display:block; --my-toolbar: { color:#f00; width:96px }; color:blue}', 'a{display:block;--my-toolbar:{color:red;width:96px};color:#00f}' ], 'Polymer mixins - override optimizations': [ 'a{--my-toolbar: { margin:15px!important; margin:10px};}', 'a{--my-toolbar:{margin:15px!important};}' ], 'Polymer mixins - shorthand optimizations': [ 'a{--my-toolbar: { margin:10px; margin-top:10px };}', 'a{--my-toolbar:{margin:10px};}' ], 'Polymer mixins - inlined variables': [ '.spinner{-webkit-animation:container-rotate var(--paper-spinner-container-rotation-duration) linear infinite}', '.spinner{-webkit-animation:container-rotate var(--paper-spinner-container-rotation-duration) linear infinite}' ], 'comments #1': [ '.test {--tw-blur: var(--tw-empty,/*!*/ /*!*/);}', '.test{--tw-blur:var(--tw-empty,/*!*/ /*!*/)}' ], 'comments #2': [ '.test {--tw-blur: var(--tw-empty,/*!*/ /*!*/);display: block}', '.test{--tw-blur:var(--tw-empty,/*!*/ /*!*/);display:block}' ], 'comments #3': [ '.test {--tw-blur: var(--tw-empty,/*!*/ /*!*/);color:hsl(0, 1%, 99%)}', '.test{--tw-blur:var(--tw-empty,/*!*/ /*!*/);color:#fcfcfc}' ], 'comments #4': [ ':root{/* Site container */--a:20px;/* Z indices for modals and dialogs */--foo:5050}.bar{z-index:5050;z-index:var(--foo)}', ':root{--a:20px;--foo:5050}.bar{z-index:5050;z-index:var(--foo)}' ], 'comments #5': [ ':host{/* this will stay */--this_will_stay: 1;/* this will disappear */--this_will_disappear: 1;/* this will also disappear */--this_will_also_disappear: 1;--this_will_stay_aswell: 1;--this_will_stay_too: 1;width: 1px;height: 1px}', ':host{--this_will_stay:1;--this_will_disappear:1;--this_will_also_disappear:1;--this_will_stay_aswell:1;--this_will_stay_too:1;width:1px;height:1px}' ] }, { level: 2 }) ) .addBatch( optimizerContext('beautify formatting', { 'rule': [ 'a{color:red}', 'a {' + lineBreak + ' color: red' + lineBreak + '}' ], 'rule with fancy selector': [ '.block[data-col~="5th"]{color:red}', '.block[data-col~="5th"] {' + lineBreak + ' color: red' + lineBreak + '}' ], 'rules': [ 'a{color:red}p{color:#000;width:100%}', 'a {' + lineBreak + ' color: red' + lineBreak + '}' + lineBreak + 'p {' + lineBreak + ' color: #000;' + lineBreak + ' width: 100%' + lineBreak + '}' ], 'multi-scope rule': [ 'a,div{color:red}', 'a,' + lineBreak + 'div {' + lineBreak + ' color: red' + lineBreak + '}' ], 'relation rule': [ '.one>.two{color:red}', '.one > .two {' + lineBreak + ' color: red' + lineBreak + '}' ], 'at rule block': [ '@font-face{font-family:test;src:url(/fonts/test.woff)}', '@font-face {' + lineBreak + ' font-family: test;' + lineBreak + ' src: url(/fonts/test.woff)' + lineBreak + '}' ], 'nested rule block': [ '@media screen{a{color:red}}', '@media screen {' + lineBreak + ' a {' + lineBreak + ' color: red' + lineBreak + ' }' + lineBreak + '}' ], 'nested rule block rules': [ '@media screen{a{color:red}div{color:#000}}', '@media screen {' + lineBreak + ' a {' + lineBreak + ' color: red' + lineBreak + ' }' + lineBreak + ' div {' + lineBreak + ' color: #000' + lineBreak + ' }' + lineBreak + '}' ], 'variable': [ 'a{--my-toolbar:{margin:10px;padding:10px};}', 'a {' + lineBreak + ' --my-toolbar: {' + lineBreak + ' margin: 10px;' + lineBreak + ' padding: 10px' + lineBreak + ' };' + lineBreak + '}' ], 'variable and rules': [ 'a{--my-toolbar:{margin:10px;padding:10px};color:red}', 'a {' + lineBreak + ' --my-toolbar: {' + lineBreak + ' margin: 10px;' + lineBreak + ' padding: 10px' + lineBreak + ' };' + lineBreak + ' color: red' + lineBreak + '}' ], 'at-rule and rules': [ 'a{display:block;@apply(--rule1);color:red}', 'a {' + lineBreak + ' display: block;' + lineBreak + ' @apply(--rule1);' + lineBreak + ' color: red' + lineBreak + '}' ], 'inside quoted text': [ '.block::before{content:"\\"()"}', '.block::before {' + lineBreak + ' content: "\\"()"' + lineBreak + '}' ] }, { format: 'beautify' }) ) .addBatch( optimizerContext('beautify formatting with last semicolon on', { 'keeps semicolon': [ '.block{margin-top:1em;margin-bottom:1em;}', '.block {' + lineBreak + ' margin-top: 1em;' + lineBreak + ' margin-bottom: 1em;' + lineBreak + '}' ] }, { format: { breaks: { afterAtRule: true, afterBlockBegins: true, afterBlockEnds: true, afterComment: true, afterProperty: true, afterRuleBegins: true, afterRuleEnds: true, beforeBlockEnds: true, betweenSelectors: true }, indentBy: 2, spaces: { aroundSelectorRelation: true, beforeBlockBegins: true, beforeValue: true }, semicolonAfterLastProperty: true } }) ) .addBatch( optimizerContext('beautify formatting with comments', { 'adds line break after comment inside property': [ '.block{/*! Comment 1 *//*! Comment 2 */margin-top:1em;margin-bottom:1em}', '.block {' + lineBreak + ' /*! Comment 1 */' + lineBreak + ' /*! Comment 2 */' + lineBreak + ' margin-top: 1em;' + lineBreak + ' margin-bottom: 1em' + lineBreak + '}' ], 'adds line break after comment inside nested block': [ '@media screen{/*! Comment 1 */.block{/*! Comment 2 */margin-top:1em;margin-bottom:1em}}', '@media screen {' + lineBreak + ' /*! Comment 1 */' + lineBreak + ' .block {' + lineBreak + ' /*! Comment 2 */' + lineBreak + ' margin-top: 1em;' + lineBreak + ' margin-bottom: 1em' + lineBreak + ' }' + lineBreak + '}' ] }, { format: 'beautify' }) ) .addBatch( optimizerContext('custom formatting', { 'rule': [ 'a{color:red}', 'a{' + lineBreak + '\tcolor:red' + lineBreak + '}' ], 'at rule block': [ '@font-face{font-family:test;src:url(/fonts/test.woff)}', '@font-face{' + lineBreak + '\tfont-family:test;' + lineBreak + '\tsrc:url(/fonts/test.woff)' + lineBreak + '}' ], 'nested rule block rules': [ '@media screen{a{color:red}div{color:#000}}', '@media screen{' + lineBreak + '\ta{' + lineBreak + '\t\tcolor:red' + lineBreak + '\t}\tdiv{' + lineBreak + '\t\tcolor:#000' + lineBreak + '\t}' + lineBreak + '}' ] }, { format: { breaks: { afterBlockBegins: true, afterProperty: true, afterRuleBegins: true, beforeBlockEnds: true }, indentWith: 'tab', indentBy: 1 } }) ) .addBatch( optimizerContext('custom formatting with break numbers', { 'rule': [ 'a{color:red}', 'a{' + lineBreak + '\tcolor:red' + lineBreak + '}' ], 'at rule block': [ '@font-face{font-family:test;src:url(/fonts/test.woff)}', '@font-face{' + lineBreak + '\tfont-family:test;' + lineBreak + '\tsrc:url(/fonts/test.woff)' + lineBreak + '}' ], 'nested rule block rules': [ '@media screen{a{color:red}div{color:#000}}', '@media screen{' + lineBreak + '\ta{' + lineBreak + '\t\tcolor:red' + lineBreak + '\t}' + lineBreak + lineBreak + '\tdiv{' + lineBreak + '\t\tcolor:#000' + lineBreak + '\t}' + lineBreak + lineBreak + '}' ] }, { format: { breaks: { afterBlockBegins: 1, afterProperty: 1, afterRuleBegins: '1', afterRuleEnds: '2', beforeBlockEnds: 2 }, indentWith: 'tab', indentBy: 1 } }) ) .addBatch( optimizerContext('max line length', { 'not too long': [ 'a{color:red}', 'a{color:red}' ], 'too long': [ '.spinner{-webkit-animation:container-rotate var(--paper-spinner-container-rotation-duration) linear infinite}div{background:url(/very/long/path/to/image.png) repeat}', '.spinner{-webkit-animation:container-rotate ' + lineBreak + 'var(--paper-spinner-container-rotation-duration) linear infinite}div{background:' + lineBreak + 'url(/very/long/path/to/image.png) repeat}' ] }, { format: { wrapAt: 80 } }) ) .addBatch( optimizerContext('max line length with source maps', { 'not too long': [ 'a{color:red}', 'a{color:red}' ], 'too long': [ '.spinner{-webkit-animation:container-rotate var(--paper-spinner-container-rotation-duration) linear infinite}div{background:url(/very/long/path/to/image.png) repeat}', '.spinner{-webkit-animation:container-rotate ' + lineBreak + 'var(--paper-spinner-container-rotation-duration) linear infinite}div{background:' + lineBreak + 'url(/very/long/path/to/image.png) repeat}' ] }, { format: { wrapAt: 80 }, sourceMap: true }) ) .addBatch( optimizerContext('SVG properties', { 'are kept #1': [ 'node:hover circle{r:18;stroke:orange}', 'node:hover circle{r:18;stroke:orange}' ], 'are kept #2': [ 'node:hover circle{rx:18;stroke:orange}', 'node:hover circle{rx:18;stroke:orange}' ] }) ) .export(module); clean-css-5.3.3/test/module-test.js 0000664 0000000 0000000 00000134560 14532047255 0017171 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var path = require('path'); var fs = require('fs'); var CleanCSS = require('../index'); var SourceMapGenerator = require('source-map').SourceMapGenerator; function sourcesAsHash(sources, resolve) { var inputHash = {}; sources.forEach(function (source) { source = resolve ? path.resolve(source) : source; inputHash[source] = { styles: fs.readFileSync(source, 'utf-8') }; }); return inputHash; } vows.describe('module tests').addBatch({ 'imported as a function': { topic: function () { var css = new CleanCSS(); return css.minify.bind(css); }, 'should minify CSS correctly': function (minify) { assert.equal(minify('a{ color: #f00; }').styles, 'a{color:red}'); } }, 'extended via prototype': { topic: function () { CleanCSS.prototype.foo = function (data, callback) { callback(null, this.minify(data)); }; new CleanCSS().foo('a{ color: #f00; }', this.callback); }, 'should minify CSS correctly': function (error, minified) { assert.equal(minified.styles, 'a{color:red}'); }, teardown: function () { delete CleanCSS.prototype.foo; } }, 'with callback passed and no errors': { topic: function () { new CleanCSS().minify('a{color:#f00}', this.callback); }, 'should not set context': function () { assert.equal(this instanceof CleanCSS, false); }, 'should yield no error': function (errors, minified) { /* jshint unused: false */ assert.isNull(errors); }, 'should yield minified data': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); } }, 'with callback passed and one error': { topic: function () { new CleanCSS().minify('@import "missing.css";', this.callback); }, 'should yield no error and minify': function (errors, minified) { /* jshint unused: false */ assert.lengthOf(errors, 1); } }, 'with callback passed to remote import': { topic: function () { new CleanCSS({ inline: 'local' }).minify('@import url(https://fonts.googleapis.com/css?family=Open+Sans);', this.callback); }, 'should yield no error and minify': function (errors, minified) { assert.equal(minified.styles, '@import url(https://fonts.googleapis.com/css?family=Open+Sans);'); } }, 'with promise returned and no callback': { 'topic': function () { new CleanCSS({ returnPromise: true }) .minify('.block{color:#f00}') .then(this.callback.bind(null, null)); }, 'should yield output': function (errors, output) { assert.equal(output.styles, '.block{color:red}'); } }, 'with promise returned and callback': { 'topic': function () { new CleanCSS({ returnPromise: true }) .minify('.block{color:#f00}', function () { throw new Error('should not get here!'); }) .then(this.callback.bind(null, null)); }, 'should yield output': function (errors, output) { assert.equal(output.styles, '.block{color:red}'); } }, 'with promise and error': { 'topic': function () { var vow = this; new CleanCSS({ returnPromise: true }) .minify('@import "missing.css";') .then(function (output) { vow.callback(null, output); }) .catch(function (errors) { vow.callback(errors, null); }); }, 'should catch error': function (errors, result) { /* jshint unused: false */ assert.lengthOf(errors, 1); assert.equal(errors[0], 'Ignoring local @import of "missing.css" as resource is missing.'); } }, 'debug info': { 'topic': function () { return new CleanCSS().minify('a{ color: #f00 }'); }, 'should give time taken': function (error, minified) { assert.isNumber(minified.stats.timeSpent); }, 'should give original size': function (error, minified) { assert.equal(minified.stats.originalSize, 16); }, 'should give minified size': function (error, minified) { assert.equal(minified.stats.minifiedSize, 12); }, 'should give efficiency': function (error, minified) { assert.equal(minified.stats.efficiency, 0.25); } }, 'no warnings': { 'topic': function () { return new CleanCSS().minify('a{ color: #f00 }'); }, 'if no reasons given': function (error, minified) { assert.isEmpty(minified.warnings); } }, 'warnings on missing explicit `rebaseTo`': { 'topic': function () { return new CleanCSS({rebase: true}).minify('@import url(test/fixtures/partials/with-commented-import.css);'); }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, '@font-face{font-family:Font;src:url("/path/to/font")}'); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise one warning': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.isTrue(minified.warnings[0].indexOf('`rebaseTo: process.cwd()`') > -1); } }, 'warnings on extra closing brace': { 'topic': function () { return new CleanCSS().minify('a{display:block}}'); }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, 'a{display:block}'); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise one warning': function (error, minified) { assert.lengthOf(minified.warnings, 2); assert.equal(minified.warnings[0], 'Unexpected \'}\' at 1:16.'); assert.equal(minified.warnings[1], 'Invalid character(s) \'}\' at 1:16. Ignoring.'); } }, 'warnings on unexpected body': { 'topic': function () { return new CleanCSS().minify('a{display:block}color:#535353}p{color:red}'); }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, 'a{display:block}'); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise one warning': function (error, minified) { assert.lengthOf(minified.warnings, 2); assert.equal(minified.warnings[0], 'Unexpected \'}\' at 1:29.'); assert.equal(minified.warnings[1], 'Invalid selector \'color:#535353}p\' at 1:16. Ignoring.'); } }, 'warning on invalid property': { 'topic': function () { return new CleanCSS().minify('a{-webkit-:0px}'); }, 'should minify correctly': function (error, minified) { assert.isEmpty(minified.styles); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise one warning': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.equal(minified.warnings[0], 'Invalid property name \'-webkit-\' at 1:2. Ignoring.'); } }, 'warnings on empty properties': { 'topic': function () { return new CleanCSS().minify('a{color:}'); }, 'should minify correctly': function (error, minified) { assert.isEmpty(minified.styles); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise one warning': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.equal(minified.warnings[0], 'Empty property \'color\' at 1:2. Ignoring.'); } }, 'warnings on broken urls': { 'topic': function () { return new CleanCSS().minify('a{background:url(image/}'); }, 'should output correct content': function (error, minified) { assert.equal(minified.styles, ''); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors.length); }, 'should raise one warning': function (error, minified) { assert.lengthOf(minified.warnings, 2); assert.equal(minified.warnings[0], 'Missing \'}\' at 1:24.'); assert.equal(minified.warnings[1], 'Broken URL \'url(image/\' at 1:13. Ignoring.'); } }, 'no errors': { 'topic': function () { return new CleanCSS().minify('a{color:red}'); }, 'if no reasons given': function (error, minified) { assert.isEmpty(minified.errors); } }, 'errors': { 'topic': function () { return new CleanCSS(); }, 'if a file is missing': function (minifier) { assert.doesNotThrow(function () { minifier.minify('@import url(/some/fake/file);', function (errors) { assert.isArray(errors); assert.lengthOf(errors, 1); assert.equal(errors[0], 'Ignoring local @import of "/some/fake/file" as resource is missing.'); }); }); } }, 'errors when re-running minification': { 'topic': function () { return new CleanCSS(); }, 'if file is missing': function (minifier) { minifier.minify('@import url(/some/fake/file);'); minifier.minify('@import url(/some/fake/file);', function (errors) { assert.lengthOf(errors, 1); assert.equal(errors[0], 'Ignoring local @import of "/some/fake/file" as resource is missing.'); }); } }, 'error on broken imports': { 'topic': function () { return new CleanCSS().minify('@import test;'); }, 'should output correct content': function (error, minified) { assert.isEmpty(minified.styles); }, 'should raise no warnings': function (error, minified) { assert.isEmpty(minified.warnings.length); }, 'should raise one error': function (error, minified) { assert.lengthOf(minified.errors, 1); assert.equal(minified.errors[0], 'Ignoring local @import of "test" as resource is missing.'); } }, 'local imports': { 'inside a comment preceding a quote': { 'topic': function () { new CleanCSS().minify('@import "test/fixtures/partials/with-commented-import.css";', this.callback); }, 'has right output': function (errors, minified) { assert.equal(minified.styles, '@font-face{font-family:Font;src:url("/path/to/font")}'); } } }, 'external imports and no callback': { 'without content': { 'topic': function () { return new CleanCSS().minify('@import url(http://clean-css.github.io/styles.css);'); }, 'has right output': function (minified) { assert.equal(minified.styles, '@import url(http://clean-css.github.io/styles.css);'); }, 'has no errors': function (minified) { assert.isEmpty(minified.errors); }, 'has a warning': function (minified) { assert.deepEqual(minified.warnings, ['Skipping remote @import of "http://clean-css.github.io/styles.css" as no callback given.']); } }, 'after content': { 'topic': function () { return new CleanCSS().minify('a{color:red}@import url(http://clean-css.github.io/styles.css);'); }, 'has right output': function (minified) { assert.equal(minified.styles, 'a{color:red}'); }, 'has no errors': function (minified) { assert.isEmpty(minified.errors); }, 'has a warning': function (minified) { assert.deepEqual(minified.warnings, ['Ignoring remote @import of "http://clean-css.github.io/styles.css" as no callback given and after other content.']); } }, 'after local import': { 'topic': function () { return new CleanCSS().minify('@import url(test/fixtures/partials/one.css);@import url(http://clean-css.github.io/styles.css);'); }, 'has right output': function (minified) { assert.equal(minified.styles, '.one{color:red}'); }, 'has no errors': function (minified) { assert.isEmpty(minified.errors); }, 'has a warning': function (minified) { assert.deepEqual(minified.warnings, ['Skipping remote @import of "http://clean-css.github.io/styles.css" as no callback given.']); } }, 'after remote import': { 'topic': function () { return new CleanCSS().minify('@import url(http://clean-css.github.io/reset.css);@import url(http://clean-css.github.io/styles.css);'); }, 'has right output': function (minified) { assert.equal(minified.styles, '@import url(http://clean-css.github.io/reset.css);@import url(http://clean-css.github.io/styles.css);'); }, 'has no errors': function (minified) { assert.isEmpty(minified.errors); }, 'has a warning': function (minified) { assert.deepEqual(minified.warnings, [ 'Skipping remote @import of "http://clean-css.github.io/reset.css" as no callback given.', 'Skipping remote @import of "http://clean-css.github.io/styles.css" as no callback given.' ]); } } }, 'buffer passed in': { 'topic': function () { return new CleanCSS().minify(Buffer.from('@import url(test/fixtures/partials/one.css);')); }, 'should be processed correctly': function (minified) { assert.equal(minified.styles, '.one{color:red}'); } }, 'utf-8 bom': { 'topic': function () { return new CleanCSS().minify(['test/fixtures/utf8-bom/utf8-bom.css']); }, 'should be processed correctly': function (error, minified) { assert.equal(minified.styles, 'body{color:red}li,p,ul{margin:0;padding:0}h1{font-size:16px}p{font-size:14px}'); } }, 'options': { 'level 2': { 'topic': function () { return new CleanCSS({ level: 2 }).minify('a{color:red}a{color:#fff}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{color:#fff}'); } }, 'process import': { 'topic': function () { return new CleanCSS({ inline: 'all' }).minify('@import url(/test/fixtures/partials/one.css);'); }, 'gets right output': function (minified) { assert.equal(minified.styles, '.one{color:red}'); } }, 'rebase': { 'topic': function () { return new CleanCSS({ rebase: true, rebaseTo: path.join('test') }).minify('div{background:url(dummy.png)}'); }, 'gets right output': function (minified) { assert.include(minified.styles, 'url(../dummy.png)'); } }, 'restructuring - on': { 'topic': function () { new CleanCSS({ level: { 2: { restructureRules: true } } }).minify('div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}', this.callback); }, 'gets right output': function (minified) { assert.equal(minified.styles, '.two,div{margin-top:0}.one{margin:0}.two{display:block}'); } }, 'restructuring - off': { 'topic': function () { return new CleanCSS({ level: { 2: { restructureRules: false } } }).minify('div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'); } }, 'semantic merging - off': { 'topic': function () { return new CleanCSS().minify('.a{margin:0}.b{margin:10px;padding:0}.c{margin:0}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, '.a{margin:0}.b{margin:10px;padding:0}.c{margin:0}'); } }, 'semantic merging - on': { 'topic': function () { return new CleanCSS({ level: { 2: { mergeSemantically: true } } }).minify('.a{margin:0}.b{margin:10px;padding:0}.c{margin:0}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, '.a,.c{margin:0}.b{margin:10px;padding:0}'); } } }, 'source map': { 'topic': function () { return new CleanCSS({ sourceMap: true }).minify('/*! a */div[data-id=" abc "] { color:red; }'); }, 'should minify correctly': function (minified) { assert.equal(minified.styles, '/*! a */div[data-id=" abc "]{color:red}'); }, 'should include source map': function (minified) { assert.instanceOf(minified.sourceMap, SourceMapGenerator); } }, 'arbitrary property transformations now via plugins (since 5.0)': { 'allows changing property value': { 'topic': function () { return new CleanCSS({ plugins: [ { level1: { value: function (propertyName, propertyValue) { if (propertyName == 'background-image' && propertyValue.indexOf('/path/to') > -1) { return propertyValue.replace('/path/to', '../valid/path/to'); } else { return propertyValue; } } } } ] }).minify('.block{background-image:url(/path/to/image.png);border-image:url(image.png)}'); }, 'gives right output': function (error, output) { assert.equal(output.styles, '.block{background-image:url(../valid/path/to/image.png);border-image:url(image.png)}'); } }, 'allows dropping properties': { 'topic': function () { return new CleanCSS({ plugins: [ { level1: { property: function (_rule, property) { if (property.name.indexOf('-o-') === 0) { property.unused = true; } } } } ] }).minify('.block{-o-border-radius:2px;border-image:url(image.png)}'); }, 'gives right output': function (error, output) { assert.equal(output.styles, '.block{border-image:url(image.png)}'); } }, 'allows dropping properties based on selector': { 'topic': function () { return new CleanCSS({ plugins: [ { level1: { property: function (rule, property) { if (rule == '.block-2' && property.name.indexOf('-o-') === 0) { property.unused = true; } } } } ] }).minify('.block-1{-o-border-radius:2px}.block-2{-o-border-radius:5px;width:1rem}'); }, 'gives right output': function (error, output) { assert.equal(output.styles, '.block-1{-o-border-radius:2px}.block-2{width:1rem}'); } }, 'combined with level 2 optimization': { 'topic': function () { return new CleanCSS({ plugins: [ { level1: { property: function (_rule, property) { if (property.name == 'margin-bottom') { property.unused = true; } } } } ], level: { 2: true } }).minify('.block{-o-border-radius:2px;margin:0 12px;margin-bottom:5px}'); }, 'drops property before level 2 optimizations': function (error, output) { assert.equal(output.styles, '.block{-o-border-radius:2px;margin:0 12px}'); } } }, 'accepts a list of source files as array': { 'relative': { 'with rebase to the current directory': { 'topic': function () { return new CleanCSS({ rebase: true }).minify([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'with rebase to a custom directory': { 'topic': function () { return new CleanCSS({ rebaseTo: path.join('test', 'fixtures') }).minify([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } }, 'without rebase': { 'topic': function () { return new CleanCSS().minify([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(extra/down.gif)}'); } } }, 'absolute': { 'with rebase to the current directory': { 'topic': function () { return new CleanCSS({ rebase: true }).minify([ path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css') ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'with rebase to a custom directory': { 'topic': function () { return new CleanCSS({ rebaseTo: path.join('test', 'fixtures') }).minify([ path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css') ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } }, 'without rebase': { 'topic': function () { return new CleanCSS().minify([ path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css') ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(extra/down.gif)}'); } } }, 'with imports': { 'off - one file': { 'topic': function () { return new CleanCSS({ inline: 'none' }).minify(['./test/fixtures/partials/two.css']); }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two{color:#fff}'); } }, 'off - with false alias': { 'topic': function () { return new CleanCSS({ inline: false }).minify(['./test/fixtures/partials/two.css']); }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two{color:#fff}'); } }, 'off - many files': { 'topic': function () { return new CleanCSS({ inline: 'none' }).minify(['./test/fixtures/partials/remote.css', './test/fixtures/partials-absolute/base.css']); }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(http://clean-css.github.io/styles.css);@import url(test/fixtures/partials-absolute/extra/sub.css);.base{margin:0}'); } }, 'off - many files with content': { 'topic': function () { return new CleanCSS({ inline: 'none' }).minify(['./test/fixtures/partials/two.css', './test/fixtures/partials-absolute/base.css']); }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two{color:#fff}.base{margin:0}'); } }, 'and rules after': { 'topic': function () { return new CleanCSS().minify(['./test/fixtures/partials/two.css', './test/fixtures/partials-absolute/base.css']); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}.base2{border-width:0}.sub{padding:0}.base{margin:0}'); } } }, 'with spaces in filename': { 'topic': function () { return new CleanCSS().minify(['./test/fixtures/partials/with spaces in filename.css']); }, 'gives right output': function (minified) { assert.equal(minified.styles, '.block{color:red}'); } }, 'absolute of missing resource': { 'topic': function () { return new CleanCSS().minify(['z:\\missing.css']); }, 'gives right error': function (minified) { if (process.platform == 'win32') { assert.deepEqual(minified.errors, ['Ignoring local @import of "z:/missing.css" as resource is missing.']); } } } }, 'accepts a list of source files as array in batch mode': { 'with rebase to the current directory': { 'topic': function () { return new CleanCSS({ batch: true, rebase: true, rebaseTo: process.cwd() }).minify([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]); }, 'output should be a hash': function (minified) { assert.equal(typeof minified, 'object'); }, 'output should have input files as keys': function (minified) { assert.isTrue('test/fixtures/partials/one.css' in minified); assert.isTrue('test/fixtures/partials/three.css' in minified); }, 'output of first file should be in the first item': function (minified) { assert.equal(minified['test/fixtures/partials/one.css'].styles, '.one{color:red}'); assert.deepEqual(minified['test/fixtures/partials/one.css'].errors, []); assert.deepEqual(minified['test/fixtures/partials/one.css'].warnings, []); }, 'output of second file should be in the second item': function (minified) { assert.equal(minified['test/fixtures/partials/three.css'].styles, '.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); assert.deepEqual(minified['test/fixtures/partials/three.css'].errors, []); assert.deepEqual(minified['test/fixtures/partials/three.css'].warnings, []); } } }, 'accepts a list of source files as hash': { 'relative': { 'with rebase to the current directory': { 'topic': function () { return new CleanCSS({ rebase: true }).minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'with rebase to a custom directory': { 'topic': function () { return new CleanCSS({ rebaseTo: path.join('test', 'fixtures') }).minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } }, 'without rebase': { 'topic': function () { return new CleanCSS().minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(extra/down.gif)}'); } } }, 'absolute': { 'with rebase to the current directory': { 'topic': function () { return new CleanCSS({ rebase: true }).minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ], true) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'with rebase to a custom directory': { 'topic': function () { return new CleanCSS({ rebaseTo: path.join('test', 'fixtures') }).minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ], true) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } }, 'without rebase': { 'topic': function () { return new CleanCSS().minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ], true) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(extra/down.gif)}'); } }, 'without reading from disk': { 'topic': function () { var inputHash = {}; var currentPath = path.resolve('.'); // intentionally different from real files to figure out if files are read off disk inputHash[currentPath + '/test/fixtures/partials/one.css'] = { styles: '.block{color:#f00}' }; inputHash[currentPath + '/test/fixtures/partials/three.css'] = { styles: '@import url(one.css);' }; return new CleanCSS().minify(inputHash); }, 'gives right output': function (output) { assert.equal(output.styles, '.block{color:red}'); } } }, 'with other imports': { 'topic': function () { return new CleanCSS().minify( sourcesAsHash([ 'test/fixtures/partials/two.css' ]) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}'); } }, 'with other imports and rebasing off': { 'topic': function () { return new CleanCSS().minify( sourcesAsHash([ 'test/fixtures/partials/two.css' ]) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}'); } }, 'with other imports and processing imports off': { 'relative': { 'topic': function () { return new CleanCSS({ inline: 'none' }).minify( sourcesAsHash([ 'test/fixtures/partials/two.css' ]) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two{color:#fff}'); } }, 'absolute': { 'topic': function () { return new CleanCSS({ inline: 'none' }).minify( sourcesAsHash([ 'test/fixtures/partials/two.css' ], true) ); }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two{color:#fff}'); } } }, 'with a callback': { 'topic': function () { new CleanCSS({ rebase: true }).minify({ 'main.css': { styles: '@import url(test/fixtures/partials/one.css);\n@import url(test/fixtures/partials/three.css);' } }, this.callback); }, 'should give right output': function (error, minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'with remote paths': { 'topic': function() { return new CleanCSS({rebase: true}).minify({ 'http://127.0.0.1/styles.css': { styles: 'div{background-image:url(image.png)}' } }); }, 'gives right output': function (minified) { assert.equal(minified.styles, 'div{background-image:url(http://127.0.0.1/image.png)}'); } }, 'with already resolved imports': { 'topic': function () { new CleanCSS({ level: 1, inline: 'all' }).minify({ 'main.css': { styles: '@import url(test/fixtures/partials/one.css);\n@import url(http://127.0.0.1/test.css);' }, 'test/fixtures/partials/one.css': { styles: '.one { background-color:#f00; }' }, 'http://127.0.0.1/test.css': { styles: '.test { color: #000 }' } }, this.callback); }, 'gives right output without reading resources': function (minified) { assert.equal(minified.styles, '.one{background-color:red}.test{color:#000}'); } }, 'with mixed-style paths': { 'topic': function () { new CleanCSS({ level: 1, inline: 'all' }).minify({ 'main.css': { styles: '@import url(test/fixtures/partials/one.css);\n@import url(http://127.0.0.1/test.css);' }, 'test\\fixtures\\partials\\one.css': { styles: '.one { background-color:#f00; }' }, 'http://127.0.0.1/test.css': { styles: '.test { color: #000 }' } }, this.callback); }, 'gives right output without reading resources': function (minified) { assert.equal(minified.styles, '.one{background-color:red}.test{color:#000}'); } }, 'with @import and rules after': { 'topic': function () { return new CleanCSS().minify(sourcesAsHash(['./test/fixtures/partials/two.css', './test/fixtures/partials-absolute/base.css'])); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}.base2{border-width:0}.sub{padding:0}.base{margin:0}'); } }, 'with source map and absolute paths on Windows': { 'topic': function () { return new CleanCSS({ sourceMap: true }).minify({ 'z:\\missing.css': { styles: '.block{color:red}' } }); }, 'gives right sources': function (minified) { if (process.platform == 'win32') { assert.deepEqual(minified.sourceMap._sources._array, ['z:\\missing.css']); } } } }, 'accepts a list of source files as hash in batch mode': { 'with rebase to the current directory': { 'topic': function () { return new CleanCSS({ batch: true, rebase: true, rebaseTo: process.cwd() }).minify( sourcesAsHash([ 'test/fixtures/partials/one.css', 'test/fixtures/partials/three.css' ]) ); }, 'output should be a hash': function (minified) { assert.equal(typeof minified, 'object'); }, 'output should have input files as keys': function (minified) { assert.isTrue('test/fixtures/partials/one.css' in minified); assert.isTrue('test/fixtures/partials/three.css' in minified); }, 'output of first file should be in the first item': function (minified) { assert.equal(minified['test/fixtures/partials/one.css'].styles, '.one{color:red}'); assert.deepEqual(minified['test/fixtures/partials/one.css'].errors, []); assert.deepEqual(minified['test/fixtures/partials/one.css'].warnings, []); }, 'output of second file should be in the second item': function (minified) { assert.equal(minified['test/fixtures/partials/three.css'].styles, '.three{background-image:url(extra/down.gif)}'); assert.deepEqual(minified['test/fixtures/partials/three.css'].errors, []); assert.deepEqual(minified['test/fixtures/partials/three.css'].warnings, []); } } }, 'sources list as a hash in batch + promise mode': { 'with rebase to the current directory': { 'topic': function () { var vow = this; async function doTopic() { return await new CleanCSS({ batch: true, returnPromise: true }).minify([ {'path/to/file/one': {styles: 'html { color: #000000; }'}}, {'path/to/file/two': {styles: 'body { background: #ffffff; }'}} ]); } doTopic() .then(function (output) { vow.callback(null, output); }) .catch(function (errors) { vow.callback(errors, null); }); }, 'output should be a hash': function (minified) { assert.equal(typeof minified, 'object'); }, 'output should be correct': function (minified) { assert.equal(minified['path/to/file/one'].styles, 'html{color:#000}'); assert.equal(minified['path/to/file/two'].styles, 'body{background:#fff}'); } } }, 'accepts a list of source files as array of hashes': { 'topic': function () { return new CleanCSS({rebase: true}).minify([ sourcesAsHash(['test/fixtures/partials/one.css']), sourcesAsHash(['test/fixtures/partials/three.css']) ]); }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'accepts a list of source files as array of hashes in batch mode': { 'topic': function () { return new CleanCSS({ batch: true, rebase: true, rebaseTo: process.cwd() }).minify([ sourcesAsHash(['test/fixtures/partials/one.css']), sourcesAsHash(['test/fixtures/partials/three.css']) ]); }, 'output should be a hash': function (minified) { assert.equal(typeof minified, 'object'); }, 'output should have input files as keys': function (minified) { assert.isTrue('test/fixtures/partials/one.css' in minified); assert.isTrue('test/fixtures/partials/three.css' in minified); }, 'output of first file should be in the first item': function (minified) { assert.equal(minified['test/fixtures/partials/one.css'].styles, '.one{color:red}'); assert.deepEqual(minified['test/fixtures/partials/one.css'].errors, []); assert.deepEqual(minified['test/fixtures/partials/one.css'].warnings, []); }, 'output of second file should be in the second item': function (minified) { assert.equal(minified['test/fixtures/partials/three.css'].styles, '.three{background-image:url(extra/down.gif)}'); assert.deepEqual(minified['test/fixtures/partials/three.css'].errors, []); assert.deepEqual(minified['test/fixtures/partials/three.css'].warnings, []); } }, 'keeps trailing semicolons if option is set': { 'topic': function() { return new CleanCSS({format: { semicolonAfterLastProperty: true }}).minify('*{ font-size:12px; color:#ea7500; }'); }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, '*{font-size:12px;color:#ea7500;}'); }, 'should raise no errors': function (error, minified) { assert.isEmpty(minified.errors); } }, 'vulnerabilities': { 'ReDOS in time units': { 'topic': function () { var prefix = '-+.0'; var pump = []; var suffix = '-0'; var input; var i; for (i = 0; i < 10000; i++) { pump.push('0000000000'); } input = '.block{animation:1s test;animation-duration:' + prefix + pump.join('') + suffix + 's}'; return new CleanCSS({ level: { 1: { replaceZeroUnits: false }, 2: true } }).minify(input); }, 'finishes in less than a second': function (error, minified) { assert.isTrue(minified.stats.timeSpent < 1000); } } }, 'plugins': { 'level 1 - opacity range as value plugin': { 'topic': function () { var opacityRangePlugin = { level1: { value: function (propertyName, propertyValue) { if (propertyName == 'opacity' && parseFloat(propertyValue) < 0) { return '0'; } if (propertyName == 'opacity' && parseFloat(propertyValue) > 1) { return '1'; } return propertyValue; } } }; return new CleanCSS({ plugins: [opacityRangePlugin]}).minify('.block-1{opacity:-1.5}.block-2{opacity:1.5}'); }, 'normalizes opacity to standard boundaries': function (error, minified) { assert.equal(minified.styles, '.block-1{opacity:0}.block-2{opacity:1}'); } }, 'level 1 - opacity range as property plugin': { 'topic': function () { var opacityRangePlugin = { level1: { property: function (_rule, property) { if (property.name == 'opacity' && parseFloat(property.value[0][1]) < 0) { property.value[0][1] = '0'; } if (property.name == 'opacity' && parseFloat(property.value[0][1]) > 1) { property.value[0][1] = '1'; } } } }; return new CleanCSS({ plugins: [opacityRangePlugin]}).minify('.block-1{opacity:-1.5}.block-2{opacity:1.5}'); }, 'normalizes opacity to standard boundaries': function (error, minified) { assert.equal(minified.styles, '.block-1{opacity:0}.block-2{opacity:1}'); } }, 'level 1 - background repeat plugin': { 'topic': function () { var backgroundRepeatPlugin = { level1: { property: function(_rule, property) { if (property.name == 'background-repeat' && property.value.length == 2 && property.value[0][1] == property.value[1][1]) { property.value.pop(); property.dirty = true; } } } }; return new CleanCSS({ plugins: [backgroundRepeatPlugin]}).minify('.block-1{background-repeat:no-repeat}.block-2{background-repeat:repeat repeat}'); }, 'normalizes opacity to standard boundaries': function (error, minified) { assert.equal(minified.styles, '.block-1{background-repeat:no-repeat}.block-2{background-repeat:repeat}'); } }, 'level 1 - drop certain properties via a property plugin': { 'topic': function () { // Let's say you bundle external CSS into yours and want to get rid of some properties programatically // e.g. Bootstrap uses `-webkit-linear-gradient()`, `-o-linear-gradient()`, and `-webkit-gradient()` fallbacks and you want to get rid of them var getRidOfBackgroundImageVendorFallbacks = { level1: { property: function (_rule, property) { var value; if (property.name == 'background-image') { value = property.value[0][1]; if (value.indexOf('-webkit-linear-gradient') == 0 || value.indexOf('-o-linear-gradient') == 0 || value.indexOf('-webkit-gradient') == 0) { property.unused = true; } } } } }; var input = '\ .block-1 {\ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\ 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(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\ } \ '; return new CleanCSS({ plugins: [getRidOfBackgroundImageVendorFallbacks]}).minify(input); }, 'normalizes opacity to standard boundaries': function (error, minified) { assert.equal(minified.styles, '.block-1{background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%)}'); } }, 'level 2 - drop certain rules via level 2 plugin': { 'topic': function () { // Let's say you bundle external CSS into yours and want to get rid of some rules programatically // e.g. Bootstrap uses `glyphicon` classes and you don't need them at all var getRidOfGlyphiconsPlugin = { level2: { block: function (tokens) { // at this point you get full access to serialized CSS, do `console.log(tokens)` to see what you get var tokenType; var tokenNames; var tokenValues; var i, l; for (i = 0, l = tokens.length; i < l; i++) { tokenType = tokens[i][0]; tokenNames = tokens[i][1]; tokenValues = tokens[i][2]; if (tokenType == 'rule' && tokenNames[0][1].indexOf('.glyphicon') == 0) { tokens[i][2] = []; } if (tokenType == 'at-rule-block' && tokenNames[0][1] == '@font-face' && tokenValues.length > 0 && tokenValues[0][1][1] == 'font-family' && tokenValues[0][2][1].indexOf('Glyphicons') > -1) { tokens[i][2] = []; } } } } }; var input = '\ td,\ th {\ padding: 0;\ }\ @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: normal;\ line-height: 1;\ -webkit-font-smoothing: antialiased;\ -moz-osx-font-smoothing: grayscale;\ }\ .glyphicon-asterisk:before {\ content: "\\2a";\ }\ .glyphicon-plus:before {\ content: "\\2b";\ }\ '; return new CleanCSS({ level: 2, plugins: [getRidOfGlyphiconsPlugin]}).minify(input); }, 'normalizes opacity to standard boundaries': function (error, minified) { assert.equal(minified.styles, 'td,th{padding:0}'); } } } }).export(module); clean-css-5.3.3/test/optimizer/ 0000775 0000000 0000000 00000000000 14532047255 0016402 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/configuration/ 0000775 0000000 0000000 00000000000 14532047255 0021251 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/configuration/break-up-test.js 0000664 0000000 0000000 00000315121 14532047255 0024275 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var wrapForOptimizing = require('../../../lib/optimizer/wrap-for-optimizing').all; var populateComponents = require('../../../lib/optimizer/level-2/properties/populate-components'); var validator = require('../../../lib/optimizer/validator'); var compatibilityFrom = require('../../../lib/options/compatibility'); var breakUp = require('../../../lib/optimizer/configuration/break-up'); function _breakUp(properties) { var wrapped = wrapForOptimizing(properties); populateComponents(wrapped, validator(compatibilityFrom()), []); return wrapped[0].components; } vows.describe(breakUp) .addBatch({ 'animation': { 'all': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '3s'], ['property-value', 'ease-in'], ['property-value', '1s'], ['property-value', '2'], ['property-value', 'reverse'], ['property-value', 'both'], ['property-value', 'paused'], ['property-value', 'slidein'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, 'animation-duration'); assert.deepEqual(components[0].value, [['property-value', '3s']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'ease-in']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, 'animation-delay'); assert.deepEqual(components[2].value, [['property-value', '1s']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, 'animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', '2']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, 'animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'reverse']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, 'animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'both']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, 'animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'paused']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'slidein']]); } }, 'all with reversed order': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', 'slidein'], ['property-value', 'paused'], ['property-value', 'both'], ['property-value', 'reverse'], ['property-value', '2'], ['property-value', '1s'], ['property-value', 'ease-in'], ['property-value', '3s'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, 'animation-duration'); assert.deepEqual(components[0].value, [['property-value', '1s']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'ease-in']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, 'animation-delay'); assert.deepEqual(components[2].value, [['property-value', '3s']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, 'animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', '2']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, 'animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'reverse']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, 'animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'both']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, 'animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'paused']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'slidein']]); } }, 'all with custom identifier': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '3s'], ['property-value', 'ease-in'], ['property-value', '1s'], ['property-value', '2'], ['property-value', 'reverse'], ['property-value', 'both'], ['property-value', 'paused'], ['property-value', '_custom-ident'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, 'animation-duration'); assert.deepEqual(components[0].value, [['property-value', '3s']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'ease-in']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, 'animation-delay'); assert.deepEqual(components[2].value, [['property-value', '1s']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, 'animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', '2']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, 'animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'reverse']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, 'animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'both']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, 'animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'paused']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', '_custom-ident']]); } }, 'some': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '3s'], ['property-value', 'reverse'], ['property-value', 'ease-in'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, 'animation-duration'); assert.deepEqual(components[0].value, [['property-value', '3s']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'ease-in']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, 'animation-delay'); assert.deepEqual(components[2].value, [['property-value', '0s']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, 'animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', '1']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, 'animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'reverse']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, 'animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'none']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, 'animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'running']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'none']]); } }, 'custom timing function': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', 'cubic-bezier(0.1, 0.7, 1.0, 0.1)'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'cubic-bezier(0.1, 0.7, 1.0, 0.1)']]); } }, 'invalid timing function': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', 'custom-bezier(0.1, 0.7, 1.0, 0.1)', [[1, 12, undefined]]] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } }, 'custom animation name': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', 'custom-animation'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'custom-animation']]); } }, 'three time units': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '1s'], ['property-value', 'ease-in'], ['property-value', '2s'], ['property-value', '3s', [[1, 20, undefined]]] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } }, 'repeated values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '1s'], ['property-value', 'reverse'], ['property-value', 'reverse'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'reverse']]); } }, 'inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', 'inherit'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, 'animation-duration'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, 'animation-delay'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, 'animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', 'inherit']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, 'animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'inherit']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, 'animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'inherit']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, 'animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'inherit']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'inherit']]); } }, 'inherit mixed in': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '1s', [[1, 12, undefined]]], ['property-value', 'inherit'] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } }, 'multiplex': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'animation'], ['property-value', '3s'], ['property-value', 'ease-in'], ['property-value', '1s'], ['property-value', '2'], ['property-value', 'reverse'], ['property-value', 'both'], ['property-value', 'paused'], ['property-value', 'slidein'], ['property-value', ','], ['property-value', '2s'], ['property-value', 'ease-out'], ['property-value', 'slideout'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, 'animation-duration'); assert.deepEqual(components[0].value, [['property-value', '3s'], ['property-value', ','], ['property-value', '2s']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, 'animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'ease-in'], ['property-value', ','], ['property-value', 'ease-out']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, 'animation-delay'); assert.deepEqual(components[2].value, [['property-value', '1s'], ['property-value', ','], ['property-value', '0s']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, 'animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', '2'], ['property-value', ','], ['property-value', '1']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, 'animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'reverse'], ['property-value', ','], ['property-value', 'normal']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, 'animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'both'], ['property-value', ','], ['property-value', 'none']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, 'animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'paused'], ['property-value', ','], ['property-value', 'running']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, 'animation-name'); assert.deepEqual(components[7].value, [['property-value', 'slidein'], ['property-value', ','], ['property-value', 'slideout']]); } }, 'vendor prefixed': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', '-moz-animation'], ['property-value', '3s'], ['property-value', 'ease-in'], ['property-value', '1s'], ['property-value', '2'], ['property-value', 'reverse'], ['property-value', 'both'], ['property-value', 'paused'], ['property-value', 'slidein'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has animation-duration': function (components) { assert.deepEqual(components[0].name, '-moz-animation-duration'); assert.deepEqual(components[0].value, [['property-value', '3s']]); }, 'has animation-timing-function': function (components) { assert.deepEqual(components[1].name, '-moz-animation-timing-function'); assert.deepEqual(components[1].value, [['property-value', 'ease-in']]); }, 'has animation-delay': function (components) { assert.deepEqual(components[2].name, '-moz-animation-delay'); assert.deepEqual(components[2].value, [['property-value', '1s']]); }, 'has animation-iteration-count': function (components) { assert.deepEqual(components[3].name, '-moz-animation-iteration-count'); assert.deepEqual(components[3].value, [['property-value', '2']]); }, 'has animation-direction': function (components) { assert.deepEqual(components[4].name, '-moz-animation-direction'); assert.deepEqual(components[4].value, [['property-value', 'reverse']]); }, 'has animation-fill-mode': function (components) { assert.deepEqual(components[5].name, '-moz-animation-fill-mode'); assert.deepEqual(components[5].value, [['property-value', 'both']]); }, 'has animation-play-state': function (components) { assert.deepEqual(components[6].name, '-moz-animation-play-state'); assert.deepEqual(components[6].value, [['property-value', 'paused']]); }, 'has animation-name': function (components) { assert.deepEqual(components[7].name, '-moz-animation-name'); assert.deepEqual(components[7].value, [['property-value', 'slidein']]); } } }, 'background': { 'inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', 'inherit'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-image': function (components) { assert.deepEqual(components[0].name, 'background-image'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); }, 'has background-repeat': function (components) { assert.deepEqual(components[3].name, 'background-repeat'); assert.deepEqual(components[3].value, [['property-value', 'inherit']]); }, 'has background-attachment': function (components) { assert.deepEqual(components[4].name, 'background-attachment'); assert.deepEqual(components[4].value, [['property-value', 'scroll']]); }, 'has background-origin': function (components) { assert.deepEqual(components[5].name, 'background-origin'); assert.deepEqual(components[5].value, [['property-value', 'inherit']]); }, 'has background-clip': function (components) { assert.deepEqual(components[6].name, 'background-clip'); assert.deepEqual(components[6].value, [['property-value', 'inherit']]); }, 'has background-color': function (components) { assert.deepEqual(components[7].name, 'background-color'); assert.deepEqual(components[7].value, [['property-value', 'inherit']]); } }, 'all': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'repeat'], ['property-value', 'no-repeat'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '50%'], ['property-value', '60%'], ['property-value', 'fixed'], ['property-value', 'padding-box'], ['property-value', 'border-box'], ['property-value', 'red'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-image': function (components) { assert.deepEqual(components[0].name, 'background-image'); assert.deepEqual(components[0].value, [['property-value', 'url(image.png)']]); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', '2px'], ['property-value', '3px']]); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', '50%'], ['property-value', '60%']]); }, 'has background-repeat': function (components) { assert.deepEqual(components[3].name, 'background-repeat'); assert.deepEqual(components[3].value, [['property-value', 'repeat'], ['property-value', 'no-repeat']]); }, 'has background-attachment': function (components) { assert.deepEqual(components[4].name, 'background-attachment'); assert.deepEqual(components[4].value, [['property-value', 'fixed']]); }, 'has background-origin': function (components) { assert.deepEqual(components[5].name, 'background-origin'); assert.deepEqual(components[5].value, [['property-value', 'padding-box']]); }, 'has background-clip': function (components) { assert.deepEqual(components[6].name, 'background-clip'); assert.deepEqual(components[6].value, [['property-value', 'border-box']]); }, 'has background-color': function (components) { assert.deepEqual(components[7].name, 'background-color'); assert.deepEqual(components[7].value, [['property-value', 'red']]); } }, 'no size': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', 'bottom'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', 'bottom']]); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', 'auto']]); } }, 'shorthand size & position': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', '2px'], ['property-value', '/'], ['property-value', '50px'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', '2px']]); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', '50px']]); } }, 'size & position joined together': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', '2px'], ['property-value', '/'], ['property-value', '50px'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', '2px']]); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', '50px']]); } }, 'size & position joined together with 4 values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', '5px'], ['property-value', '2px'], ['property-value', '/'], ['property-value', '50px'], ['property-value', '30px'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', '5px'], ['property-value', '2px']]); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', '50px'], ['property-value', '30px']]); } }, 'clip to origin': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', 'padding-box'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-origin': function (components) { assert.deepEqual(components[5].name, 'background-origin'); assert.deepEqual(components[5].value, [['property-value', 'padding-box']]); }, 'has background-clip': function (components) { assert.deepEqual(components[6].name, 'background-clip'); assert.deepEqual(components[6].value, [['property-value', 'padding-box']]); } }, 'tailing-comma': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', '#000'], ['property-value', ','] ] ]); }, 'has background': function (components) { assert.deepEqual(components[7].name, 'background-color'); assert.deepEqual(components[7].value, [['property-value', '#000']]); }, } }, 'border': { 'inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border'], ['property-value', 'inherit'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-width': function (components) { assert.deepEqual(components[0].name, 'border-width'); assert.deepEqual(components[0].value, [ ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ]); }, 'has border-style': function (components) { assert.deepEqual(components[1].name, 'border-style'); assert.deepEqual(components[1].value, [ ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ]); }, 'has border-color': function (components) { assert.deepEqual(components[2].name, 'border-color'); assert.deepEqual(components[2].value, [ ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ]); } }, '3 inherits': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-width': function (components) { assert.deepEqual(components[0].name, 'border-width'); assert.deepEqual(components[0].value, [ ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ]); }, 'has border-style': function (components) { assert.deepEqual(components[1].name, 'border-style'); assert.deepEqual(components[1].value, [ ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ]); }, 'has border-color': function (components) { assert.deepEqual(components[2].name, 'border-color'); assert.deepEqual(components[2].value, [ ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ]); } }, 'all values in correct order': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-width': function (components) { assert.deepEqual(components[0].name, 'border-width'); assert.deepEqual(components[0].value, [ ['property-value', '1px'], ['property-value', '1px'], ['property-value', '1px'], ['property-value', '1px'] ]); }, 'has border-style': function (components) { assert.deepEqual(components[1].name, 'border-style'); assert.deepEqual(components[1].value, [ ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'] ]); }, 'has border-color': function (components) { assert.deepEqual(components[2].name, 'border-color'); assert.deepEqual(components[2].value, [ ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'] ]); } }, 'all values in wrong order': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border'], ['property-value', 'red'], ['property-value', 'solid'], ['property-value', '1px'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-width': function (components) { assert.deepEqual(components[0].name, 'border-width'); assert.deepEqual(components[0].value, [ ['property-value', '1px'], ['property-value', '1px'], ['property-value', '1px'], ['property-value', '1px'] ]); }, 'has border-style': function (components) { assert.deepEqual(components[1].name, 'border-style'); assert.deepEqual(components[1].value, [ ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'] ]); }, 'has border-color': function (components) { assert.deepEqual(components[2].name, 'border-color'); assert.deepEqual(components[2].value, [ ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'] ]); } }, 'missing values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border'], ['property-value', 'red'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-width': function (components) { assert.deepEqual(components[0].name, 'border-width'); assert.deepEqual(components[0].value, [ ['property-value', 'medium'], ['property-value', 'medium'], ['property-value', 'medium'], ['property-value', 'medium'] ]); }, 'has border-style': function (components) { assert.deepEqual(components[1].name, 'border-style'); assert.deepEqual(components[1].value, [ ['property-value', 'none'], ['property-value', 'none'], ['property-value', 'none'], ['property-value', 'none'] ]); }, 'has border-color': function (components) { assert.deepEqual(components[2].name, 'border-color'); assert.deepEqual(components[2].value, [ ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'] ]); } }, 'missing width': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border'], ['property-value', 'solid'], ['property-value', 'rgba(0,0,0,0)'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-width': function (components) { assert.deepEqual(components[0].name, 'border-width'); assert.deepEqual(components[0].value, [ ['property-value', 'medium'], ['property-value', 'medium'], ['property-value', 'medium'], ['property-value', 'medium'] ]); }, 'has border-style': function (components) { assert.deepEqual(components[1].name, 'border-style'); assert.deepEqual(components[1].value, [ ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'] ]); }, 'has border-color': function (components) { assert.deepEqual(components[2].name, 'border-color'); assert.deepEqual(components[2].value, [ ['property-value', 'rgba(0,0,0,0)'], ['property-value', 'rgba(0,0,0,0)'], ['property-value', 'rgba(0,0,0,0)'], ['property-value', 'rgba(0,0,0,0)'] ]); } } }, 'border radius': { 'no horizontal vertical split': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has border-top-left-radius': function (components) { assert.equal(components[0].name, 'border-top-left-radius'); assert.deepEqual(components[0].value, [['property-value', '0px'], ['property-value', '0px']]); }, 'has border-top-right-radius': function (components) { assert.equal(components[1].name, 'border-top-right-radius'); assert.deepEqual(components[1].value, [['property-value', '1px'], ['property-value', '1px']]); }, 'has border-bottom-right-radius': function (components) { assert.equal(components[2].name, 'border-bottom-right-radius'); assert.deepEqual(components[2].value, [['property-value', '2px'], ['property-value', '2px']]); }, 'has border-bottom-left': function (components) { assert.equal(components[3].name, 'border-bottom-left-radius'); assert.deepEqual(components[3].value, [['property-value', '3px'], ['property-value', '3px']]); } }, 'horizontal vertical split': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '4px'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has border-top-left-radius': function (components) { assert.equal(components[0].name, 'border-top-left-radius'); assert.deepEqual(components[0].value, [['property-value', '0px'], ['property-value', '1px']]); }, 'has border-top-right-radius': function (components) { assert.equal(components[1].name, 'border-top-right-radius'); assert.deepEqual(components[1].value, [['property-value', '1px'], ['property-value', '2px']]); }, 'has border-bottom-right-radius': function (components) { assert.equal(components[2].name, 'border-bottom-right-radius'); assert.deepEqual(components[2].value, [['property-value', '2px'], ['property-value', '3px']]); }, 'has border-bottom-left': function (components) { assert.equal(components[3].name, 'border-bottom-left-radius'); assert.deepEqual(components[3].value, [['property-value', '3px'], ['property-value', '4px']]); } }, 'vendor prefix asymmetrical horizontal vertical split': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', '-moz-border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '/'], ['property-value', '1px'], ['property-value', '4px'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has border-top-left-radius': function (components) { assert.equal(components[0].name, '-moz-border-top-left-radius'); assert.deepEqual(components[0].value, [['property-value', '0px'], ['property-value', '1px']]); }, 'has border-top-right-radius': function (components) { assert.equal(components[1].name, '-moz-border-top-right-radius'); assert.deepEqual(components[1].value, [['property-value', '1px'], ['property-value', '4px']]); }, 'has border-bottom-right-radius': function (components) { assert.equal(components[2].name, '-moz-border-bottom-right-radius'); assert.deepEqual(components[2].value, [['property-value', '2px'], ['property-value', '1px']]); }, 'has border-bottom-left': function (components) { assert.equal(components[3].name, '-moz-border-bottom-left-radius'); assert.deepEqual(components[3].value, [['property-value', '1px'], ['property-value', '4px']]); } }, 'with missing vertical value': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-radius'], ['property-value', '0px', [[1, 20, undefined]]], ['property-value', '/'] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } }, 'with missing horizontal value': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-radius'], ['property-value', '/', [[1, 20, undefined]]], ['property-value', '0px'] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } } }, 'font': { 'all values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic'], ['property-value', 'small-caps'], ['property-value', 'bold'], ['property-value', 'normal'], ['property-value', '18px'], ['property-value', '/'], ['property-value', '16px'], ['property-value', 'sans-serif'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', 'italic']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', 'small-caps']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', 'bold']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', 'normal']]); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', '18px']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', '16px']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', 'sans-serif']]); } }, 'multiple font-family': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic'], ['property-value', 'small-caps'], ['property-value', 'bold'], ['property-value', 'normal'], ['property-value', '18px'], ['property-value', '/'], ['property-value', '16px'], ['property-value', 'Helvetica'], ['property-value', ','], ['property-value', 'Arial'], ['property-value', ','], ['property-value', 'sans-serif'] ] ]); }, 'has all font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', 'Helvetica'], ['property-value', 'Arial'], ['property-value', 'sans-serif']]); } }, 'no line-height': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic'], ['property-value', 'small-caps'], ['property-value', 'bold'], ['property-value', 'normal'], ['property-value', '18px'], ['property-value', 'sans-serif'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', '18px']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', 'normal']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', 'sans-serif']]); } }, 'no line-height or fuzzy matched properties': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', '18px'], ['property-value', 'sans-serif'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', 'normal']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', 'normal']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', 'normal']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', 'normal']]); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', '18px']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', 'normal']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', 'sans-serif']]); } }, 'some fuzzy matched properties #1': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'bold'], ['property-value', 'small-caps'], ['property-value', '18px'], ['property-value', 'sans-serif'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', 'normal']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', 'small-caps']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', 'bold']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', 'normal']]); } }, 'some fuzzy matched properties #2': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'ultra-condensed'], ['property-value', 'italic'], ['property-value', '18px'], ['property-value', 'sans-serif'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', 'italic']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', 'normal']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', 'normal']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', 'ultra-condensed']]); } }, 'repeated fuzzy matched value': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic', [[0, 13, undefined]]], ['property-value', 'italic'], ['property-value', '18px'], ['property-value', 'sans-serif'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'line-height and font-size as functions': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'calc(27px / 2)', [[0, 13, undefined]]], ['property-value', '/'], ['property-value', 'calc(31px / 2)'], ['property-value', 'sans-serif'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'missing font size value': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font', [[0, 13, undefined]]], ['property-value', 'italic'], ['property-value', 'sans-serif'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'missing font family value': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic', [[0, 13, undefined]]], ['property-value', '12px'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'missing font family value after line height': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic', [[0, 13, undefined]]], ['property-value', '12px'], ['property-value', '/'], ['property-value', '12px'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'missing font family when only commas given': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'italic', [[0, 13, undefined]]], ['property-value', '12px'], ['property-value', ','], ['property-value', ','] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'missing all values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font', [[0, 13, undefined]]] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'values after font family': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', '12px'], ['property-value', 'Helvetica'], ['property-value', ','], ['property-value', 'sans-serif'], ['property-value', 'italic'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', 'Helvetica'], ['property-value', 'sans-serif italic']]); } }, 'single inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'inherit'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', 'inherit']]); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', 'inherit']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', 'inherit']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', 'inherit']]); } }, 'multiple inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'inherit', [[0, 13, undefined]]], ['property-value', 'inherit'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'mixed inherit #1': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'inherit', [[0, 13, undefined]]], ['property-value', '12px'], ['property-value', 'sans-serif'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'mixed inherit #2': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'bold', [[0, 13, undefined]]], ['property-value', 'inherit'], ['property-value', '12px'], ['property-value', 'sans-serif'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'system font': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'icon'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', '-clean-css-icon']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', '-clean-css-icon']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', '-clean-css-icon']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', '-clean-css-icon']]); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', '-clean-css-icon']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', '-clean-css-icon']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', '-clean-css-icon']]); } }, 'normal as font': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font', [[0, 6, undefined]]], ['property-value', 'normal'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'non-identifier as font family': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font', [[0, 6, undefined]]], ['property-value', '16px'], ['property-value', '123'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } }, 'unset font': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', 'unset'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', '-clean-css-unset']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', '-clean-css-unset']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', '-clean-css-unset']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', '-clean-css-unset']]); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', '-clean-css-unset']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', '-clean-css-unset']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', '-clean-css-unset']]); } }, 'system font with vendor prefix': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'font'], ['property-value', '-moz-window'] ] ]); }, 'has 7 components': function (components) { assert.lengthOf(components, 7); }, 'has font-style': function (components) { assert.equal(components[0].name, 'font-style'); assert.deepEqual(components[0].value, [['property-value', '-clean-css--moz-window']]); }, 'has font-variant': function (components) { assert.equal(components[1].name, 'font-variant'); assert.deepEqual(components[1].value, [['property-value', '-clean-css--moz-window']]); }, 'has font-weight': function (components) { assert.equal(components[2].name, 'font-weight'); assert.deepEqual(components[2].value, [['property-value', '-clean-css--moz-window']]); }, 'has font-stretch': function (components) { assert.equal(components[3].name, 'font-stretch'); assert.deepEqual(components[3].value, [['property-value', '-clean-css--moz-window']]); }, 'has font-size': function (components) { assert.equal(components[4].name, 'font-size'); assert.deepEqual(components[4].value, [['property-value', '-clean-css--moz-window']]); }, 'has line-height': function (components) { assert.equal(components[5].name, 'line-height'); assert.deepEqual(components[5].value, [['property-value', '-clean-css--moz-window']]); }, 'has font-family': function (components) { assert.equal(components[6].name, 'font-family'); assert.deepEqual(components[6].value, [['property-value', '-clean-css--moz-window']]); } } }, 'four values': { 'four given': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has margin-top': function (components) { assert.equal(components[0].name, 'margin-top'); assert.deepEqual(components[0].value, [['property-value', '0px']]); }, 'has margin-right': function (components) { assert.equal(components[1].name, 'margin-right'); assert.deepEqual(components[1].value, [['property-value', '1px']]); }, 'has margin-bottom': function (components) { assert.equal(components[2].name, 'margin-bottom'); assert.deepEqual(components[2].value, [['property-value', '2px']]); }, 'has margin-left': function (components) { assert.equal(components[3].name, 'margin-left'); assert.deepEqual(components[3].value, [['property-value', '3px']]); } }, 'three given': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'padding'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has padding-top': function (components) { assert.equal(components[0].name, 'padding-top'); assert.deepEqual(components[0].value, [['property-value', '0px']]); }, 'has padding-right': function (components) { assert.equal(components[1].name, 'padding-right'); assert.deepEqual(components[1].value, [['property-value', '1px']]); }, 'has padding-bottom': function (components) { assert.equal(components[2].name, 'padding-bottom'); assert.deepEqual(components[2].value, [['property-value', '2px']]); }, 'has padding-left': function (components) { assert.equal(components[3].name, 'padding-left'); assert.deepEqual(components[3].value, [['property-value', '1px']]); } }, 'two given': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-color'], ['property-value', 'red'], ['property-value', 'blue'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has border-top-color': function (components) { assert.equal(components[0].name, 'border-top-color'); assert.deepEqual(components[0].value, [['property-value', 'red']]); }, 'has border-right-color': function (components) { assert.equal(components[1].name, 'border-right-color'); assert.deepEqual(components[1].value, [['property-value', 'blue']]); }, 'has border-bottom-color': function (components) { assert.equal(components[2].name, 'border-bottom-color'); assert.deepEqual(components[2].value, [['property-value', 'red']]); }, 'has border-left-color': function (components) { assert.equal(components[3].name, 'border-left-color'); assert.deepEqual(components[3].value, [['property-value', 'blue']]); } }, 'one given': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-style'], ['property-value', 'solid'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has border-top-style': function (components) { assert.equal(components[0].name, 'border-top-style'); assert.deepEqual(components[0].value, [['property-value', 'solid']]); }, 'has border-right-style': function (components) { assert.equal(components[1].name, 'border-right-style'); assert.deepEqual(components[1].value, [['property-value', 'solid']]); }, 'has border-bottom-style': function (components) { assert.equal(components[2].name, 'border-bottom-style'); assert.deepEqual(components[2].value, [['property-value', 'solid']]); }, 'has border-left-style': function (components) { assert.equal(components[3].name, 'border-left-style'); assert.deepEqual(components[3].value, [['property-value', 'solid']]); } }, 'none given': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'border-style'] ] ]); }, 'has 0 components': function (components) { assert.lengthOf(components, 0); } } }, 'list style': { 'inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'list-style'], ['property-value', 'inherit'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-top-style': function (components) { assert.equal(components[0].name, 'list-style-type'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has border-right-style': function (components) { assert.equal(components[1].name, 'list-style-position'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has border-bottom-style': function (components) { assert.equal(components[2].name, 'list-style-image'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); } }, 'all values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'list-style'], ['property-value', 'circle'], ['property-value', 'inside'], ['property-value', 'url(image.png)'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-top-style': function (components) { assert.equal(components[0].name, 'list-style-type'); assert.deepEqual(components[0].value, [['property-value', 'circle']]); }, 'has border-right-style': function (components) { assert.equal(components[1].name, 'list-style-position'); assert.deepEqual(components[1].value, [['property-value', 'inside']]); }, 'has border-bottom-style': function (components) { assert.equal(components[2].name, 'list-style-image'); assert.deepEqual(components[2].value, [['property-value', 'url(image.png)']]); } }, 'some missing': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'list-style'], ['property-value', 'inside'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has border-top-style': function (components) { assert.equal(components[0].name, 'list-style-type'); assert.deepEqual(components[0].value, [['property-value', 'decimal|disc']]); }, 'has border-right-style': function (components) { assert.equal(components[1].name, 'list-style-position'); assert.deepEqual(components[1].value, [['property-value', 'inside']]); }, 'has border-bottom-style': function (components) { assert.equal(components[2].name, 'list-style-image'); assert.deepEqual(components[2].value, [['property-value', 'none']]); } }, 'fuzzy matching': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'list-style'], ['property-value', 'url(image.png)'], ['property-value', 'outside'], ['property-value', 'none'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has list-style-type': function (components) { assert.equal(components[0].name, 'list-style-type'); assert.deepEqual(components[0].value, [['property-value', 'none']]); }, 'has list-style-position': function (components) { assert.equal(components[1].name, 'list-style-position'); assert.deepEqual(components[1].value, [['property-value', 'outside']]); }, 'has list-style-image': function (components) { assert.equal(components[2].name, 'list-style-image'); assert.deepEqual(components[2].value, [['property-value', 'url(image.png)']]); } }, 'non-standard type': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'list-style'], ['property-value', 'test'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has list-style-type': function (components) { assert.equal(components[0].name, 'list-style-type'); assert.deepEqual(components[0].value, [['property-value', 'test']]); }, 'has list-style-position': function (components) { assert.equal(components[1].name, 'list-style-position'); assert.deepEqual(components[1].value, [['property-value', 'outside']]); }, 'has list-style-image': function (components) { assert.equal(components[2].name, 'list-style-image'); assert.deepEqual(components[2].value, [['property-value', 'none']]); } } }, 'multiple values 123': { 'background': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', '#fff'], ['property-value', ','], ['property-value', 'url(image2.png)'], ['property-value', 'repeat'], ['property-value', 'no-repeat'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '50%'], ['property-value', '60%'], ['property-value', 'fixed'], ['property-value', 'content-box'], ['property-value', 'content-box'], ['property-value', 'red'] ] ]); }, 'has 8 components': function (components) { assert.lengthOf(components, 8); }, 'has background-image': function (components) { assert.deepEqual(components[0].name, 'background-image'); assert.deepEqual(components[0].value, [['property-value', 'url(image.png)'], ['property-value', ','], ['property-value', 'url(image2.png)']]); assert.isTrue(components[0].multiplex); }, 'has background-position': function (components) { assert.deepEqual(components[1].name, 'background-position'); assert.deepEqual(components[1].value, [['property-value', '0'], ['property-value', '0'], ['property-value', ','], ['property-value', '2px'], ['property-value', '3px']]); assert.isTrue(components[0].multiplex); }, 'has background-size': function (components) { assert.deepEqual(components[2].name, 'background-size'); assert.deepEqual(components[2].value, [['property-value', 'auto'], ['property-value', ','], ['property-value', '50%'], ['property-value', '60%']]); assert.isTrue(components[0].multiplex); }, 'has background-repeat': function (components) { assert.deepEqual(components[3].name, 'background-repeat'); assert.deepEqual(components[3].value, [['property-value', 'repeat'], ['property-value', ','], ['property-value', 'repeat'], ['property-value', 'no-repeat']]); assert.isTrue(components[0].multiplex); }, 'has background-attachment': function (components) { assert.deepEqual(components[4].name, 'background-attachment'); assert.deepEqual(components[4].value, [['property-value', 'scroll'], ['property-value', ','], ['property-value', 'fixed']]); assert.isTrue(components[0].multiplex); }, 'has background-origin': function (components) { assert.deepEqual(components[5].name, 'background-origin'); assert.deepEqual(components[5].value, [['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'content-box']]); assert.isTrue(components[0].multiplex); }, 'has background-clip': function (components) { assert.deepEqual(components[6].name, 'background-clip'); assert.deepEqual(components[6].value, [['property-value', 'border-box'], ['property-value', ','], ['property-value', 'content-box']]); assert.isTrue(components[0].multiplex); }, 'has background-color': function (components) { assert.deepEqual(components[7].name, 'background-color'); assert.deepEqual(components[7].value, [['property-value', '#fff'], ['property-value', ','], ['property-value', 'red']]); assert.isTrue(components[0].multiplex); } }, 'background - clip & origin': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'repeat'], ['property-value', 'red'] ] ]); }, 'has background-origin': function (components) { assert.deepEqual(components[5].value, [['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'padding-box']]); }, 'has background-clip': function (components) { assert.deepEqual(components[6].value, [['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'border-box']]); } } }, 'outline': { 'inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', 'inherit'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); } }, '3 inherits': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', 'inherit'], ['property-value', 'inherit'], ['property-value', 'inherit'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); } }, 'all values in correct order': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', 'red'], ['property-value', 'solid'], ['property-value', '1px'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', 'red']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'solid']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', '1px']]); } }, 'all values in wrong order': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', '1px'], ['property-value', 'dotted'], ['property-value', '#fff'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', '#fff']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'dotted']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', '1px']]); } }, 'with auto style': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', '#fff'], ['property-value', 'auto'], ['property-value', '1px'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', '#fff']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'auto']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', '1px']]); } }, 'missing values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', 'solid'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', 'invert']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'solid']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', 'medium']]); } }, 'default values': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'outline'], ['property-value', 'invert'], ['property-value', 'none'], ['property-value', 'medium'] ] ]); }, 'has 3 components': function (components) { assert.lengthOf(components, 3); }, 'has outline-color': function (components) { assert.deepEqual(components[0].name, 'outline-color'); assert.deepEqual(components[0].value, [['property-value', 'invert']]); }, 'has outline-style': function (components) { assert.deepEqual(components[1].name, 'outline-style'); assert.deepEqual(components[1].value, [['property-value', 'none']]); }, 'has outline-width': function (components) { assert.deepEqual(components[2].name, 'outline-width'); assert.deepEqual(components[2].value, [['property-value', 'medium']]); } } } }) .addBatch({ 'transition': { 'all': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'all'], ['property-value', '1s'], ['property-value', 'ease-in'], ['property-value', '2s'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'all']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '1s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease-in']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '2s']]); } }, 'all vendor prefixed': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', '-moz-transition'], ['property-value', 'all'], ['property-value', '1s'], ['property-value', 'ease-in'], ['property-value', '2s'] ] ]); }, 'has 4 components': function (components) { assert.lengthOf(components, 4); }, 'has -moz-transition-property': function (components) { assert.deepEqual(components[0].name, '-moz-transition-property'); assert.deepEqual(components[0].value, [['property-value', 'all']]); }, 'has -moz-transition-duration': function (components) { assert.deepEqual(components[1].name, '-moz-transition-duration'); assert.deepEqual(components[1].value, [['property-value', '1s']]); }, 'has -moz-transition-timing-function': function (components) { assert.deepEqual(components[2].name, '-moz-transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease-in']]); }, 'has -moz-transition-delay': function (components) { assert.deepEqual(components[3].name, '-moz-transition-delay'); assert.deepEqual(components[3].value, [['property-value', '2s']]); } }, 'all with reversed order': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', '2s'], ['property-value', 'ease-in'], ['property-value', '1s'], ['property-value', 'all'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'all']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '2s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease-in']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '1s']]); } }, 'some': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'margin'], ['property-value', '1s'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'margin']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '1s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '0s']]); } }, 'only property': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'margin'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'margin']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '0s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '0s']]); } }, 'only one `time`': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', '1s'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'all']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '1s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '0s']]); } }, 'only two `time`s': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', '1s'], ['property-value', '2s'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'all']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '1s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '2s']]); } }, 'only timing function': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'ease-out'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'all']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '0s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease-out']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '0s']]); } }, '`inherit`': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'inherit'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'inherit']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', 'inherit']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'inherit']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', 'inherit']]); } }, 'multiplex': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'background-color'], ['property-value', '1s'], ['property-value', 'ease-in'], ['property-value', '1s'], ['property-value', ','], ['property-value', 'opacity'], ['property-value', '2s'] ] ]); }, 'has transition-property': function (components) { assert.deepEqual(components[0].name, 'transition-property'); assert.deepEqual(components[0].value, [['property-value', 'background-color'], ['property-value', ','], ['property-value', 'opacity']]); }, 'has transition-duration': function (components) { assert.deepEqual(components[1].name, 'transition-duration'); assert.deepEqual(components[1].value, [['property-value', '1s'], ['property-value', ','], ['property-value', '2s']]); }, 'has transition-timing-function': function (components) { assert.deepEqual(components[2].name, 'transition-timing-function'); assert.deepEqual(components[2].value, [['property-value', 'ease-in'], ['property-value', ','], ['property-value', 'ease']]); }, 'has transition-delay': function (components) { assert.deepEqual(components[3].name, 'transition-delay'); assert.deepEqual(components[3].value, [['property-value', '1s'], ['property-value', ','], ['property-value', '0s']]); } }, 'three `time`s': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', '1s'], ['property-value', '2s'], ['property-value', '3s', [[1, 30, undefined]]] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } }, 'extra value': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'all'], ['property-value', '1s'], ['property-value', 'ease-in'], ['property-value', '3s'], ['property-value', 'extra', [[1, 30, undefined]]] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } }, 'mixed-in inherit': { 'topic': function () { return _breakUp([ [ 'property', ['property-name', 'transition'], ['property-value', 'all', [[1, 30, undefined]]], ['property-value', 'inherit'] ] ]); }, 'has no components': function (components) { assert.lengthOf(components, 0); } } } }) .export(module); clean-css-5.3.3/test/optimizer/configuration/properties/ 0000775 0000000 0000000 00000000000 14532047255 0023445 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/configuration/properties/understandable-test.js 0000664 0000000 0000000 00000004104 14532047255 0027752 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var compatibilityFrom = require('../../../../lib/options/compatibility'); var validator = require('../../../../lib/optimizer/validator'); var understandable = require('../../../../lib/optimizer/configuration/properties/understandable'); vows.describe(understandable) .addBatch({ 'same vendor prefixes': { 'topic': function () { return [validator(compatibilityFrom({})), '-moz-calc(100% / 2)', '-moz-calc(50% / 2)', 0, true]; }, 'is understandable': function (topic) { assert.isTrue(understandable.apply(null, topic)); } }, 'different vendor prefixes': { 'topic': function () { return [validator(compatibilityFrom({})), '-moz-calc(100% / 2)', 'calc(50% / 2)', 0, true]; }, 'is not understandable': function (topic) { assert.isFalse(understandable.apply(null, topic)); } }, 'different vendor prefixes when comparing non-pair values': { 'topic': function () { return [validator(compatibilityFrom({})), '-moz-calc(100% / 2)', 'calc(50% / 2)', 0, false]; }, 'is not understandable': function (topic) { assert.isFalse(understandable.apply(null, topic)); } }, 'variables': { 'topic': function () { return [validator(compatibilityFrom({})), 'var(--x)', 'var(--y)', 0, true]; }, 'is understandable': function (topic) { assert.isTrue(understandable.apply(null, topic)); } }, 'variable and value': { 'topic': function () { return [validator(compatibilityFrom({})), 'var(--x)', 'block', 0, true]; }, 'is not understandable': function (topic) { assert.isFalse(understandable.apply(null, topic)); } }, 'variable and value when comparing non-pair values': { 'topic': function () { return [validator(compatibilityFrom({})), 'var(--x)', 'block', 0, false]; }, 'is understandable': function (topic) { assert.isTrue(understandable.apply(null, topic)); } } }) .export(module); clean-css-5.3.3/test/optimizer/configuration/restore-test.js 0000664 0000000 0000000 00000104067 14532047255 0024257 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var wrapForOptimizing = require('../../../lib/optimizer/wrap-for-optimizing').single; var configuration = require('../../../lib/optimizer/configuration'); var compatibilityFrom = require('../../../lib/options/compatibility'); var validator = require('../../../lib/optimizer/validator'); var restore = require('../../../lib/optimizer/configuration/restore'); function _breakUp(property) { var descriptor = configuration[property[1][1]]; var _property = wrapForOptimizing(property); _property.components = descriptor.breakUp(_property, configuration, validator(compatibilityFrom())); _property.multiplex = _property.components[0].multiplex; return _property; } function _restore(_property) { var descriptor = configuration[_property.name]; return descriptor.restore(_property, configuration); } vows.describe(restore) .addBatch({ 'background': { 'background with some values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'] ]); } }, 'background with some default values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'repeat'], ['property-value', 'padding-box'], ['property-value', 'border-box'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'] ]); } }, 'background with all default values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'transparent'], ['property-value', 'none'], ['property-value', 'repeat'], ['property-value', 'scroll'], ['property-value', '0'], ['property-value', '0'], ['property-value', 'padding-box'], ['property-value', 'border-box'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0 0'] ]); } }, 'background with some double values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'repeat'], ['property-value', 'no-repeat'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', 'auto'], ['property-value', 'padding-box'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', 'repeat'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'] ]); } }, 'background with default background origin and background clip': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'padding-box'], ['property-value', 'border-box'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'] ]); } }, 'background with same background origin and background clip': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'padding-box'], ['property-value', 'padding-box'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', 'padding-box'] ]); } }, 'background with default background position and background size': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', '0'], ['property-value', '0'], ['property-value', '/'], ['property-value', '50%'], ['property-value', '25%'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', '0'], ['property-value', '0'], ['property-value', '/'], ['property-value', '50%'], ['property-value', '25%'] ]); } }, 'background with default background position and single background size': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', '0'], ['property-value', '0'], ['property-value', '/'], ['property-value', '50%'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', '0'], ['property-value', '0'], ['property-value', '/'], ['property-value', '50%'] ]); } }, 'background with default background position and background size differing by 2nd value': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', '0'], ['property-value', '50px'], ['property-value', '/'], ['property-value', '0'], ['property-value', '30px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', '0'], ['property-value', '50px'], ['property-value', '/'], ['property-value', '0'], ['property-value', '30px'] ]); } }, 'background 0 to background 0': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', '0'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0'] ]); } }, 'background color in multiplex': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'blue'], ['property-value', ','], ['property-value', 'url(image.jpg)'], ['property-value', 'red'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', ','], ['property-value', 'url(image.jpg)'], ['property-value', 'red'] ]); } } }, 'border radius': { '4 values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ]); } }, '3 values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'] ]); } }, '2 values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '0px'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'] ]); } }, '1 value': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '0px'], ['property-value', '0px'], ['property-value', '0px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'] ]); } }, 'horizontal + vertical - different values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '2px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '2px'], ['property-value', '1px'] ]); } }, 'horizontal + vertical - same values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ]); } }, 'horizontal + vertical - asymetrical': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '0px'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'], ['property-value', '/'], ['property-value', '0px'], ['property-value', '1px'] ]); } }, 'inherit': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border-radius'], ['property-value', 'inherit'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'inherit'] ]); } } }, 'four values': { '4 different': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'padding'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ]); } }, '3 different': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'padding'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'] ]); } }, '2 different': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'padding'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '0px'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'], ['property-value', '1px'] ]); } }, 'all same': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'padding'], ['property-value', '0px'], ['property-value', '0px'], ['property-value', '0px'], ['property-value', '0px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0px'] ]); } }, 'inherit': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'padding'], ['property-value', 'inherit'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'inherit'] ]); } } }, 'repeated values': { 'background with some values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'repeat'], ['property-value', 'red'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'url(image.png)'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'red'] ]); } }, 'background with background origin and size': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'background'], ['property-value', 'no-repeat'], ['property-value', 'padding-box'], ['property-value', ','], ['property-value', 'repeat'], ['property-value', '10px'], ['property-value', '10px'], ['property-value', '/'], ['property-value', 'auto'], ['property-value', 'red'], ['property-value', ','], ['property-value', 'top'], ['property-value', 'left'], ['property-value', '/'], ['property-value', '30%'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'no-repeat'], ['property-value', 'padding-box'], ['property-value', ','], ['property-value', '10px'], ['property-value', '10px'], ['property-value', ','], ['property-value', 'top'], ['property-value', 'left'], ['property-value', '/'], ['property-value', '30%'] ]); } } }, 'without defaults': { 'border with some values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border'], ['property-value', 'solid'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'solid'] ]); } }, 'border with all values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ]); } }, 'border with all defaults': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border'], ['property-value', 'medium'], ['property-value', 'none'], ['property-value', 'none'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'none'] ]); } }, 'border with inherit': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'border'], ['property-value', 'inherit'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'inherit'] ]); } }, 'font with all non-default values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', 'italic'], ['property-value', 'small-caps'], ['property-value', 'bold'], ['property-value', 'ultra-condensed'], ['property-value', '12px'], ['property-value', '/'], ['property-value', '16px'], ['property-value', 'sans-serif'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'italic'], ['property-value', 'small-caps'], ['property-value', 'bold'], ['property-value', 'ultra-condensed'], ['property-value', '12px'], ['property-value', '/'], ['property-value', '16px'], ['property-value', 'sans-serif'] ]); } }, 'font with some default values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', 'normal'], ['property-value', 'small-caps'], ['property-value', 'normal'], ['property-value', 'ultra-condensed'], ['property-value', '12px'], ['property-value', '/'], ['property-value', '16px'], ['property-value', 'sans-serif'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'small-caps'], ['property-value', 'ultra-condensed'], ['property-value', '12px'], ['property-value', '/'], ['property-value', '16px'], ['property-value', 'sans-serif'] ]); } }, 'font without line height': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', '12px'], ['property-value', 'sans-serif'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '12px'], ['property-value', 'sans-serif'] ]); } }, 'font with multiple font family values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', '12px'], ['property-value', '"Helvetica Neue"'], ['property-value', ','], ['property-value', 'Helvetica'], ['property-value', ','], ['property-value', 'sans-serif'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '12px'], ['property-value', '"Helvetica Neue"'], ['property-value', ','], ['property-value', 'Helvetica'], ['property-value', ','], ['property-value', 'sans-serif'] ]); } }, 'font with inherit': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', 'inherit'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'inherit'] ]); } }, 'system font with standard value': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', 'icon'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'icon'] ]); } }, 'system font with vendor-prefixed value': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'font'], ['property-value', '-moz-status'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '-moz-status'] ]); } }, 'list with some values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'list-style'], ['property-value', 'circle'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'circle'] ]); } }, 'list with all values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'list-style'], ['property-value', 'circle'], ['property-value', 'inside'], ['property-value', 'url(image.png)'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'circle'], ['property-value', 'inside'], ['property-value', 'url(image.png)'] ]); } }, 'list with some defaults': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'list-style'], ['property-value', 'circle'], ['property-value', 'outside'], ['property-value', 'url(image.png)'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'circle'], ['property-value', 'url(image.png)'] ]); } }, 'list with inherit': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'list-style'], ['property-value', 'inherit'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'inherit'] ]); } }, 'outline with some values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'outline'], ['property-value', 'dotted'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'dotted'] ]); } }, 'outline with all values': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'outline'], ['property-value', '#fff'], ['property-value', 'dotted'], ['property-value', '1px'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '#fff'], ['property-value', 'dotted'], ['property-value', '1px'] ]); } }, 'outline with all defaults': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'outline'], ['property-value', 'invert'], ['property-value', 'none'], ['property-value', 'medium'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0'] ]); } }, 'outline with inherit': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'outline'], ['property-value', 'inherit'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'inherit'] ]); } } }, 'animation': { 'with two time units where both are default': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'animation'], ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '0s'], ['property-value', 'forwards'], ['property-value', 'test-name'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'ease-out'], ['property-value', 'forwards'], ['property-value', 'test-name'] ]); } }, 'with two time units where first is default': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'animation'], ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '5s'], ['property-value', 'forwards'], ['property-value', 'test-name'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '5s'], ['property-value', 'forwards'], ['property-value', 'test-name'] ]); } }, 'with two vendor-prefixed time units where first is default': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', '-webkit-animation'], ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '5s'], ['property-value', 'forwards'], ['property-value', 'test-name'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '5s'], ['property-value', 'forwards'], ['property-value', 'test-name'] ]); } } }, 'transition': { 'with two time units where both are default': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'transition'], ['property-value', 'opacity'], ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '0s'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'opacity'], ['property-value', 'ease-out'] ]); } }, 'with two time units where one is default': { 'topic': function () { return _restore( _breakUp([ 'property', ['property-name', 'transition'], ['property-value', 'opacity'], ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '2s'] ]) ); }, 'gives right value back': function (restoredValue) { assert.deepEqual(restoredValue, [ ['property-value', 'opacity'], ['property-value', '0s'], ['property-value', 'ease-out'], ['property-value', '2s'] ]); } } } }) .export(module); clean-css-5.3.3/test/optimizer/level-0/ 0000775 0000000 0000000 00000000000 14532047255 0017646 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/level-0/optimizations-test.js 0000664 0000000 0000000 00000001077 14532047255 0024077 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('level 0') .addBatch( optimizerContext('optimizations', { 'are off': [ 'a{color:#f00;font-weight:bold}p{color:#f00}', 'a{color:#f00;font-weight:bold}p{color:#f00}' ] }, { level: 0 }) ) .addBatch( optimizerContext('empty properties', { 'are written': [ 'a{color:#f00;font-weight:;background:red}', 'a{color:#f00;font-weight:;background:red}' ] }, { level: 0 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-1/ 0000775 0000000 0000000 00000000000 14532047255 0017647 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/level-1/optimize-test.js 0000664 0000000 0000000 00000137625 14532047255 0023040 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; var optimizers = require('../../../lib/optimizer/level-1/value-optimizers'); vows.describe('level 1 optimizations') .addBatch( optimizerContext('selectors', { 'optimized': [ 'a{}', '' ], 'whitespace': [ ' div > span{color:red}', 'div>span{color:red}' ], 'line breaks': [ ' div >\n\r\n span{color:red}', 'div>span{color:red}' ], 'more line breaks': [ '\r\ndiv\n{color:red}', 'div{color:red}' ], '+html': [ '*+html .foo{color:red}', '' ], 'adjacent nav': [ 'div + nav{color:red}', 'div+nav{color:red}' ], 'heading & trailing': [ ' a {color:red}', 'a{color:red}' ], 'descendant selector': [ 'div > a{color:red}', 'div>a{color:red}' ], 'next selector': [ 'div + a{color:red}', 'div+a{color:red}' ], 'sibling selector': [ 'div ~ a{color:red}', 'div~a{color:red}' ], 'pseudo classes': [ 'div :first-child{color:red}', 'div :first-child{color:red}' ], 'pseudo classes - nth-child(1) to first-child': [ '.block:nth-child(1){color:red}', '.block:first-child{color:red}' ], 'pseudo classes - nth-of-type(1) to first-of-type': [ '.block:nth-of-type(1){color:red}', '.block:first-of-type{color:red}' ], 'pseudo classes - nth-of-type(even) to nth-of-type(2n)': [ '.block:nth-of-type(even){color:red}', '.block:nth-of-type(2n){color:red}' ], 'pseudo classes - nth-child(even) to nth-child(2n)': [ '.block:nth-child(even){color:red}', '.block:nth-child(2n){color:red}' ], 'pseudo classes - nth-of-type(2n+1) to nth-of-type(odd)': [ '.block:nth-of-type(2n+1){color:red}', '.block:nth-of-type(odd){color:red}' ], 'pseudo classes - nth-child(2n+1) to nth-child(odd)': [ '.block:nth-child(2n+1){color:red}', '.block:nth-child(odd){color:red}' ], 'pseudo classes - nth-last-child(1) to last-child': [ '.block:nth-last-child(1){color:red}', '.block:last-child{color:red}' ], 'pseudo classes - nth-last-of-type(1) to last-of-type': [ '.block:nth-last-of-type(1){color:red}', '.block:last-of-type{color:red}' ], 'pseudo classes - nth-last-of-type(even) to nth-last-of-type(2n)': [ '.block:nth-last-of-type(even){color:red}', '.block:nth-last-of-type(2n){color:red}' ], 'pseudo classes - nth-last-child(even) to nth-last-child(2n)': [ '.block:nth-last-child(even){color:red}', '.block:nth-last-child(2n){color:red}' ], 'pseudo classes - nth-last-of-type(2n+1) to nth-last-of-type(odd)': [ '.block:nth-last-of-type(2n+1){color:red}', '.block:nth-last-of-type(odd){color:red}' ], 'pseudo classes - nth-last-child(2n+1) to nth-last-child(odd)': [ '.block:nth-last-child(2n+1){color:red}', '.block:nth-last-child(odd){color:red}' ], 'tabs': [ 'div\t\t{color:red}', 'div{color:red}' ], 'universal selector - id, class, and property': [ '* > *#id > *.class > *[property]{color:red}', '*>#id>.class>[property]{color:red}' ], 'universal selector - pseudo': [ '*:first-child{color:red}', ':first-child{color:red}' ], 'universal selector - standalone': [ 'label ~ * + span{color:red}', 'label~*+span{color:red}' ], 'order': [ 'b,div,a{color:red}', 'a,b,div{color:red}' ], 'duplicates': [ 'a,div,.class,.class,a ,div > a{color:red}', '.class,a,div,div>a{color:red}', ], 'mixed': [ ' label ~ \n* + span , div>*.class, section\n\n{color:red}', 'div>.class,label~*+span,section{color:red}' ], 'nth arguments': [ '.block:nth-child(n + 2){color:red}', '.block:nth-child(n+2){color:red}' ], 'escaped joining character #1': [ '.class\\~ div{color:red}', '.class\\~ div{color:red}' ], 'escaped joining character #2': [ '.class\\+\\+ div{color:red}', '.class\\+\\+ div{color:red}' ], 'escaped joining character #3': [ '.class\\> \\~div{color:red}', '.class\\> \\~div{color:red}' ], 'escaped characters': [ '.a\\+\\+b{color:red}', '.a\\+\\+b{color:red}' ], 'quotes #1': [ '.a[title="a b c\'s d e f"]{color:red}', '.a[title="a b c\'s d e f"]{color:red}' ], 'quotes #2': [ '.b[data-json=\'"aaaa":"bbbb"\']{color:red}', '.b[data-json=\'"aaaa":"bbbb"\']{color:red}' ], 'single word case insensitive attribute with quotes': [ '.block[data-value="test" i]{color:red}', '.block[data-value=test i]{color:red}' ], 'multiword case insensitive attribute with quotes': [ '.block[data-value="test me" i]{color:red}', '.block[data-value="test me"i]{color:red}' ], 'single word case insensitive attribute without quotes': [ '.block[data-value=test i]{color:red}', '.block[data-value=test i]{color:red}' ], 'no rule scope': [ '{overflow:hidden}', '' ], 'invalid characters #1': [ '', '' ], 'invalid characters #2': [ '
Text
.funky{background:red}', '' ], 'invalid characters #4 - semicolon': [ 'body;{body}', '' ], 'html comments': [ ' p{color:red} ', 'a{color:red}p{color:red}div{color:red}' ], 'missing semicolon and brace in the middle': [ 'body{color:red a{color:blue;}', '' ], 'null as a selector name': [ '.null{color:red}', '.null{color:red}' ], 'null inside selector name': [ '.block--null{color:red}', '.block--null{color:red}' ] }, { level: 1 }) ) .addBatch( optimizerContext('selectors - sorting when tidySelectors is off', { 'no numbers': [ '.block,.another-block,.one-more-block{color:red}', '.another-block,.block,.one-more-block{color:red}' ] }, { level: { 1: { tidySelectors: false } } }) ) .addBatch( optimizerContext('selectors - natural order', { 'no numbers': [ '.block,.another-block,.one-more-block{color:red}', '.another-block,.block,.one-more-block{color:red}' ], 'some numbers': [ '.block-3,.block-11,.block{color:red}', '.block,.block-3,.block-11{color:red}' ], 'all numbers': [ '.block-3,.block-11,.block-1{color:red}', '.block-1,.block-3,.block-11{color:red}' ], 'complex numbers': [ '.block-1__element-11,.block-1__element-2,.block-12__element-1,.block-3__element-1{color:red}', '.block-1__element-2,.block-1__element-11,.block-3__element-1,.block-12__element-1{color:red}' ], }, { level: { 1: { selectorsSortingMethod: 'natural' } } }) ) .addBatch( optimizerContext('selectors - no sorting', { 'no numbers': [ '.block,.another-block,.one-more-block{color:red}', '.block,.another-block,.one-more-block{color:red}' ], 'complex numbers': [ '.block-1__element-11,.block-1__element-2,.block-12__element-1,.block-3__element-1{color:red}', '.block-1__element-11,.block-1__element-2,.block-12__element-1,.block-3__element-1{color:red}' ], }, { level: { 1: { selectorsSortingMethod: 'none' } } }) ) .addBatch( optimizerContext('selectors - no sorting aliased as `false`', { 'no numbers': [ '.block,.another-block,.one-more-block{color:red}', '.block,.another-block,.one-more-block{color:red}' ], 'complex numbers': [ '.block-1__element-11,.block-1__element-2,.block-12__element-1,.block-3__element-1{color:red}', '.block-1__element-11,.block-1__element-2,.block-12__element-1,.block-3__element-1{color:red}' ], }, { level: { 1: { selectorsSortingMethod: false } } }) ) .addBatch( optimizerContext('selectors - ie8', { '+html': [ '*+html .foo{color:red}', '' ], '+first-child html': [ '*:first-child+html .foo{color:red}', '' ], '+html - complex': [ '*+html .foo,.bar{color:red}', '.bar{color:red}' ] }, { level: 1, compatibility: 'ie8' }) ) .addBatch( optimizerContext('selectors - ie7', { '+html': [ '*+html .foo{color:red}', '*+html .foo{color:red}' ], '+html - complex': [ '*+html .foo,.bar{color:red}', '*+html .foo,.bar{color:red}' ] }, { level: 1, compatibility: 'ie7' }) ) .addBatch( optimizerContext('selectors - adjacent space', { 'with whitespace': [ 'div + nav{color:red}', 'div+ nav{color:red}' ], 'without whitespace': [ 'div+nav{color:red}', 'div+ nav{color:red}' ] }, { level: 1, compatibility: { selectors: { adjacentSpace: true } } }) ) .addBatch( optimizerContext('selectors - rule list in a pseudo class', { 'space is not removed': [ ':host-context(main article){color:red}', ':host-context(main article){color:red}' ], 'extra spaces are removed': [ ':host-context(main article){color:red}', ':host-context(main article){color:red}' ], 'extra spaces with comma are removed': [ ':host-context(main, article){color:red}', ':host-context(main,article){color:red}' ], 'space is not removed in multiple rules': [ ':host-context(main footer),:host-context(main header){color:red}', ':host-context(main footer),:host-context(main header){color:red}' ], 'space is not removed from :not pseudo-class': [ ':not(.block1 .block1__block2){color:red}', ':not(.block1 .block1__block2){color:red}' ], 'space in scoped pseudo class': [ '.container:not(#BorlabsCookieBox .container){max-width:1280px!important}', '.container:not(#BorlabsCookieBox .container){max-width:1280px!important}' ] }, { level: 1 }) ) .addBatch( optimizerContext('selectors - disabled empty removal', { 'no body': [ 'a{}', 'a{}' ], 'body with whitespace': [ 'a{\n}', 'a{}' ], 'body with comment': [ 'a{/* a comment */}', 'a{}' ], 'body with comment and ignored value': [ '.block{/* a comment */_color: red}', '.block{}' ], 'top level comment': [ '/* comment */.block{}', '.block{}' ], '@media query': [ '@media screen{}', '@media screen{}' ] }, { level: { 1: { removeEmpty: false } } }) ) .addBatch( optimizerContext('background', { 'none to 0 0': [ 'a{background:none}', 'a{background:0 0}' ], 'transparent to 0 0': [ 'a{background:transparent}', 'a{background:0 0}' ], 'any other': [ 'a{background:red}', 'a{background:red}' ], 'none to other': [ 'a{background:transparent no-repeat}', 'a{background:transparent no-repeat}' ] }, { level: 1 }) ) .addBatch( optimizerContext('border-*-radius', { 'spaces around /': [ 'a{border-radius:2em / 1em}', 'a{border-radius:2em/1em}' ], 'symmetric expanded to shorthand': [ 'a{border-radius:1em 2em 3em 4em / 1em 2em 3em 4em}', 'a{border-radius:1em 2em 3em 4em}' ], 'asymmetric kept as is': [ 'a{border-top-left-radius:1em 2em}', 'a{border-top-left-radius:1em 2em}' ] }, { level: 1 }) ) .addBatch( optimizerContext('box-shadow', { 'four zeros': [ 'a{box-shadow:0 0 0 0}', 'a{box-shadow:0 0}' ], 'four zeros in vendor prefixed': [ 'a{-webkit-box-shadow:0 0 0 0}', 'a{-webkit-box-shadow:0 0}' ] }, { level: 1 }) ) .addBatch( optimizerContext('colors', { 'rgb to hex': [ 'a{color:rgb(255,254,253)}', 'a{color:#fffefd}' ], 'rgba not to hex': [ 'a{color:rgba(255,254,253,.5)}', 'a{color:rgba(255,254,253,.5)}' ], 'rgba of numbers': [ 'a{color:rgba(255,255,255,50%)}', 'a{color:rgba(255,255,255,50%)}' ], 'rgba of percentages': [ 'a{color:rgba(100%,100%,100%,50%)}', 'a{color:rgba(100%,100%,100%,50%)}' ], 'hsl to hex': [ 'a{color:hsl(240,100%,50%)}', 'a{color:#00f}' ], 'hsla not to hex': [ 'a{color:hsla(240,100%,50%,.5)}', 'a{color:hsla(240,100%,50%,.5)}' ], 'long hex to short hex': [ 'a{color:#ff00ff}', 'a{color:#f0f}' ], 'hex to name': [ 'a{color:#f00}', 'a{color:red}' ], 'name to hex': [ 'a{color:white}', 'a{color:#fff}' ], 'transparent black rgba to transparent': [ 'a{color:rgba(0,0,0,0)}', 'a{color:transparent}' ], 'transparent non-black rgba': [ 'a{color:rgba(255,0,0,0)}', 'a{color:rgba(255,0,0,0)}' ], 'transparent black hsla to transparent': [ 'a{color:hsla(0,0%,0%,0)}', 'a{color:transparent}' ], 'transparent non-black hsla': [ 'a{color:rgba(240,0,0,0)}', 'a{color:rgba(240,0,0,0)}' ], 'space-separated rgb': [ 'a{color:rgba(240 0 0)}', 'a{color:rgba(240 0 0)}' ], 'space-separated rgba': [ 'a{color:rgba(240 0 0 / .1)}', 'a{color:rgba(240 0 0 / .1)}' ], 'space-separated hsl': [ 'a{color:hsla(240 0% 0%)}', 'a{color:hsla(240 0% 0%)}' ], 'space-separated hsla': [ 'a{color:hsla(240 0% 0% / 10%)}', 'a{color:hsla(240 0% 0% / 10%)}' ], 'space-separated hsl with deg': [ 'a{color:hsla(240deg 0% 0%)}', 'a{color:hsla(240deg 0% 0%)}' ], 'space-separated hsla with deg': [ 'a{color:hsla(240deg 0% 0% / .1)}', 'a{color:hsla(240deg 0% 0% / .1)}' ], 'partial hex to name': [ 'a{color:#f00000}', 'a{color:#f00000}' ], 'partial hex further down to name': [ 'a{background:url(test.png) #f00000}', 'a{background:url(test.png) #f00000}' ], 'partial name to hex': [ 'a{color:greyish}', 'a{color:greyish}' ], 'partial name further down to hex': [ 'a{background:url(test.png) blueish}', 'a{background:url(test.png) blueish}' ], 'partial name as a suffix': [ 'a{font-family:alrightsanslp-black}', 'a{font-family:alrightsanslp-black}' ], 'invalid rgba declaration - color': [ 'a{color:rgba(255 0 0)}', 'a{color:rgba(255 0 0)}' ], 'invalid rgba declaration - background': [ 'a{background:rgba(255 0 0)}', 'a{background:rgba(255 0 0)}' ], 'uppercase hex to lowercase hex': [ 'a{color:#FFF}', 'a{color:#fff}' ], 'uppercase long hex to lowercase hex inside gradient 1234': [ '.block{background-image:linear-gradient(to top,#AABBCC,#FFFFFF)}', '.block{background-image:linear-gradient(to top,#abc,#fff)}' ], '4-value hex': [ '.block{color:#0f0a}', '.block{color:#0f0a}' ], '8-value hex': [ '.block{color:#00ff0080}', '.block{color:#00ff0080}' ], 'hsla with variables': [ '.block{color: hsl(0, 0%, calc((var(--button_color_l) - 65) * -100%))}', '.block{color:hsl(0,0%,calc((var(--button_color_l) - 65) * -100%))}' ], 'rgba inside a function #1': [ '.block{background-image:linear-gradient(to right,rgba(255,255,255,0),rgba(255,255,255,1))}', '.block{background-image:linear-gradient(to right,rgba(255,255,255,0),#fff)}' ], 'rgba inside a function #2': [ '.block{background:linear-gradient(hsla(0,0%,98%,.8),hsla(0,0%,98%,.8)) 0 0/100% 1px no-repeat #f0de98}', '.block{background:linear-gradient(hsla(0,0%,98%,.8),hsla(0,0%,98%,.8)) 0 0/100% 1px no-repeat #f0de98}' ] }, { level: 1 }) ) .addBatch( optimizerContext('colors - ie8 compatibility', { 'transparent black rgba': [ 'a{color:rgba(0,0,0,0)}', 'a{color:rgba(0,0,0,0)}' ], 'transparent non-black rgba': [ 'a{color:rgba(255,0,0,0)}', 'a{color:rgba(255,0,0,0)}' ], 'transparent black hsla': [ 'a{color:hsla(0,0%,0%,0)}', 'a{color:hsla(0,0%,0%,0)}' ], 'transparent non-black hsla': [ 'a{color:rgba(240,0,0,0)}', 'a{color:rgba(240,0,0,0)}' ] }, { level: 1, compatibility: 'ie8' }) ) .addBatch( optimizerContext('colors - ie7 compatibility', { '8-value hex in gradient': [ '.block{filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr= #66000000, endColorstr= #66000000)}', '.block{filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr=#66000000, endColorstr=#66000000)}' ] }, { level: 1, compatibility: 'ie7' }) ) .addBatch( optimizerContext('colors - no optimizations', { 'long hex into short': [ 'a{color:#ff00ff}', 'a{color:#ff00ff}' ], 'short hex into name': [ 'a{color:#f00}', 'a{color:#f00}' ], 'name into hex': [ 'a{color:white}', 'a{color:white}' ], 'hsl zeros': [ 'a{color:hsl(0,0%,100%)}', 'a{color:hsl(0,0%,100%)}' ] }, { level: 1, compatibility: { properties: { colors: false } } }) ) .addBatch( optimizerContext('filter', { 'legacy standard': [ 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#cccccc\',endColorstr=\'#000000\', enabled=true)}', '' ], 'legacy alpha shorthand': [ 'a{filter:alpha(Opacity=80)}', '' ], 'legacy chroma shorthand': [ 'a{filter:chroma(color=#919191)}', '' ], 'legacy -ms-filter': [ 'a{-ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#cccccc\',endColorstr=\'#000000\', enabled=true);-ms-filter:chroma(color=#000000)}', '' ], 'new filters': [ '.block{filter:sepia(60%)}', '.block{filter:sepia(60%)}' ] }, { level: 1 }) ) .addBatch( optimizerContext('filter when preserved', { 'spaces after comma': [ 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#cccccc\',endColorstr=\'#000000\', enabled=true)}', 'a{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#cccccc\', endColorstr=\'#000000\', enabled=true)}' ], 'single Alpha filter': [ 'a{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}', 'a{filter:alpha(Opacity=80)}' ], 'single Chroma filter': [ 'a{filter:progid:DXImageTransform.Microsoft.Chroma(color=#919191)}', 'a{filter:chroma(color=#919191)}' ], 'multiple filters': [ 'a{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80) progid:DXImageTransform.Microsoft.Chroma(color=#919191)}', 'a{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80) progid:DXImageTransform.Microsoft.Chroma(color=#919191)}' ] }, { compatibility: 'ie9', level: 1 }) ) .addBatch( optimizerContext('font', { 'in shorthand': [ 'a{font:normal 13px/20px sans-serif}', 'a{font:normal 13px/20px sans-serif}' ], 'in shorthand with fractions': [ 'a{font:bold .9em sans-serif}', 'a{font:bold .9em sans-serif}' ], 'with font wariant and style': [ 'a{font:normal normal normal 13px/20px sans-serif}', 'a{font:normal normal normal 13px/20px sans-serif}' ], 'with mixed order of variant and style': [ 'a{font:normal 300 normal 13px/20px sans-serif}', 'a{font:normal 300 normal 13px/20px sans-serif}' ], 'with mixed normal and weight': [ 'a{font:normal small-caps 400 medium Georgia,sans-serif}', 'a{font:normal small-caps 400 medium Georgia,sans-serif}' ], 'with line height': [ 'a{font:11px/normal sans-serif}', 'a{font:11px/normal sans-serif}' ], 'with mixed bold weight and variant #1': [ 'a{font:normal bold 17px sans-serif}', 'a{font:normal bold 17px sans-serif}' ], 'with mixed bold weight and variant #2': [ 'a{font:bold normal 17px sans-serif}', 'a{font:bold normal 17px sans-serif}' ], 'with color in local font name': [ '@font-face{src:local("Sans Black Italic")}', '@font-face{src:local("Sans Black Italic")}', ] }, { level: 1 }) ) .addBatch( optimizerContext('font-weight', { 'normal to 400': [ 'a{font-weight:normal}', 'a{font-weight:400}' ], 'bold to 700': [ 'a{font-weight:bold}', 'a{font-weight:700}' ], 'any other': [ 'a{font-weight:bolder}', 'a{font-weight:bolder}' ] }, { level: 1 }) ) .addBatch( optimizerContext('font-weight - when disabled', { 'normal to 400': [ 'a{font-weight:normal}', 'a{font-weight:normal}' ], 'bold to 700': [ 'a{font-weight:bold}', 'a{font-weight:bold}' ], 'any other': [ 'a{font-weight:bolder}', 'a{font-weight:bolder}' ], 'in shorthand': [ 'a{font:normal 13px/20px sans-serif}', 'a{font:normal 13px/20px sans-serif}' ], 'in shorthand with fractions': [ 'a{font:bold .9em sans-serif}', 'a{font:bold .9em sans-serif}' ] }, { level: { 1: { optimizeFontWeight: false } } }) ) .addBatch( optimizerContext('ie hacks', { 'underscore': [ 'a{_width:101px}', '' ], 'asterisk': [ 'a{*width:101px}', '' ], '\\0 backslash': [ 'a{width:101px\\0}', '' ], '\\9 backslash': [ 'a{width:101px\\9}', '' ], 'bang': [ 'a{color:red !ie}', '' ], 'before content': [ 'a{*width:101px;color:red!important}', 'a{color:red!important}' ] }, { level: 1 }) ) .addBatch( optimizerContext('ie hacks in IE11 mode', { 'underscore': [ 'a{_width:101px}', '' ], 'asterisk': [ 'a{*width:101px}', '' ], '\\0 backslash': [ 'a{width:101px\\0}', 'a{width:101px\\0}' ], '\\9 backslash': [ 'a{width:101px\\9}', 'a{width:101px\\9}' ], 'bang': [ 'a{color:red !ie}', '' ] }, { level: 1, compatibility: 'ie11' }) ) .addBatch( optimizerContext('ie hacks in IE10 mode', { 'underscore': [ 'a{_width:101px}', '' ], 'asterisk': [ 'a{*width:101px}', '' ], '\\0 backslash': [ 'a{width:101px\\0}', 'a{width:101px\\0}' ], '\\9 backslash': [ 'a{width:101px\\9}', 'a{width:101px\\9}' ], 'bang': [ 'a{color:red !ie}', '' ] }, { level: 1, compatibility: 'ie10' }) ) .addBatch( optimizerContext('ie hacks in IE9 mode', { 'underscore': [ 'a{_width:101px}', '' ], 'asterisk': [ 'a{*width:101px}', '' ], '\\0 backslash': [ 'a{width:101px\\0}', 'a{width:101px\\0}' ], '\\9 backslash': [ 'a{width:101px\\9}', 'a{width:101px\\9}' ], 'bang': [ 'a{color:red !ie}', '' ] }, { level: 1, compatibility: 'ie9' }) ) .addBatch( optimizerContext('ie hacks in IE8 mode', { 'underscore': [ 'a{_width:101px}', 'a{_width:101px}' ], 'asterisk': [ 'a{*width:101px}', 'a{*width:101px}' ], '\\0 backslash': [ 'a{width:101px\\0}', 'a{width:101px\\0}' ], '\\9 backslash': [ 'a{width:101px\\9}', 'a{width:101px\\9}' ], 'bang': [ 'a{color:red !ie}', '' ] }, { level: 1, compatibility: 'ie8' }) ) .addBatch( optimizerContext('ie hacks in IE7 mode', { 'underscore': [ 'a{_width:101px}', 'a{_width:101px}' ], 'asterisk': [ 'a{*width:101px}', 'a{*width:101px}' ], '\\0 backslash': [ 'a{width:101px\\0}', 'a{width:101px\\0}' ], '\\9 backslash': [ 'a{width:101px\\9}', 'a{width:101px\\9}' ], 'bang': [ 'a{color:red !ie}', 'a{color:red !ie}' ] }, { level: 1, compatibility: 'ie7' }) ) .addBatch( optimizerContext('important', { 'minified': [ 'a{color:red!important}', 'a{color:red!important}' ], 'space before !': [ 'a{color:red !important}', 'a{color:red!important}', ], 'space after !': [ 'a{color:red! important}', 'a{color:red!important}' ] }, { level: 1 }) ) .addBatch( optimizerContext('outline', { 'none to 0': [ 'a{outline:none}', 'a{outline:0}' ], 'any other': [ 'a{outline:10px}', 'a{outline:10px}' ], 'none and any other': [ 'a{outline:none solid 1px}', 'a{outline:none solid 1px}' ] }, { level: 1 }) ) .addBatch( optimizerContext('rounding', { 'pixels': [ 'a{transform:translateY(123.31135px)}', 'a{transform:translateY(123.311px)}' ], 'percents': [ 'a{left:20.1231%}', 'a{left:20.123%}' ], 'ems': [ 'a{left:1.1231em}', 'a{left:1.123em}' ], 'inside strings': [ '.block{background-image:image-set(url("//s1.server.com/img.png") 1x)}', '.block{background-image:image-set(url("//s1.server.com/img.png") 1x)}' ] }, { level: { 1: { roundingPrecision: 3 } } }) ) .addBatch( optimizerContext('rounding disabled', { 'pixels': [ 'a{transform:translateY(123.31135px)}', 'a{transform:translateY(123.31135px)}' ], 'percents': [ 'a{left:20.1231%}', 'a{left:20.1231%}' ], 'ems': [ 'a{left:1.1231em}', 'a{left:1.1231em}' ], 'inside strings': [ '.block{background-image:image-set(url("//s1.server.com/img.png") 1x)}', '.block{background-image:image-set(url("//s1.server.com/img.png") 1x)}' ] }, { level: { 1: { roundingPrecision: 'off' } } }) ) .addBatch( optimizerContext('rounding disabled when option value not castable to int', { 'pixels': [ 'a{transform:translateY(123.31135px)}', 'a{transform:translateY(123.31135px)}' ], 'percents': [ 'a{left:20.1231%}', 'a{left:20.1231%}' ], 'ems': [ 'a{left:1.1231em}', 'a{left:1.1231em}' ] }, { level: { 1: { roundingPrecision: '\'-1\'' } } }) ) .addBatch( optimizerContext('fine-grained rounding', { 'pixels': [ 'a{transform:translateY(123.31135px)}', 'a{transform:translateY(123px)}' ], 'percents': [ 'a{left:20.1231%}', 'a{left:20.1%}' ], 'ems': [ 'a{left:1.1231em}', 'a{left:1.12em}' ] }, { level: { 1: { roundingPrecision: '*=2,%=1,px=0' } } }) ) .addBatch( optimizerContext('units', { 'pixels': [ 'a{width:0px}', 'a{width:0}' ], 'degrees': [ 'div{background:linear-gradient(0deg,red,#fff)}', 'div{background:linear-gradient(0deg,red,#fff)}' ], 'degrees when not mixed': [ 'div{transform:rotate(0deg) skew(0deg)}', 'div{transform:rotate(0) skew(0)}' ], 'non-zero degrees when not mixed': [ 'div{transform:rotate(10deg) skew(.5deg)}', 'div{transform:rotate(10deg) skew(.5deg)}' ], 'ch': [ 'div{width:0ch;height:0ch}', 'div{width:0;height:0}' ], 'rem': [ 'div{width:0rem;height:0rem}', 'div{width:0;height:0}' ], 'vh': [ 'div{width:0vh;height:0vh}', 'div{width:0;height:0}' ], 'vm': [ 'div{width:0vm;height:0vm}', 'div{width:0;height:0}' ], 'vmax': [ 'div{width:0vmax;height:0vmax}', 'div{width:0;height:0}' ], 'vmin': [ 'div{width:0vmin;height:0vmin}', 'div{width:0;height:0}' ], 'vw': [ 'div{width:0vw;height:0vw}', 'div{width:0;height:0}' ], 'mixed units': [ 'a{margin:0em 0rem 0px 0pt}', 'a{margin:0}' ], 'mixed values #1': [ 'a{padding:10px 0em 30% 0rem}', 'a{padding:10px 0 30% 0}' ], 'mixed values #2': [ 'a{padding:10ch 0vm 30vmin 0vw}', 'a{padding:10ch 0 30vmin 0}' ], 'inside calc': [ 'a{font-size:calc(100% + 0px)}', 'a{font-size:calc(100% + 0px)}' ], 'flex': [ 'a{flex:1 0 0%}', 'a{flex:1 0 0%}' ], 'flex–basis': [ 'a{flex-basis:0%}', 'a{flex-basis:0%}' ], 'prefixed flex': [ 'a{-ms-flex:1 0 0px;-webkit-flex:1 0 0px}', 'a{-ms-flex:1 0 0px;-webkit-flex:1 0 0px}' ], 'prefixed flex–basis': [ 'a{-webkit-flex-basis:0px}', 'a{-webkit-flex-basis:0px}' ] }, { level: 1 }) ) .addBatch( optimizerContext('units in compatibility mode', { 'pixels': [ 'a{width:0px}', 'a{width:0}' ], 'mixed units': [ 'a{margin:0em 0rem 0px 0pt}', 'a{margin:0 0rem 0 0}' ], 'mixed values #1': [ 'a{padding:10px 0em 30% 0rem}', 'a{padding:10px 0 30% 0rem}' ], 'mixed values #2': [ 'a{padding:10ch 0vm 30vmin 0vw}', 'a{padding:10ch 0vm 30vmin 0vw}' ] }, { level: 1, compatibility: 'ie8' }) ) .addBatch( optimizerContext('rpx unit when disabled in level 1', { 'is kept': [ '.block{border:2rpx solid #ddd}', '.block{border:2rpx solid #ddd}' ] }, { level: 1 }) ) .addBatch( optimizerContext('rpx unit when disabled in level 2', { 'is removed': [ '.block{border:2rpx solid #ddd}', '.block{border:solid #ddd}' ] }, { level: 2 }) ) .addBatch( optimizerContext('rpx unit when enabled in level 2', { 'is removed': [ '.block{border:2rpx solid #ddd}', '.block{border:2rpx solid #ddd}' ] }, { level: 2, compatibility: { customUnits: { rpx: true } } }) ) .addBatch( optimizerContext('zeros', { '-0 to 0': [ 'a{margin:-0}', 'a{margin:0}' ], '-0px to 0': [ 'a{margin:-0px}', 'a{margin:0}' ], '-0% to 0': [ 'a{min-width:-0%}', 'a{min-width:0}' ], 'missing': [ 'a{opacity:1.}', 'a{opacity:1.}' ], 'multiple': [ 'a{margin:-0 -0 -0 -0}', 'a{margin:0}' ], 'keeps negative non-zero': [ 'a{margin:-0.5em}', 'a{margin:-.5em}' ], 'inside names #1': [ 'div{animation-name:test-0-bounce}', 'div{animation-name:test-0-bounce}' ], 'inside names #2': [ 'div{animation-name:test-0bounce}', 'div{animation-name:test-0bounce}' ], 'inside names #3': [ 'div{animation-name:test-0px}', 'div{animation-name:test-0px}' ], 'strips leading from value': [ 'a{padding:010px 0015px}', 'a{padding:10px 15px}' ], 'strips leading from fractions': [ 'a{margin:-0.5em}', 'a{margin:-.5em}' ], 'strips trailing from opacity': [ 'a{opacity:1.0}', 'a{opacity:1}' ], '.0 to 0': [ 'a{margin:.0 .0 .0 .0}', 'a{margin:0}' ], 'fraction zeros': [ 'a{margin:10.0em 15.50em 10.01em 0.0em}', 'a{margin:10em 15.5em 10.01em 0}' ], 'four zeros into one': [ 'a{margin:0 0 0 0}', 'a{margin:0}' ], 'rect zeros': [ 'a{clip:rect(0px 0px 0px 0px)}', 'a{clip:rect(0 0 0 0)}' ], 'rect zeros with non-zero value': [ 'a{clip:rect(0.5% 0px 0px 0px)}', 'a{clip:rect(.5% 0 0 0)}' ], 'rect zeros with commas': [ 'a{clip:rect(0px, 0px, 0px, 0px)}', 'a{clip:rect(0,0,0,0)}' ], 'height': [ 'a{height:0%}', 'a{height:0%}' ], 'min-height': [ 'a{min-height:0%}', 'a{min-height:0}' ], 'max-height': [ 'a{max-height:0%}', 'a{max-height:0%}' ], 'width': [ 'a{width:0%}', 'a{width:0%}' ], 'min-width': [ 'a{min-width:0%}', 'a{min-width:0}' ], 'max-width': [ 'a{max-width:0%}', 'a{max-width:0%}' ], 'zero inside min function': [ '.block{width:min(0px, 30px)}', '.block{width:min(0px,30px)}' ], 'zero inside max function': [ '.block{width:max(0px, 30px)}', '.block{width:max(0px,30px)}' ], 'zero inside clamp function': [ '.block{width:clamp(0rem, 2.5vw, 2rem)}', '.block{width:clamp(0rem,2.5vw,2rem)}' ], 'inside calc inside a gradient': [ '.block{background:linear-gradient(red 0rem calc(50% - 0rem),#00f calc(50% + 0rem) 100%)}', '.block{background:linear-gradient(red 0 calc(50% - 0rem),#00f calc(50% + 0rem) 100%)}' ] }, { level: 1 }) ) .addBatch( optimizerContext('zeros - rounding', { 'fractions are removed': [ 'a{margin:10.0010px}', 'a{margin:10px}' ] }, { level: { 1: { roundingPrecision: 2 } } }) ) .addBatch( optimizerContext('zeros with disabled zeroUnits', { '10.0em': [ 'a{margin:10.0em}', 'a{margin:10em}' ], '0px': [ 'a{margin:0px}', 'a{margin:0px}' ], '0px 0px': [ 'a{margin:0px 0px}', 'a{margin:0px 0px}' ], '0deg': [ 'div{transform:rotate(0deg) skew(0deg)}', 'div{transform:rotate(0deg) skew(0deg)}' ], '0%': [ 'a{height:0%}', 'a{height:0%}' ], '10%': [ 'a{width:10%}', 'a{width:10%}' ] }, { level: 1, compatibility: { properties: { zeroUnits: false } } }) ) .addBatch( optimizerContext('comments', { 'comment': [ 'a{/*! comment 1 */color:red/*! comment 2 */}', 'a{/*! comment 1 */color:red/*! comment 2 */}' ] }, { level: 1 }) ) .addBatch( optimizerContext('whitespace', { 'stripped spaces': [ 'div{text-shadow:rgba(255,1,1,.5) 1px}', 'div{text-shadow:rgba(255,1,1,.5) 1px}' ], 'calc': [ 'a{width:-moz-calc(100% - 1em);width:calc(100% - 1em)}', 'a{width:-moz-calc(100% - 1em);width:calc(100% - 1em)}' ], 'empty body': [ 'a{}', '' ], 'in a body': [ 'a{ \n }', '' ], 'after calc()': [ 'div{margin:calc(100% - 21px) 1px}', 'div{margin:calc(100% - 21px) 1px}' ], '*nix line break inside property': [ 'a{border:2px\nsolid}', 'a{border:2px solid}' ], 'windows line break inside property': [ 'a{border:2px\r\nsolid}', 'a{border:2px solid}' ], 'tab inside property': [ 'a{border:2px\tsolid}', 'a{border:2px solid}' ], 'line breaks and special comments inside a rule': [ 'a{\ncolor:red;\n/*!*/\n\n\n\n\n\n\n/*!*/\n}', 'a{color:red/*!*//*!*/}' ], 'inside URL': [ 'a{background:url( "about:blank" )}', 'a{background:url("about:blank")}' ] }, { level: 1 }) ) .addBatch( optimizerContext('time units', { 'positive miliseconds to seconds': [ 'div{transition-duration:500ms}', 'div{transition-duration:.5s}' ], 'negative miliseconds to seconds': [ 'div{transition-duration:-500ms}', 'div{transition-duration:-.5s}' ], 'miliseconds to seconds when results in a too long value': [ 'div{transition-duration:1515ms}', 'div{transition-duration:1515ms}' ], 'zero miliseconds to seconds': [ 'div{transition-duration:0ms}', 'div{transition-duration:0s}' ], 'positive seconds to miliseconds': [ 'div{transition-duration:0.005s}', 'div{transition-duration:5ms}' ], 'negative seconds to miliseconds': [ 'div{transition-duration:-0.005s}', 'div{transition-duration:-5ms}' ], 'seconds to miliseconds when results in a too long value': [ 'div{transition-duration:1.2s}', 'div{transition-duration:1.2s}' ] }, { level: 1 }) ) .addBatch( optimizerContext('length units', { 'px to in': [ 'div{left:480px}', 'div{left:480px}' ], 'px to pc': [ 'div{left:32px}', 'div{left:32px}' ], 'px to pt': [ 'div{left:120px}', 'div{left:120px}' ] }, { level: 1 }) ) .addBatch( optimizerContext('length units in compatibility mode', { 'px to in': [ 'div{left:480px}', 'div{left:480px}' ], 'px to pc': [ 'div{left:32px}', 'div{left:32px}' ], 'px to pt': [ 'div{left:120px}', 'div{left:120px}' ] }, { level: 1, compatibility: 'ie8' }) ) .addBatch( optimizerContext('length units when turned on', { 'positive px to in': [ 'div{left:480px}', 'div{left:5in}' ], 'negative px to in': [ 'div{left:-96px}', 'div{left:-1in}' ], 'positive px to pc': [ 'div{left:32px}', 'div{left:2pc}' ], 'negative px to pc': [ 'div{left:-160px}', 'div{left:-10pc}' ], 'positive px to pt': [ 'div{left:120px}', 'div{left:90pt}' ], 'negative px to pt': [ 'div{left:-120px}', 'div{left:-90pt}' ], 'in calc': [ 'div{left:calc(100% - 480px)}', 'div{left:calc(100% - 5in)}' ], 'in transform': [ 'div{transform:translateY(32px)}', 'div{transform:translateY(2pc)}' ] }, { level: 1, compatibility: { properties: { shorterLengthUnits: true } } }) ) .addBatch( optimizerContext('length units when turned on selectively', { 'px to in': [ 'div{left:480px}', 'div{left:30pc}' ], 'px to pc': [ 'div{left:32px}', 'div{left:2pc}' ], 'px to pt': [ 'div{left:120px}', 'div{left:120px}' ] }, { level: 1, compatibility: { properties: { shorterLengthUnits: true }, units: { in: false, pt: false } } }) ) .addBatch( optimizerContext('property name validation', { 'trimmed': [ 'a{-webkit-:0 0 2px red}', '' ], 'with incorrect characters': [ 'a{color+other:red}', '' ], 'for chrome only': [ 'a{-chrome-:only(;color:red;)}', 'a{-chrome-:only(;color:red;)}' ], 'custom vendor prefix': [ 'a{-custom-color:red}', 'a{-custom-color:red}' ] }, { level: 1 }) ) .addBatch( optimizerContext('quotes', { 'font-family': [ '.block{font-family:"Arial"}', '.block{font-family:Arial}' ], 'variable': [ '.block{--font-family:"Arial"}', '.block{--font-family:"Arial"}' ], 'font-feature-settings': [ '.block{font-feature-settings:"scmp" on}', '.block{font-feature-settings:"scmp" on}' ], '-webkit-font-feature-settings': [ '.block{-webkit-font-feature-settings:"scmp","swsh" 2}', '.block{-webkit-font-feature-settings:"scmp","swsh" 2}' ], 'grid': [ '.block{grid:"header" 20% "nav" auto/auto}', '.block{grid:"header" 20% "nav" auto/auto}' ], 'grid-template': [ '.block{grid-template:"header" 20% "nav" auto}', '.block{grid-template:"header" 20% "nav" auto}' ], 'grid-template-areas - single word': [ '.block{grid-template-areas:"header" "nav" "body"}', '.block{grid-template-areas:"header" "nav" "body"}' ], 'grid-template-areas - multiple words': [ '.block{grid-template-areas:"header header" "nav" "body"}', '.block{grid-template-areas:"header header" "nav" "body"}' ], 'vendor prefixed grid-template': [ '.block{-ms-grid-template:"header" 20% "nav" auto}', '.block{-ms-grid-template:"header" 20% "nav" auto}' ] }, { level: 1 }) ) .addBatch( optimizerContext('variable declaration', { 'with whitespace as value': [ 'a{--test: }', 'a{--test: }' ], 'multiple variables': [ 'a{--test1: ;--test2: }', 'a{--test1: ;--test2: }' ], }, { level: 1 }) ) .addBatch( optimizerContext('@charset cleanup off', { 'stays where it is': [ '.block{color:#f10}@charset \'utf-8\';b{font-weight:bolder}', '.block{color:#f10}@charset \'utf-8\';b{font-weight:bolder}' ] }, { level: { 1: { cleanupCharsets: false } } }) ) .addBatch( optimizerContext('URL normalization off', { 'stays as it is': [ '.block{background:URL(image.png)}', '.block{background:URL(image.png)}' ] }, { rebase: false, level: { 1: { normalizeUrls: false } } }) ) .addBatch( optimizerContext('background optimizations off', { 'stays as it is': [ '.block{background:transparent}', '.block{background:transparent}' ] }, { level: { 1: { optimizeBackground: false } } }) ) .addBatch( optimizerContext('border-radius optimizations off', { 'stays as it is': [ '.block{border-radius:2px 3px/2px 3px}', '.block{border-radius:2px 3px/2px 3px}' ] }, { level: { 1: { optimizeBorderRadius: false } } }) ) .addBatch( optimizerContext('filter optimizations off', { 'stays as it is': [ '.block{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}', '.block{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}' ] }, { compatibility: 'ie9', level: { 1: { optimizeFilter: false } } }) ) .addBatch( optimizerContext('font optimizations off', { 'stays as it is': [ '.block{font:normal Arial,sans-serif}', '.block{font:normal Arial,sans-serif}' ] }, { level: { 1: { optimizeFont: false } } }) ) .addBatch( optimizerContext('font-weight optimizations off', { 'stays as it is': [ '.block{font-weight:bold}', '.block{font-weight:bold}' ], 'stays as it is in font': [ '.block{font:normal Arial,sans-serif}', '.block{font:normal Arial,sans-serif}' ] }, { level: { 1: { optimizeFontWeight: false } } }) ) .addBatch( optimizerContext('outline optimizations off', { 'stays as it is': [ '.block{outline:none}', '.block{outline:none}' ] }, { level: { 1: { optimizeOutline: false } } }) ) .addBatch( optimizerContext('negative padding optimizations off', { 'stays as it is': [ '.block{padding:-2px}', '.block{padding:-2px}' ] }, { level: { 1: { removeNegativePaddings: false } } }) ) .addBatch( optimizerContext('quotes optimizations off', { 'stays as it is': [ '.block{font:"Arial"}', '.block{font:"Arial"}' ] }, { level: { 1: { removeQuotes: false } } }) ) .addBatch( optimizerContext('whitespace optimizations off', { 'stays as it is': [ '.block{clip:rect(0, 0, 0, 0)}', '.block{clip:rect(0, 0, 0, 0)}' ] }, { level: { 1: { removeWhitespace: false } } }) ) .addBatch( optimizerContext('replace multiple zeros optimization off', { 'stays as it is': [ '.block{margin:0 0 0 0}', '.block{margin:0 0 0 0}' ] }, { level: { 1: { replaceMultipleZeros: false } } }) ) .addBatch( optimizerContext('replace time units optimizations off', { 'stays as it is': [ '.block{animation-duration:500ms}', '.block{animation-duration:500ms}' ] }, { level: { 1: { replaceTimeUnits: false } } }) ) .addBatch( optimizerContext('replace zero units optimizations off', { 'stays as it is': [ '.block{margin:010px}', '.block{margin:010px}' ] }, { level: { 1: { replaceZeroUnits: false } } }) ) .addBatch( optimizerContext('tidy at-rules optimizations off', { 'stays as it is': [ '@charset "utf-8";', '@charset "utf-8";' ] }, { level: { 1: { tidyAtRules: false } } }) ) .addBatch( optimizerContext('tidy block scopes optimizations off', { 'stays as it is': [ '@media ( min-width: 50px ){.block{color:red}}', '@media ( min-width: 50px ){.block{color:red}}' ] }, { level: { 1: { tidyBlockScopes: false } } }) ) .addBatch( optimizerContext('tidy block space after closing brace', { 'removes space in @media': [ '@media (min-width:50px) and print{.block{color:red}}', '@media (min-width:50px)and print{.block{color:red}}' ], 'keeps space in @supports': [ '@supports (filter:blur(1px)) or (-webkit-filter:blur(1px)){.block{color:red}}', '@supports (filter:blur(1px)) or (-webkit-filter:blur(1px)){.block{color:red}}' ] }, { compatibility: { properties: { spaceAfterClosingBrace: false } }, level: 1 }) ) .addBatch( optimizerContext('tidy block scopes optimizations off', { 'stays as it is': [ '.block > .another-block{color:red}', '.block > .another-block{color:red}' ] }, { level: { 1: { tidySelectors: false } } }) ) .addBatch( optimizerContext('all optimizations off via `all` keyword', { 'stays as it is': [ '.block > .another-block{animation-duration:500ms;font:"Arial";margin:010px}', '.block > .another-block{animation-duration:500ms;font:"Arial";margin:010px}' ] }, { level: { 1: { all: false } } }) ) .addBatch( optimizerContext('variable optimizations without optimizers given', { 'removes whitespace': [ '.block{--custom: #ff0000}', '.block{--custom:#ff0000}' ] }) ) .addBatch( optimizerContext('variable optimizations with optimizers given', { 'optimizes colors': [ '.block{--custom: #ff0000}', '.block{--custom:red}' ], 'optimizes precision': [ '.block{--custom: 0.12125111111rem}', '.block{--custom:0.121rem}' ] }, {level: { 1: { roundingPrecision: 3, variableValueOptimizers: [optimizers.color, optimizers.precision] } } }) ) .addBatch( optimizerContext('variable optimizations with optimizers given as strings', { 'optimizes colors': [ '.block{--custom: #ff0000}', '.block{--custom:red}' ], 'optimizes precision': [ '.block{--custom: 0.12125111111rem}', '.block{--custom:0.121rem}' ] }, {level: { 1: { roundingPrecision: 3, variableValueOptimizers: ['color', 'precision'] } } }) ) .addBatch( optimizerContext('variable optimizations with invalid optimizers', { 'optimizes colors': [ '.block{--custom: #ff0000}', '.block{--custom:#ff0000}' ], 'optimizes precision': [ '.block{--custom: 0.12125111111rem}', '.block{--custom:0.12125111111rem}' ] }, {level: { 1: { variableValueOptimizers: ['boom!'] } } }) ) .export(module); clean-css-5.3.3/test/optimizer/level-1/value-optimizers/ 0000775 0000000 0000000 00000000000 14532047255 0023166 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/level-1/value-optimizers/color/ 0000775 0000000 0000000 00000000000 14532047255 0024304 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/level-1/value-optimizers/color/shorten-hex-test.js 0000664 0000000 0000000 00000010413 14532047255 0030062 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var shortenHex = require('../../../../../lib/optimizer/level-1/value-optimizers/color/shorten-hex'); var COLORS = { aliceblue: '#f0f8ff', antiquewhite: '#faebd7', aqua: '#0ff', aquamarine: '#7fffd4', azure: '#f0ffff', beige: '#f5f5dc', bisque: '#ffe4c4', black: '#000', blanchedalmond: '#ffebcd', blue: '#00f', blueviolet: '#8a2be2', brown: '#a52a2a', burlywood: '#deb887', cadetblue: '#5f9ea0', chartreuse: '#7fff00', chocolate: '#d2691e', coral: '#ff7f50', cornflowerblue: '#6495ed', cornsilk: '#fff8dc', crimson: '#dc143c', cyan: '#0ff', darkblue: '#00008b', darkcyan: '#008b8b', darkgoldenrod: '#b8860b', darkgray: '#a9a9a9', darkgreen: '#006400', darkgrey: '#a9a9a9', darkkhaki: '#bdb76b', darkmagenta: '#8b008b', darkolivegreen: '#556b2f', darkorange: '#ff8c00', darkorchid: '#9932cc', darkred: '#8b0000', darksalmon: '#e9967a', darkseagreen: '#8fbc8f', darkslateblue: '#483d8b', darkslategray: '#2f4f4f', darkslategrey: '#2f4f4f', darkturquoise: '#00ced1', darkviolet: '#9400d3', deeppink: '#ff1493', deepskyblue: '#00bfff', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1e90ff', firebrick: '#b22222', floralwhite: '#fffaf0', forestgreen: '#228b22', fuchsia: '#f0f', gainsboro: '#dcdcdc', ghostwhite: '#f8f8ff', gold: '#ffd700', goldenrod: '#daa520', gray: '#808080', green: '#008000', greenyellow: '#adff2f', grey: '#808080', honeydew: '#f0fff0', hotpink: '#ff69b4', indianred: '#cd5c5c', indigo: '#4b0082', ivory: '#fffff0', khaki: '#f0e68c', lavender: '#e6e6fa', lavenderblush: '#fff0f5', lawngreen: '#7cfc00', lemonchiffon: '#fffacd', lightblue: '#add8e6', lightcoral: '#f08080', lightcyan: '#e0ffff', lightgoldenrodyellow: '#fafad2', lightgray: '#d3d3d3', lightgreen: '#90ee90', lightgrey: '#d3d3d3', lightpink: '#ffb6c1', lightsalmon: '#ffa07a', lightseagreen: '#20b2aa', lightskyblue: '#87cefa', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#b0c4de', lightyellow: '#ffffe0', lime: '#0f0', limegreen: '#32cd32', linen: '#faf0e6', magenta: '#ff00ff', maroon: '#800000', mediumaquamarine: '#66cdaa', mediumblue: '#0000cd', mediumorchid: '#ba55d3', mediumpurple: '#9370db', mediumseagreen: '#3cb371', mediumslateblue: '#7b68ee', mediumspringgreen: '#00fa9a', mediumturquoise: '#48d1cc', mediumvioletred: '#c71585', midnightblue: '#191970', mintcream: '#f5fffa', mistyrose: '#ffe4e1', moccasin: '#ffe4b5', navajowhite: '#ffdead', navy: '#000080', oldlace: '#fdf5e6', olive: '#808000', olivedrab: '#6b8e23', orange: '#ffa500', orangered: '#ff4500', orchid: '#da70d6', palegoldenrod: '#eee8aa', palegreen: '#98fb98', paleturquoise: '#afeeee', palevioletred: '#db7093', papayawhip: '#ffefd5', peachpuff: '#ffdab9', peru: '#cd853f', pink: '#ffc0cb', plum: '#dda0dd', powderblue: '#b0e0e6', purple: '#800080', rebeccapurple: '#663399', red: '#f00', rosybrown: '#bc8f8f', royalblue: '#4169e1', saddlebrown: '#8b4513', salmon: '#fa8072', sandybrown: '#f4a460', seagreen: '#2e8b57', seashell: '#fff5ee', sienna: '#a0522d', silver: '#c0c0c0', skyblue: '#87ceeb', slateblue: '#6a5acd', slategray: '#708090', slategrey: '#708090', snow: '#fffafa', springgreen: '#00ff7f', steelblue: '#4682b4', tan: '#d2b48c', teal: '#008080', thistle: '#d8bfd8', tomato: '#ff6347', turquoise: '#40e0d0', violet: '#ee82ee', wheat: '#f5deb3', white: '#fff', whitesmoke: '#f5f5f5', yellow: '#ff0', yellowgreen: '#9acd32' }; function colorShorteningContext() { var context = {}; function shortened(target) { return function (source) { assert.equal(shortenHex(source), target); }; } for (var name in COLORS) { var hex = COLORS[name]; var from, to; if (hex == COLORS.gray) name = 'grey'; if (hex.length <= name.length) { from = name; to = hex; } else { from = hex; to = name; } context['should turn \'' + from + '\' into \'' + to + '\''] = { topic: from, shortened: shortened(to) }; } return context; } vows.describe(shortenHex) .addBatch(colorShorteningContext()) .export(module); clean-css-5.3.3/test/optimizer/level-2/ 0000775 0000000 0000000 00000000000 14532047255 0017650 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/level-2/extract-properties-test.js 0000664 0000000 0000000 00000031536 14532047255 0025037 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var extractProperties = require('../../../lib/optimizer/level-2/extract-properties'); var tokenize = require('../../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../../lib/reader/input-source-map-tracker'); function _tokenize(source) { return tokenize(source, { inputSourceMapTracker: inputSourceMapTracker() }); } vows.describe(extractProperties) .addBatch({ 'no properties': { 'topic': function () { return extractProperties(_tokenize('a{}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, []); } }, 'no valid properties': { 'topic': function () { return extractProperties(_tokenize('a{:red}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, []); } }, 'one property': { 'topic': function () { return extractProperties(_tokenize('a{color:red}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'color', 'red', 'color', ['property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 8, undefined]]]], 'color:red', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'one important property': { 'topic': function () { return extractProperties(_tokenize('a{color:red!important}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'color', 'red!important', 'color', ['property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]]], 'color:red!important', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'one property - simple selector': { 'topic': function () { return extractProperties(_tokenize('#one span{color:red}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'color', 'red', 'color', ['property', ['property-name', 'color', [[1, 10, undefined]]], ['property-value', 'red', [[1, 16, undefined]]]], 'color:red', [['rule-scope', '#one span', [[1, 0, undefined]]]], true ] ]); } }, 'one property - variable': { 'topic': function () { return extractProperties(_tokenize('#one span{--color:red}')[0]); }, 'has one property': function (tokens) { assert.deepEqual(tokens, [ [ '--color', 'red', 'color', ['property', ['property-name', '--color', [[1, 10, undefined]]], ['property-value', 'red', [[1, 18, undefined]]]], '--color:red', [['rule-scope', '#one span', [[1, 0, undefined]]]], true ] ]); } }, 'one property - block variable': { 'topic': function () { return extractProperties(_tokenize('#one span{--color:{color:red;display:block};}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ '--color', '{color:red;display:block}', 'color', ['property', ['property-name', '--color', [[1, 10, undefined]]], ['property-block', [['property', ['property-name', 'color', [[1, 19, undefined]]], ['property-value', 'red', [[1, 25, undefined]]]], ['property', ['property-name', 'display', [[1, 29, undefined]]], ['property-value', 'block', [[1, 37, undefined]]]]]] ], '--color:{color:red;display:block}', [['rule-scope', '#one span', [[1, 0, undefined]]]], true ] ]); } }, 'one property - complex selector': { 'topic': function () { return extractProperties(_tokenize('.one{color:red}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'color', 'red', 'color', ['property', ['property-name', 'color', [[1, 5, undefined]]], ['property-value', 'red', [[1, 11, undefined]]]], 'color:red', [['rule-scope', '.one', [[1, 0, undefined]]]], false ] ]); } }, 'two properties': { 'topic': function () { return extractProperties(_tokenize('a{color:red;display:block}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'color', 'red', 'color', ['property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 8, undefined]]]], 'color:red', [['rule-scope', 'a', [[1, 0, undefined]]]], true ], [ 'display', 'block', 'display', ['property', ['property-name', 'display', [[1, 12, undefined]]], ['property-value', 'block', [[1, 20, undefined]]]], 'display:block', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'from @media': { 'topic': function () { return extractProperties(_tokenize('@media{a{color:red;display:block}p{color:red}}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'color', 'red', 'color', ['property', ['property-name', 'color', [[1, 9, undefined]]], ['property-value', 'red', [[1, 15, undefined]]]], 'color:red', [['rule-scope', 'a', [[1, 7, undefined]]]], true ], [ 'display', 'block', 'display', ['property', ['property-name', 'display', [[1, 19, undefined]]], ['property-value', 'block', [[1, 27, undefined]]]], 'display:block', [['rule-scope', 'a', [[1, 7, undefined]]]], true ], [ 'color', 'red', 'color', ['property', ['property-name', 'color', [[1, 35, undefined]]], ['property-value', 'red', [[1, 41, undefined]]]], 'color:red', [['rule-scope', 'p', [[1, 33, undefined]]]], true ] ]); } } }) .addBatch({ 'name root special cases': { 'vendor prefix': { 'topic': function () { return extractProperties(_tokenize('a{-moz-transform:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ '-moz-transform', 'none', 'transform', ['property', ['property-name', '-moz-transform', [[1, 2, undefined]]], ['property-value', 'none', [[1, 17, undefined]]]], '-moz-transform:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'list-style': { 'topic': function () { return extractProperties(_tokenize('a{list-style:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'list-style', 'none', 'list-style', ['property', ['property-name', 'list-style', [[1, 2, undefined]]], ['property-value', 'none', [[1, 13, undefined]]]], 'list-style:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'border-radius': { 'topic': function () { return extractProperties(_tokenize('a{border-top-left-radius:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'border-top-left-radius', 'none', 'border-radius', ['property', ['property-name', 'border-top-left-radius', [[1, 2, undefined]]], ['property-value', 'none', [[1, 25, undefined]]]], 'border-top-left-radius:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'vendor prefixed border-radius': { 'topic': function () { return extractProperties(_tokenize('a{-webkit-border-top-left-radius:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ '-webkit-border-top-left-radius', 'none', 'border-radius', ['property', ['property-name', '-webkit-border-top-left-radius', [[1, 2, undefined]]], ['property-value', 'none', [[1, 33, undefined]]]], '-webkit-border-top-left-radius:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'border-image-width': { 'topic': function () { return extractProperties(_tokenize('a{border-image-width:2px}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'border-image-width', '2px', 'border-image', ['property', ['property-name', 'border-image-width', [[1, 2, undefined]]], ['property-value', '2px', [[1, 21, undefined]]]], 'border-image-width:2px', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'border-color': { 'topic': function () { return extractProperties(_tokenize('a{border-color:red}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'border-color', 'red', 'border', ['property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 15, undefined]]]], 'border-color:red', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'border-top-style': { 'topic': function () { return extractProperties(_tokenize('a{border-top-style:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'border-top-style', 'none', 'border-top', ['property', ['property-name', 'border-top-style', [[1, 2, undefined]]], ['property-value', 'none', [[1, 19, undefined]]]], 'border-top-style:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'border-top': { 'topic': function () { return extractProperties(_tokenize('a{border-top:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'border-top', 'none', 'border', ['property', ['property-name', 'border-top', [[1, 2, undefined]]], ['property-value', 'none', [[1, 13, undefined]]]], 'border-top:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'border-collapse': { 'topic': function () { return extractProperties(_tokenize('a{border-collapse:collapse}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'border-collapse', 'collapse', 'border-collapse', ['property', ['property-name', 'border-collapse', [[1, 2, undefined]]], ['property-value', 'collapse', [[1, 18, undefined]]]], 'border-collapse:collapse', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } }, 'text-shadow': { 'topic': function () { return extractProperties(_tokenize('a{text-shadow:none}')[0]); }, 'has no properties': function (tokens) { assert.deepEqual(tokens, [ [ 'text-shadow', 'none', 'text-shadow', ['property', ['property-name', 'text-shadow', [[1, 2, undefined]]], ['property-value', 'none', [[1, 14, undefined]]]], 'text-shadow:none', [['rule-scope', 'a', [[1, 0, undefined]]]], true ] ]); } } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/is-mergeable-test.js 0000664 0000000 0000000 00000021166 14532047255 0023525 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var isMergeable = require('../../../lib/optimizer/level-2/is-mergeable'); var mergeablePseudoClasses = [':after']; var mergeablePseudoElements = ['::before']; vows.describe(isMergeable) .addBatch({ 'tag name selector': { 'topic': 'div', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'class selector': { 'topic': '.class', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'id selector': { 'topic': '#id', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'complex selector': { 'topic': 'div ~ #id > .class', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'vendor-prefixed pseudo-class': { 'topic': ':-moz-placeholder', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'vendor-prefixed pseudo-element': { 'topic': '::-moz-placeholder', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'vendor-prefixed pseudo-class as descendant of attribute rule': { 'topic': '[data-x="y"] :-moz-placeholder', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'vendor-prefixed pseudo-element as descendant of attribute rule': { 'topic': '[data-x="y"] ::-moz-placeholder', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'unsupported pseudo-class': { 'topic': ':first-child', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'unsupported pseudo-element': { 'topic': '::marker', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-class': { 'topic': ':after', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-class with selector': { 'topic': 'div:after', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-class with arguments': { 'topic': 'div:lang(en)', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, [':lang'], mergeablePseudoElements, true)); } }, 'supported pseudo-class in the middle': { 'topic': 'div :first-child > span', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, [':first-child'], mergeablePseudoElements, true)); } }, 'supported pseudo-classes in the middle': { 'topic': 'div :first-child > span:last-child > em', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, [':first-child', ':last-child'], mergeablePseudoElements, true)); } }, 'supported pseudo-classes in the middle without spaces': { 'topic': 'div :first-child>span:last-child>em', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, [':first-child', ':last-child'], mergeablePseudoElements, true)); } }, 'double :not pseudo-class': { 'topic': 'div:not(:first-child):not(.one)', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, [':first-child', ':not'], mergeablePseudoElements, true)); } }, ':not with vendor-prefixed pseudo-class': { 'topic': ':not(:-moz-focusring)', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, [':not'], [], true)); } }, 'supported pseudo-class with unsupported arguments': { 'topic': 'div:after(test)', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-class repeated': { 'topic': 'div:after:after', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-element': { 'topic': '::before', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-element with selector': { 'topic': 'div::before', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-element with arguments': { 'topic': '::before(test)', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-element repeated': { 'topic': '::before::before', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-class and -element mixed': { 'topic': ':after::before', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported pseudo-element and -class mixed': { 'topic': '::before:after', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'supported mixable pseudo classes / elements': { 'topic': ':hover::after', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, [':hover'], ['::after'], true)); } }, 'supported unmixable pseudo classes': { 'topic': ':first-line:before', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, [':before', ':first-line'], [], true)); } }, 'supported unmixable pseudo elements': { 'topic': '::first-line::before', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, [], ['::before', '::first-line'], true)); } }, '/deep/ selector': { 'topic': '.wrapper /deep/ a', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'empty selector': { 'topic': '', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'multi selector': { 'topic': 'h1,div', 'is mergeable': function (selector) { assert.isTrue(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'multi selector with pseudo-class': { 'topic': 'h1:first-child,div', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } }, 'multi selector with empty': { 'topic': ',h1', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, true)); } } }) .addBatch({ 'pseudo-classes with disabled mixed merging': { 'topic': ':first-child:before', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, [':before', ':first-child'], [], false)); } }, 'pseudo-classes and -elements with disabled mixed merging': { 'topic': ':hover::before', 'is not mergeable': function (selector) { assert.isFalse(isMergeable(selector, [':hover'], ['::before'], false)); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/merge-adjacent-test.js 0000664 0000000 0000000 00000012574 14532047255 0024042 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('remove duplicates') .addBatch( optimizerContext('with level 2 on', { 'same context': [ 'a{color:red}a{display:block;width:75px}div{color:#fff}', 'a{color:red;display:block;width:75px}div{color:#fff}' ], 'of two non-adjacent selectors': [ '.one{color:red}.two{color:#00f}.one{font-weight:700}', '.one{color:red;font-weight:700}.two{color:#00f}' ], 'of two adjacent single selectors': [ '.one{color:red}.one{font-weight:700}', '.one{color:red;font-weight:700}' ], 'of three adjacent single selectors': [ '.one{color:red}.one{font-weight:700}.one{font-size:13px}', '.one{color:red;font-weight:700;font-size:13px}' ], 'of three adjacent complex, multiple selectors': [ '.one{color:red}#two.three{color:red}.four>.five{color:red}', '#two.three,.four>.five,.one{color:red}' ], 'of two adjacent single, complex selectors': [ '#box>.one{color:red}#box>.one{font-weight:700}', '#box>.one{color:red;font-weight:700}' ], 'of two adjacent multiple, complex selectors': [ '#box>.one,.zero{color:red}#box>.one,.zero{font-weight:700}', '#box>.one,.zero{color:red;font-weight:700}' ], 'of two adjacent selectors with duplicate properties #1': [ '.one{color:red}.one{color:#fff}', '.one{color:#fff}' ], 'of two adjacent selectors with duplicate properties #2': [ '.one{color:red;font-weight:bold}.one{color:#fff;font-weight:400}', '.one{color:#fff;font-weight:400}' ], 'of two adjacent complex selectors with different selector order': [ '.one,.two{color:red}.two,.one{line-height:1em}', '.one,.two{color:red;line-height:1em}' ], 'two adjacent with hex color definitions': [ 'a:link,a:visited{color:#fff}.one{display:block}a:link,a:visited{color:red}', '.one{display:block}a:link,a:visited{color:red}' ], 'in two passes': [ 'a{color:red}a{background:red}b{color:red}b{background:red}', 'a,b{color:red;background:red}' ], 'when overriden with a browser specific selector': [ 'a{color:red}::-webkit-scrollbar,a{color:#fff}', 'a{color:red}::-webkit-scrollbar,a{color:#fff}' ], 'when an invalid pseudo selector used': [ 'a{color:red}a:after:after{color:red}', 'a{color:red}a:after:after{color:red}' ], 'two same selectors over a block': [ '.one{color:red}@media print{.two{display:block}}.one{display:none}', '@media print{.two{display:block}}.one{color:red;display:none}' ], 'two same bodies over a block': [ '.one{color:red}@media print{.two{display:block}}.three{color:red}', '.one{color:red}@media print{.two{display:block}}.three{color:red}' ], 'two rules with latter with suffix properties': [ 'a{display:none}a{display:none;visibility:hidden}', 'a{display:none;visibility:hidden}' ], 'no rule after comma': [ 'h1{color:#000},h2{color:#000}', 'h1{color:#000},h2{color:#000}' ], 'no rule after comma with comma last': [ 'h1{color:#000}h2,{color:#000}', 'h1{color:#000},h2{color:#000}' ], 'with @ chars in rule names': [ '.col-1\@4{width:25%}.col-2\@4{width:50%}.col-1\@2{width:50%}.col-3\@4{width:75%}.col-4\@4{width:100%}.col-1\@1{width:100%}', '.col-1\@4{width:25%}.col-1\@2,.col-2\@4{width:50%}.col-3\@4{width:75%}.col-1\@1,.col-4\@4{width:100%}' ], 'with different case hex colors': [ '.one{color:#FFF}.two{color:#fff}', '.one,.two{color:#fff}' ], 'with two unmixable vendor-prefixed :not': [ 'a:not(:-moz-focusring){outline:0}a:not(:focus-visible){outline:0}', 'a:not(:-moz-focusring){outline:0}a:not(:focus-visible){outline:0}' ] }, { level: 2 }) ) .addBatch( optimizerContext('with level 2 on - and restructuring on', { 'two same bodies over a block': [ '.one{color:red}@media print{.two{display:block}}.three{color:red}', '.one,.three{color:red}@media print{.two{display:block}}' ], }, { level: { 2: { restructureRules: true } } }) ) .addBatch( optimizerContext('with level 2 off but only adjacentRuleMerging on', { 'same context': [ 'a{background:url(image.png)}a{display:block;width:75px;background-repeat:no-repeat}', 'a{background:url(image.png);display:block;width:75px;background-repeat:no-repeat}a{}', ], }, { level: { 2: { all: false, mergeAdjacentRules: true } } }) ) .addBatch( optimizerContext('with level 2 off', { 'same context': [ 'a{color:red}a{display:block;width:75px}div{color:#fff}', 'a{color:red}a{display:block;width:75px}div{color:#fff}' ], }, { level: 1 }) ) .addBatch( optimizerContext('with multiplePseudoMerging: false', { 'single pseudo classes': [ ':hover{color:red}:first-child{color:red}', ':first-child,:hover{color:red}' ], 'multiple pseudo classes': [ ':hover:before{color:red}.block{color:red}', ':hover:before{color:red}.block{color:red}' ] }, { compatibility: { selectors: { multiplePseudoMerging: false } }, level: 2 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/merge-media-queries-test.js 0000664 0000000 0000000 00000020452 14532047255 0025015 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('merge media queries') .addBatch( optimizerContext('different ones', { 'different ones': [ '@media screen{a{color:red}}@media print{div{display:block}}', '@media screen{a{color:red}}@media print{div{display:block}}' ], 'other than @media': [ '@font-face{font-family:A}@font-face{font-family:B}', '@font-face{font-family:A}@font-face{font-family:B}' ], 'with empty selector': [ '@media screen{a{color:red}div{}}', '@media screen{a{color:red}}' ] }, { level: 2 }) ) .addBatch( optimizerContext('adjacent', { 'same two adjacent': [ '@media screen{a{color:red}}@media screen{div{display:block}}', '@media screen{a{color:red}div{display:block}}' ], 'same three adjacent': [ '@media screen{a{color:red}}@media screen{div{display:block}}@media screen{body{width:100%}}', '@media screen{a{color:red}div{display:block}body{width:100%}}' ], 'same two with selectors in between': [ '@media screen{a{color:red}}body{width:100%}.one{height:75px}@media screen{div{display:block}}', 'body{width:100%}.one{height:75px}@media screen{a{color:red}div{display:block}}' ], 'same two with other @media in between': [ '@media screen{a{color:red}}@media (min-width:1024px){body{width:100%}}@media screen{div{display:block}}', '@media (min-width:1024px){body{width:100%}}@media screen{a{color:red}div{display:block}}' ], 'same two with breaking properties in between': [ '@media screen{.block-1{color:red}}.block-2{color:#00f;display:inline}@media screen{.block-3{display:block}}', '@media screen{.block-1{color:red}}.block-2{color:#00f;display:inline}@media screen{.block-3{display:block}}' ], 'same two with breaking @media in between': [ '@media screen{.block-1{color:red}}@media (min-width:1024px){.block-2{color:#00f;display:inline}}@media screen{.block-3{display:block}}', '@media screen{.block-1{color:red}}@media (min-width:1024px){.block-2{color:#00f;display:inline}}@media screen{.block-3{display:block}}' ], 'same two with breaking nested @media in between': [ '@media screen{.block-1{color:red}}@media (min-width:1024px){@media screen{.block-2{color:#00f;display:inline}}}@media screen{.block-3{display:block}}', '@media screen{.block-1{color:red}}@media (min-width:1024px){@media screen{.block-2{color:#00f;display:inline}}}@media screen{.block-3{display:block}}' ], 'intermixed': [ '@media screen{a{color:red}}@media (min-width:1024px){p{width:100%}}@media screen{div{display:block}}@media (min-width:1024px){body{height:100%}}', '@media screen{a{color:red}div{display:block}}@media (min-width:1024px){p{width:100%}body{height:100%}}' ], 'same two with overriding shorthand in between': [ '@media screen{.block-1{font-size:10px}}@media (min-width:1024px){.block-2{font:13px Helvetica;display:inline}}@media screen{.block-3{display:block}}', '@media screen{.block-1{font-size:10px}}@media (min-width:1024px){.block-2{font:13px Helvetica;display:inline}}@media screen{.block-3{display:block}}' ], 'same two with different component property in between': [ '@media screen{a{font-size:10px}}@media (min-width:1024px){.one{font-weight:700}}@media screen{div{display:block}}', '@media (min-width:1024px){.one{font-weight:700}}@media screen{a{font-size:10px}div{display:block}}' ], 'same two with same values as moved in between': [ '@media screen{a{color:red}}@media (min-width:1024px){.one{color:red}}@media screen{div{display:block}}', '@media (min-width:1024px){.one{color:red}}@media screen{a{color:red}div{display:block}}' ], 'further optimizations': [ '@media screen{a{color:red}}@media screen{a{display:block}}', '@media screen{a{color:red;display:block}}' ], 'with comments': [ '@media screen{a{color:red}}/*! a comment */@media screen{a{display:block}}', '/*! a comment */@media screen{a{color:red;display:block}}' ], 'with IDs mixed with type selectors': [ '@media (max-width:768px){#id img{display:none}}#id span{display:inline-block;width:50%}@media (max-width:768px){#id span{width:100%}}', '#id span{display:inline-block;width:50%}@media (max-width:768px){#id img{display:none}#id span{width:100%}}' ], 'backwards': [ '@media (max-width:768px){.one{padding-right:0}}.one{padding:10px}@media (max-width:768px){.one{margin:0}}', '@media (max-width:768px){.one{padding-right:0;margin:0}}.one{padding:10px}' ], 'backward of two with overriding shorthand in between': [ '@media screen{.block-1{font-size:10px}}@media (min-width:1024px){.block-1{font:13px Helvetica}}@media screen{.block-3{display:block}}', '@media screen{.block-1{font-size:10px}.block-3{display:block}}@media (min-width:1024px){.block-1{font:13px Helvetica}}' ], 'with at sign in rule name': [ '@media screen{.one{margin-left:-16px}}.two{margin-left:0}.three{width:50%!important}.four{width:25%!important}@media screen{.three\\\@m{width:50%!important}.four\\\@m{width:25%!important}}', '@media screen{.one{margin-left:-16px}}.two{margin-left:0}.three{width:50%!important}.four{width:25%!important}@media screen{.three\\\@m{width:50%!important}.four\\\@m{width:25%!important}}' ] }, { level: 2 }) ) .addBatch( optimizerContext('semantic merging mode', { 'moves over an otherwise blocking property': [ '@media (max-width:1px){.a{margin:1px}}.b{margin:2px}@media (max-width:1px){.c{margin:3px}}', '.b{margin:2px}@media (max-width:1px){.a{margin:1px}.c{margin:3px}}' ], 'moves over an otherwise blocking longhand property': [ '@media (max-width:1px){.a{margin:1px}}.a{margin-bottom:2px}@media (max-width:1px){.a{margin:3px}}', '@media (max-width:1px){.a{margin:1px}}.a{margin-bottom:2px}@media (max-width:1px){.a{margin:3px}}' ], 'does not move if separating selector redefines a property': [ '@media (max-width:1px){.a{margin:1px}}.a{margin:2px}@media (max-width:1px){.a{margin:3px}}', '@media (max-width:1px){.a{margin:1px}}.a{margin:2px}@media (max-width:1px){.a{margin:3px}}' ], 'does not move over blocking BEM block rules': [ '@media (max-width:1px){.block{margin:1px}}.block--modifier1{margin:2px}@media (max-width:1px){.block--modifier2{margin:3px}}', '@media (max-width:1px){.block{margin:1px}}.block--modifier1{margin:2px}@media (max-width:1px){.block--modifier2{margin:3px}}' ], 'does not move over blocking BEM element rules': [ '@media (max-width:1px){.block__element{margin:1px}}.block__element--modifier1{margin:2px}@media (max-width:1px){.block__element--modifier2{margin:3px}}', '@media (max-width:1px){.block__element{margin:1px}}.block__element--modifier1{margin:2px}@media (max-width:1px){.block__element--modifier2{margin:3px}}' ], 'moves over non-blocking BEM rules': [ '@media (max-width:1px){.block{margin:1px}}.block__element{margin:2px}@media (max-width:1px){.block--modifier{margin:3px}}', '.block__element{margin:2px}@media (max-width:1px){.block{margin:1px}.block--modifier{margin:3px}}' ], 'moves multiple rules over fewer rules': [ '@media (max-width:1px){.block{margin:1px;padding:1px}}.block__element{margin:2px}@media (max-width:1px){.block--modifier{margin:3px}}', '.block__element{margin:2px}@media (max-width:1px){.block{margin:1px;padding:1px}.block--modifier{margin:3px}}' ] }, { level: { 2: { mergeSemantically: true } } }) ) .addBatch( optimizerContext('with level 2 off', { 'keeps content same': [ '@media screen{a{color:red}}@media screen{a{display:block}}', '@media screen{a{color:red}}@media screen{a{display:block}}' ] }, { level: 1 }) ) .addBatch( optimizerContext('media merging off', { 'keeps content same': [ '@media screen{a{color:red}}@media screen{a{display:block}}', '@media screen{a{color:red}}@media screen{a{display:block}}' ] }, { level: { 2: { mergeMedia: false } } }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/merge-non-adjacent-by-body-test.js 0000664 0000000 0000000 00000014315 14532047255 0026170 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('merge non djacent by body') .addBatch( optimizerContext('with level 2 on', { 'of two non-adjacent selectors': [ '.one{color:red}.two{color:#00f}.three{color:red}', '.one{color:red}.two{color:#00f}.three{color:red}' ], 'with repeated selectors': [ '#zero>p,.one,.two{color:red}.two,#zero>p,.three{color:red}', '#zero>p,.one,.three,.two{color:red}' ], 'of element selectors': [ 'p{color:red}a{color:#000}div{color:red}', 'div,p{color:red}a{color:#000}' ], 'of element selectors inside @media': [ '@media screen{p{color:red}a{color:#000}div{color:red}}', '@media screen{div,p{color:red}a{color:#000}}' ], 'of element selectors with a class selector in between': [ 'p{color:red}.a{color:#000}div{color:red}', 'p{color:red}.a{color:#000}div{color:red}' ], 'of element selectors with an empty class selector in between': [ 'p{color:red}.a{}div{color:red}', 'div,p{color:red}' ], 'no rule after comma': [ 'h1{color:#000}div{color:red},h2{color:#000}', 'h1{color:#000}div{color:red},h2{color:#000}' ] }, { level: 2 }) ) .addBatch( optimizerContext('with level 2 off but mergeNonAdjacentRules on', { 'of element selectors': [ 'p{color:red}div{display:block}span{color:red}', 'p,span{color:red}div{display:block}span{}' ] }, { level: { 2: { all: false, mergeNonAdjacentRules: true } } }) ) .addBatch( optimizerContext('with level 2 off but mergeNonAdjacentRules set to selector', { 'of element selectors': [ 'p{color:red}div{display:block}span{color:red}', 'p{color:red}div{display:block}span{color:red}' ] }, { level: { 2: { all: false, mergeNonAdjacentRules: 'selector' } } }) ) .addBatch( optimizerContext('with level 2 off', { 'with repeated selectors': [ '#zero>p,.one,.two{color:red}#zero>p,.three,.two{color:red}', '#zero>p,.one,.two{color:red}#zero>p,.three,.two{color:red}' ], 'of element selectors': [ 'p{color:red}a{color:#000}div{color:red}', 'p{color:red}a{color:#000}div{color:red}' ], 'of element selectors inside @media': [ '@media screen{p{color:red}a{color:#000}div{color:red}}', '@media screen{p{color:red}a{color:#000}div{color:red}}' ] }, { level: 1 }) ) .addBatch( optimizerContext('selectors - semantic merging mode', { 'simple': [ '.a{color:red}.b{color:#000}.c{color:red}', '.a,.c{color:red}.b{color:#000}' ], 'BEM - modifiers #1': [ '.block{color:red}.block__element{color:#000}.block__element--modifier{color:red}', '.block{color:red}.block__element{color:#000}.block__element--modifier{color:red}' ], 'BEM - modifiers #2': [ '.block1{color:red}.block1__element,.block2{color:#000}.block1__element--modifier{color:red}', '.block1{color:red}.block1__element,.block2{color:#000}.block1__element--modifier{color:red}' ], 'BEM - modifiers #3': [ '.block1{color:red}.block1--modifier,.block2{color:#000}.block1--another-modifier{color:red}', '.block1{color:red}.block1--modifier,.block2{color:#000}.block1--another-modifier{color:red}' ], 'BEM - tail merging': [ '.block1{color:red}.block1__element{color:#000}.block1__element--modifier{color:red}a{color:red}.block2__element--modifier{color:red}', '.block1{color:red}.block1__element{color:#000}.block1__element--modifier,.block2__element--modifier,a{color:red}' ], 'BEM - two blocks #1': [ '.block1__element{color:#000}.block2{color:red}.block2__element{color:#000}.block2__element--modifier{color:red}', '.block1__element,.block2__element{color:#000}.block2,.block2__element--modifier{color:red}' ], 'BEM - two blocks #2': [ '.block1__element{color:#000}.block1__element--modifier{color:red}.block2{color:red}.block2__element{color:#000}.block2__element--modifier{color:red}', '.block1__element,.block2__element{color:#000}.block1__element--modifier,.block2,.block2__element--modifier{color:red}' ], 'BEM - complex traversing #1': [ '.block1__element{color:#000}.block1__element--modifier{color:red}.block2{color:#000;display:block;width:100%}', '.block1__element{color:#000}.block1__element--modifier{color:red}.block2{color:#000;display:block;width:100%}' // '.block1__element,.block2{color:#000}.block1__element--modifier{color:red}.block2{display:block;width:100%}' - pending #588 ] }, { level: { 2: { restructureRules: true, mergeSemantically: true } } }) ) .addBatch( optimizerContext('IE8 compatibility', { 'of two supported selectors': [ '.one:first-child{color:red}.two>.three{color:red}', '.one:first-child,.two>.three{color:red}' ], 'of supported and unsupported selector': [ '.one:first-child{color:red}.two:last-child{color:red}', '.one:first-child{color:red}.two:last-child{color:red}' ], 'of two unsupported selectors': [ '.one:nth-child(5){color:red}.two:last-child{color:red}', '.one:nth-child(5){color:red}.two:last-child{color:red}' ] }, { compatibility: 'ie8', level: 2 }) ) .addBatch( optimizerContext('IE7 compatibility', { 'of two supported selectors': [ '.one{color:red}.two>.three{color:red}', '.one,.two>.three{color:red}' ], 'of supported and unsupported selector': [ '.one{color:red}.two:last-child{color:red}', '.one{color:red}.two:last-child{color:red}' ], 'of two unsupported selectors': [ '.one:before{color:red}.two:last-child{color:red}', '.one:before{color:red}.two:last-child{color:red}' ] }, { compatibility: 'ie7', level: 2 }) ) .addBatch( optimizerContext('+adjacentSpace', { 'of two supported selectors': [ '.one{color:red}.two + nav{color:red}', '.one,.two+ nav{color:red}' ] }, { compatibility: { selectors: { adjacentSpace: true } }, level: 2 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/merge-non-adjacent-by-selector-test.js 0000664 0000000 0000000 00000004260 14532047255 0027051 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('merge non djacent by selector') .addBatch( optimizerContext('level 2 on', { 'up': [ '.one{color:red}.two{color:#fff}.one{font-weight:400}', '.one{color:red;font-weight:400}.two{color:#fff}' ], 'down': [ '.one{color:red}.two{font-weight:700}.one{font-weight:400}', '.two{font-weight:700}.one{color:red;font-weight:400}' ], 'specificity #1': [ '.block{color:red}div{color:#00f}.block{font-weight:400}', '.block{color:red;font-weight:400}div{color:#00f}', ], 'specificity #2': [ '#id{background:red}.block{background-color:#00f}#id{height:1rem}#id{background-color:#fff}', '#id{background:#fff;height:1rem}.block{background-color:#00f}' ] // 'up - blocked': [ // '.one{color:red;with:100%}.two{display:inline-block;width:10px}.one{font-weight:400;display:block}', // '.one{color:red;with:100%}.two{display:inline-block;width:10px}.one{font-weight:400;display:block}' // ] }, { level: 2 }) ) .addBatch( optimizerContext('with level 2 off but mergeNonAdjacentRules on', { 'of element selectors': [ '.one{color:red}.two{color:#fff}.one{font-weight:400}', '.one{color:red;font-weight:400}.two{color:#fff}.one{}' ] }, { level: { 2: { all: false, mergeNonAdjacentRules: true } } }) ) .addBatch( optimizerContext('with level 2 off but mergeNonAdjacentRules set to body', { 'of element selectors': [ '.one{color:red}.two{color:#fff}.one{font-weight:400}', '.one{color:red}.two{color:#fff}.one{font-weight:400}' ] }, { level: { 2: { all: false, mergeNonAdjacentRules: 'body' } } }) ) .addBatch( optimizerContext('level 2 off', { 'up': [ '.one{color:red}.two{color:#fff}.one{font-weight:400}', '.one{color:red}.two{color:#fff}.one{font-weight:400}' ], 'down': [ '.one{color:red}.two{font-weight:700}.one{font-weight:400}', '.one{color:red}.two{font-weight:700}.one{font-weight:400}' ] }, { level: 1 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/optimize-test.js 0000664 0000000 0000000 00000033641 14532047255 0023032 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('level 2 optimizer') .addBatch( optimizerContext('all optimizations', { 'adjacent': [ 'a{display:none}a{display:none;visibility:hidden}', 'a{display:none;visibility:hidden}' ], 'overriding by !important': [ 'a{margin:0}a{margin:0!important}', 'a{margin:0!important}' ], 'shorthands and no space after closing brace': [ '.a{background:rgba(0,0,0,0)url(//example.com/a.jpg)}', '.a{background:url(//example.com/a.jpg) rgba(0,0,0,0)}' ], 'repeated': [ 'a{color:red;color:red}', 'a{color:red}' ], 'units': [ '.one{width:1px;width:1rem;display:block}.two{color:red}.one{width:2px;width:1.1rem}', '.one{display:block;width:1.1rem}.two{color:red}' ], 'backslash hacks': [ '.block{color:red\\9;color:#0f0\\0}', '' ], 'quoted font family only': [ '.block{font:60px/64px "Garamond WF"}', '.block{font:60px/64px "Garamond WF"}' ], 'overrides hex color only': [ '.block{color:#696969;color:rgba(68,68,68,0.8);color:#444c}', '.block{color:rgba(68,68,68,.8);color:#444c}' ], 'skips merging when function withing function is used for compatibility reasons': [ '.block{transform:translateX(-107%);transform:translateX(calc(-100% - 20px))}', '.block{transform:translateX(-107%);transform:translateX(calc(-100% - 20px))}' ], 'keeps right order after merging into a shorthand': [ '.block{border-color:red;background-color:#000;color:#fff;border-width:5px;border-style:solid;font-style:italic;border-top:0;border-right:0;border-left:0}', '.block{background-color:#000;color:#fff;border:5px solid red;font-style:italic;border-top:0;border-right:0;border-left:0}' ], 'treats calc as valid length value': [ '.block{border:calc(1px) solid #000;outline:#000 solid calc(1px)}', '.block{border:calc(1px) solid #000;outline:#000 solid calc(1px)}' ], 'calc() function as animation delay': [ '.block{animation:0.3s linear calc(0.04s * 2) backwards name}', '.block{animation:.3s linear calc(.04s * 2) backwards name}' ], 'calc() function as animation duration': [ '.block{animation:calc(0.3s * 2) linear 500ms backwards name}', '.block{animation:calc(.3s * 2) linear .5s backwards name}' ], 'default value of transition-delay is default': [ '.block-1{transition:opacity .3s linear,height 0s ease .3s}.block-2{transition:opacity .3s linear,height 1s ease .3s}', '.block-1{transition:opacity .3s linear,height 0s .3s}.block-2{transition:opacity .3s linear,height 1s .3s}' ], 'rolling multiplex component into shorthand #1': [ '.block{transition-property:transform,margin-left;transition-delay:0ms;transition-duration:375ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)}', '.block{transition:transform 375ms cubic-bezier(0.4,0,0.2,1),margin-left 375ms cubic-bezier(0.4,0,0.2,1)}' ], 'rolling multiplex component into shorthand #2': [ '.block{animation-name:show,showAgain;animation-duration:1s,1.7s;animation-timing-function:linear,linear;animation-fill-mode:forwards,forwards;animation-delay:0s,2.5s;animation-iteration-count:1,1;animation-direction:normal,normal;animation-play-state:running,running}', '.block{animation:1s linear forwards show,1.7s linear 2.5s forwards showAgain}' ], 'takes dynamic properties (with variables) into account when reordering properties': [ ':root{--border-opacity:1}.block{border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity));border-top-color:transparent}', ':root{--border-opacity:1}.block{border-color:#3182ce;border-color:rgba(49,130,206,var(--border-opacity));border-top-color:transparent}' ], 'requires shorthand with all components of same type to have all same values for merging into longhand #1': [ '.block{border-color:currentcolor currentcolor red;border-image:none 100%/1/0 stretch;border-width:0 0 1px;border-style:none none solid}', '.block{border-color:currentcolor currentcolor red;border-image:none 100%/1/0 stretch;border-width:0 0 1px;border-style:none none solid}' ], 'requires shorthand with all components of same type to have all same values for merging into longhand #2': [ '.block{border-color:red red red red;border-image:none 100%/1/0 stretch;border-width:1px 1px;border-style:solid solid solid}', '.block{border:1px solid red;border-image:none 100%/1/0 stretch}' ], 'requires shorthand with all components of same type to have all same values for merging into longhand #3': [ '.block{border-color:red red red red;border-width:1px 1px;border-style:solid solid solid;border-image:none 100%/1/0 stretch}', '.block{border:1px solid red;border-image:none 100%/1/0 stretch}' ] }, { level: 2 }) ) .addBatch( optimizerContext('with all optimizations', { 'handles clip correctly which has no `canOverride` set': [ '.block-1{clip:auto}.block-1{clip:auto;width:auto}', '.block-1{clip:auto;width:auto}' ] }, { level: { 2: { all: true } } }) ) .addBatch( optimizerContext('colors with hex alpha support', { 'overrides all colors': [ '.block{color:#696969;color:rgba(68,68,68,0.8);color:#444c}', '.block{color:#444c}' ] }, { compatibility: '+colors.hexAlpha', level: 2 }) ) .addBatch( optimizerContext('space separated colors', { 'keeps hsl colors': [ '.block{border:1px solid hsl(0deg 0% 85%)}', '.block{border:1px solid hsl(0deg 0% 85%)}' ], 'keeps hsla colors - with fraction opacity': [ '.block{border:1px solid hsla(0deg 0% 85% / .5)}', '.block{border:1px solid hsla(0deg 0% 85% / .5)}' ], 'keeps hsla colors - with percentage opacity': [ '.block{border:1px solid hsla(0deg 0% 85% / 50%)}', '.block{border:1px solid hsla(0deg 0% 85% / 50%)}' ], 'keeps rgb colors': [ '.block{border:1px solid rgb(20 20 20)}', '.block{border:1px solid rgb(20 20 20)}' ], 'keeps rgba colors - with fraction opacity': [ '.block{border:1px solid rgba(20 20 20 / .5)}', '.block{border:1px solid rgba(20 20 20 / .5)}' ], 'keeps rgba colors - with percentage opacity': [ '.block{border:1px solid rgba(20 20 20 / 50%)}', '.block{border:1px solid rgba(20 20 20 / 50%)}' ] }, { level: 2 }) ) .addBatch( optimizerContext('limit rule merging', { 'adjacent with as many rules as limit': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}', '.block--1,.block--2,.block--3{color:red}' ], 'adjacent with extra rule': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}', '.block--1,.block--2,.block--3{color:red}.block--4{color:red}' ], 'adjacent with extra two rules': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}.block--5{color:red}', '.block--1,.block--2,.block--3{color:red}.block--4,.block--5{color:red}' ], 'adjacent with extra three rules': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}.block--5{color:red}.block--6{color:red}', '.block--1,.block--2,.block--3{color:red}.block--4,.block--5,.block--6{color:red}' ], 'non-adjacent': [ '.block--1{color:red}.other-block--1{width:0}.block--2{color:red}.other-block--2{height:0}.block--3{color:red}.other-block--3{opacity:0}.block--4{color:red}', '.block--1{color:red}.other-block--1{width:0}.block--2,.block--3,.block--4{color:red}.other-block--2{height:0}.other-block--3{opacity:0}' ] }, { compatibility: { selectors: { mergeLimit: 3 } }, level: { 2: { all: true } } }) ) .addBatch( optimizerContext('in ie9 compatibility mode', { 'overrides hex color only': [ '.block{color:#696969;color:rgba(68,68,68,.8);color:#444c}', '.block{color:rgba(68,68,68,.8);color:#444c}' ] }, { compatibility: 'ie9', level: 2 }) ) .addBatch( optimizerContext('in ie8 compatibility mode', { 'backslash hacks': [ '.block{color:red\\9;color:#0f0\\0}', '.block{color:red\\9;color:#0f0\\0}' ], 'overrides hex color only': [ '.block{color:#696969;color:rgba(68,68,68,.8);color:#444c}', '.block{color:#696969;color:rgba(68,68,68,.8);color:#444c}' ] }, { compatibility: 'ie8', level: 2 }) ) .addBatch( optimizerContext('level 2 off', { 'repeated' : [ 'a{color:red;color:red}', 'a{color:red;color:red}' ] }, { level: 1 }) ) .addBatch( optimizerContext('@media', { 'empty': [ '@media (min-width:980px){}', '' ], 'whitespace': [ ' @media ( min-width: 980px ){}', '' ], 'body': [ '@media (min-width:980px){\na\n{color:red}}', '@media (min-width:980px){a{color:red}}' ], 'multiple': [ '@media screen, print, (min-width:980px){a{color:red}}', '@media screen,print,(min-width:980px){a{color:red}}' ], 'nested once': [ '@media screen { @media print { a{color:red} } }', '@media screen{@media print{a{color:red}}}' ], 'nested twice': [ '@media screen { @media print { @media (min-width:980px) { a{color:red} } } }', '@media screen{@media print{@media (min-width:980px){a{color:red}}}}' ] }, { level: 2 }) ) .addBatch( optimizerContext('@font-face', { 'rebuilding': [ '@font-face{font-family:PublicVintage;src:url(/PublicVintage.otf) format(\'opentype\')}', '@font-face{font-family:PublicVintage;src:url(/PublicVintage.otf) format(\'opentype\')}' ] }, { level: 2 }) ) .addBatch( optimizerContext('colors', { 'four value colors': [ '.block{border:1px solid #0001}', '.block{border:1px solid #0001}' ], 'eight value colors': [ '.block{border:1px solid #00000001}', '.block{border:1px solid #00000001}' ], 'hsl color with fractions': [ '.block{border:1px solid hsl(0, 0%, 65.5%)}', '.block{border:1px solid hsl(0,0%,65.5%)}' ], 'hsla color with fractions': [ '.block{border:1px solid hsla(0, 0%, 65.5%, 0.2)}', '.block{border:1px solid hsla(0,0%,65.5%,.2)}' ] }, { level: 2 }) ) .addBatch( optimizerContext('unit merging', { 'font-size': [ 'div{font-size:1rem;font-size:16px}', 'div{font-size:16px}' ], 'height': [ 'div{height:1rem;height:16px}', 'div{height:16px}' ], 'width': [ 'div{width:1rem;width:16px}', 'div{width:16px}' ] }, { level: 2 }) ) .addBatch( optimizerContext('variables', { 'skip processing properties with variable values - border - 1st value': [ '.one{border:var(--color) solid 1px}', '.one{border:var(--color) solid 1px}' ], 'skip processing properties with variable values - border - 2nd value': [ '.one{border:red var(--style) 1px}', '.one{border:red var(--style) 1px}' ], 'skip processing properties with variable values - border - 3rd value': [ '.one{border:red solid var(--width)}', '.one{border:red solid var(--width)}' ], 'keeps variable as border-left only value': [ ':root{--border-test:1px solid red}.u-test{border-left:var(--border-test)!important}', ':root{--border-test:1px solid red}.u-test{border-left:var(--border-test)!important}' ], 'keeps variable as border-left two of three values': [ ':root{--a:1px;--b:red}.u-test{border-left:var(--a) solid var(--b)!important}', ':root{--a:1px;--b:red}.u-test{border-left:var(--a) solid var(--b)!important}' ], 'variables with whitespace as value': [ 'a{--test: }', 'a{--test: }' ], 'multiple variables with whitespace as value': [ 'a{--test1: ;--test2: }', 'a{--test1: ;--test2: }' ] }, { level: 2 }) ) .addBatch( optimizerContext('disabled removal of empty elements', { 'no body': [ 'a{}', 'a{}' ], 'body with whitespace': [ 'a{\n}', 'a{}' ], 'body with comment': [ 'a{/* a comment */}', 'a{}' ], '@media query': [ '@media screen{}', '@media screen{}' ], 'optimization result': [ 'a{color:red}div{color:red}', 'a,div{color:red}div{}' ] }, { level: { 1: { removeEmpty: false }, 2: { removeEmpty: false } } }) ) .addBatch( optimizerContext('skipping properties', { 'merging': [ '.block{background:url(test.png);background-repeat:repeat-y;font:16px serif;font-weight:700;margin:10px;margin-top:12px}', '.block{background:url(test.png);background-repeat:repeat-y;font:16px serif;font-weight:700;margin:12px 10px 10px}' ], 'overriding': [ '.block{background-repeat:repeat-y;background:url(test.png);font-weight:700;font:16px serif;margin-top:12px;margin:10px}', '.block{background-repeat:repeat-y;background:url(test.png);font-weight:700;font:16px serif;margin:10px}' ], 'rule restructuring': [ '.block-1{background:url(test.png)}.block-2{background-repeat:repeat-y;background:url(test.png)}', '.block-1{background:url(test.png)}.block-2{background-repeat:repeat-y;background:url(test.png)}' ], 'rule merging': [ '.block-1{background:url(test.png)}.block-2{background:url(test.png)}', '.block-1,.block-2{background:url(test.png)}' ] }, { level: { 2: { restructureRules: true, skipProperties: ['background', 'font'] } } }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/ 0000775 0000000 0000000 00000000000 14532047255 0022044 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/optimizer/level-2/properties/find-component-in-test.js 0000664 0000000 0000000 00000005467 14532047255 0026717 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var wrapForOptimizing = require('../../../../lib/optimizer/wrap-for-optimizing').all; var compatibilityFrom = require('../../../../lib/options/compatibility'); var populateComponents = require('../../../../lib/optimizer/level-2/properties/populate-components'); var validator = require('../../../../lib/optimizer/validator'); var findComponentIn = require('../../../../lib/optimizer/level-2/properties/find-component-in'); vows.describe(findComponentIn) .addBatch({ 'missing': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'padding-top'], ['property-value', '0px'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand]; }, 'is null': function (topic) { assert.isUndefined(findComponentIn.apply(null, topic)); } }, 'present': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'margin-top'], ['property-value', '1px'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand]; }, 'is null': function (topic) { assert.equal(findComponentIn.apply(null, topic).name, 'margin-top'); assert.deepEqual(findComponentIn.apply(null, topic).value, [['property-value', '0px']]); } }, 'subcomponent': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'border'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'border-left-style'], ['property-value', 'dotted'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand]; }, 'is null': function (topic) { assert.equal(findComponentIn.apply(null, topic).name, 'border-left-style'); assert.deepEqual(findComponentIn.apply(null, topic).value, [['property-value', 'solid']]); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/is-component-of-test.js 0000664 0000000 0000000 00000007562 14532047255 0026406 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var wrapForOptimizing = require('../../../../lib/optimizer/wrap-for-optimizing').all; var compatibilityFrom = require('../../../../lib/options/compatibility'); var populateComponents = require('../../../../lib/optimizer/level-2/properties/populate-components'); var validator = require('../../../../lib/optimizer/validator'); var isComponentOf = require('../../../../lib/optimizer/level-2/properties/is-component-of'); vows.describe(isComponentOf) .addBatch({ 'not matching': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'padding-top'], ['property-value', '0px'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand]; }, 'longhand is not a component of shorthand': function (topic) { assert.isFalse(isComponentOf.apply(null, topic)); }, 'shorthand is not a component of longhand': function (topic) { assert.isFalse(isComponentOf.apply(null, topic.reverse())); } }, 'matching': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'margin-top'], ['property-value', '0px'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand]; }, 'longhand is a component of shorthand': function (topic) { assert.isTrue(isComponentOf.apply(null, topic)); }, 'shorthand is not a component of longhand': function (topic) { assert.isFalse(isComponentOf.apply(null, topic.reverse())); } }, 'subcomponents': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'border'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'border-left-color'], ['property-value', 'blue'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand]; }, 'longhand is a component of shorthand': function (topic) { assert.isTrue(isComponentOf.apply(null, topic)); }, 'shorthand is not a component of longhand': function (topic) { assert.isFalse(isComponentOf.apply(null, topic.reverse())); } }, 'subcomponents in shallow mode': { 'topic': function () { var shorthand = wrapForOptimizing([ [ 'property', ['property-name', 'border'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ])[0]; var longhand = wrapForOptimizing([ [ 'property', ['property-name', 'border-left-color'], ['property-value', 'blue'] ] ])[0]; populateComponents([shorthand], validator(compatibilityFrom({})), []); return [shorthand, longhand, true]; }, 'longhand is not a component of shorthand': function (topic) { assert.isFalse(isComponentOf.apply(null, topic)); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/longhand-overriding-test.js 0000664 0000000 0000000 00000012520 14532047255 0027317 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var optimizeProperties = require('../../../../lib/optimizer/level-2/properties/optimize'); var tokenize = require('../../../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../../../lib/reader/input-source-map-tracker'); var compatibilityFrom = require('../../../../lib/options/compatibility'); var validator = require('../../../../lib/optimizer/validator'); function _optimize(source) { var tokens = tokenize(source, { inputSourceMapTracker: inputSourceMapTracker(), options: {}, warnings: [] }); var compat = compatibilityFrom(); var options = { compatibility: compat, level: { 2: { mergeIntoShorthands: true, mergeMedia: true, mergeSemantically: false, overrideProperties: true, restructureRules: true } } }; optimizeProperties( tokens[0][2], true, true, { options: options, validator: validator(compat) } ); return tokens[0][2]; } function longhandFirst(prefixedLonghand, prefixedShorthand, zeroValue) { return { 'topic': function () { return _optimize('a{' + prefixedLonghand + ':inherit;' + prefixedShorthand + ':' + zeroValue + '}'); }, 'has one token': function (properties) { assert.lengthOf(properties, 1); }, 'has zero value only': function (properties) { assert.deepEqual(properties[0][1][1], prefixedShorthand); assert.deepEqual(properties[0][2][1], zeroValue); } }; } function shorthandFirst(prefixedLonghand, prefixedShorthand, zeroValue) { return { 'topic': function () { return _optimize('a{' + prefixedShorthand + ':' + zeroValue + ';' + prefixedLonghand + ':inherit}'); }, 'has two tokens': function (properties) { assert.lengthOf(properties, 2); }, 'first is shorthand': function (properties) { assert.deepEqual(properties[0][1][1], prefixedShorthand); assert.deepEqual(properties[0][2][1], zeroValue); }, 'second is longhand': function (properties) { assert.deepEqual(properties[1][1][1], prefixedLonghand); assert.deepEqual(properties[1][2][1], 'inherit'); } }; } function overrideContext(longhands) { var context = {}; var vendorPrefixes = ['', '-moz-', '-o-', '-webkit-']; // there is no -ms-animation nor -ms-transition. var vendorPrefixesFor = ['animation', 'transition']; var defaultValues = { 'list-style-image': 'none', 'background': '0 0', 'border-color': 'red', 'border-style': 'none', 'list-style': 'none' }; for (var longhand in longhands) { for (var i = 0; i < longhands[longhand].length; i++) { var shorthand = longhands[longhand][i]; var prefixes = vendorPrefixesFor.indexOf(shorthand) > -1 ? vendorPrefixes : ['']; for (var j = 0, m = prefixes.length; j < m; j++) { var prefixedLonghand = prefixes[j] + longhand; var prefixedShorthand = prefixes[j] + shorthand; var zeroValue = defaultValues[prefixedShorthand] || '0'; context['should override ' + prefixedLonghand + ' with ' + prefixedShorthand] = longhandFirst(prefixedLonghand, prefixedShorthand, zeroValue); context['should not override ' + prefixedShorthand + ' shorthand with ' + prefixedLonghand] = shorthandFirst(prefixedLonghand, prefixedShorthand, zeroValue); } } } return context; } vows.describe(optimizeProperties) .addBatch( overrideContext({ 'background-attachment': ['background'], 'background-clip': ['background'], 'background-color': ['background'], 'background-image': ['background'], 'background-origin': ['background'], 'background-position': ['background'], 'background-repeat': ['background'], 'background-size': ['background'], 'border-color': ['border'], 'border-style': ['border'], 'border-width': ['border'], 'border-bottom': ['border'], 'border-bottom-color': ['border-bottom', 'border-color', 'border'], 'border-bottom-style': ['border-bottom', 'border-style', 'border'], 'border-bottom-width': ['border-bottom', 'border-width', 'border'], 'border-left': ['border'], 'border-left-color': ['border-left', 'border-color', 'border'], 'border-left-style': ['border-left', 'border-style', 'border'], 'border-left-width': ['border-left', 'border-width', 'border'], 'border-right': ['border'], 'border-right-color': ['border-right', 'border-color', 'border'], 'border-right-style': ['border-right', 'border-style', 'border'], 'border-right-width': ['border-right', 'border-width', 'border'], 'border-top': ['border'], 'border-top-color': ['border-top', 'border-color', 'border'], 'border-top-style': ['border-top', 'border-style', 'border'], 'border-top-width': ['border-top', 'border-width', 'border'], 'list-style-image': ['list-style'], 'list-style-position': ['list-style'], 'list-style-type': ['list-style'], 'margin-bottom': ['margin'], 'margin-left': ['margin'], 'margin-right': ['margin'], 'margin-top': ['margin'], 'outline-color': ['outline'], 'outline-style': ['outline'], 'outline-width': ['outline'], 'padding-bottom': ['padding'], 'padding-left': ['padding'], 'padding-right': ['padding'], 'padding-top': ['padding'] }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/merge-into-shorthands-test.js 0000664 0000000 0000000 00000077114 14532047255 0027612 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var optimizeProperties = require('../../../../lib/optimizer/level-2/properties/optimize'); var tokenize = require('../../../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../../../lib/reader/input-source-map-tracker'); var compatibilityFrom = require('../../../../lib/options/compatibility'); var validator = require('../../../../lib/optimizer/validator'); function _optimize(source) { var tokens = tokenize(source, { inputSourceMapTracker: inputSourceMapTracker(), options: {}, warnings: [] }); var compat = compatibilityFrom(compat); var options = { compatibility: compat, level: { 2: { mergeIntoShorthands: true, overrideProperties: true } } }; optimizeProperties( tokens[0][2], true, true, { options: options, validator: validator(compat) } ); return tokens[0][2]; } vows.describe(optimizeProperties) .addBatch({ 'shorthand background #1': { 'topic': function () { return _optimize('p{background-color:#111;background-image:url(image.png);background-repeat:repeat;background-position:0 0;background-attachment:scroll;background-size:auto;background-origin:padding-box;background-clip:border-box}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [ [1, 2, undefined], [1, 24, undefined], [1, 56, undefined], [1, 81, undefined], [1, 105, undefined], [1, 134, undefined], [1, 155, undefined], [1, 185, undefined] ]], ['property-value', 'url(image.png)', [[1, 41, undefined]]], ['property-value', '#111', [[1, 19, undefined]]] ] ]); } }, 'shorthand background #2': { 'topic': function () { return _optimize('p{background-color:#111;background-image:url(image.png);background-repeat:no-repeat;background-position:0 0;background-attachment:scroll;background-size:auto;background-origin:padding-box;background-clip:border-box}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [ [1, 2, undefined], [1, 24, undefined], [1, 56, undefined], [1, 84, undefined], [1, 108, undefined], [1, 137, undefined], [1, 158, undefined], [1, 188, undefined] ]], ['property-value', 'url(image.png)', [[1, 41, undefined]]], ['property-value', 'no-repeat', [[1, 74, undefined]]], ['property-value', '#111', [[1, 19, undefined]]] ] ]); } }, 'shorthand important background': { 'topic': function () { return _optimize('p{background-color:#111!important;background-image:url(image.png)!important;background-repeat:repeat!important;background-position:0 0!important;background-attachment:scroll!important;background-size:auto!important;background-origin:padding-box!important;background-clip:border-box!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [ [1, 2, undefined], [1, 34, undefined], [1, 76, undefined], [1, 111, undefined], [1, 145, undefined], [1, 184, undefined], [1, 215, undefined], [1, 255, undefined] ]], ['property-value', 'url(image.png)', [[1, 51, undefined]]], ['property-value', '#111!important', [[1, 19, undefined]]] ] ]); } }, 'shorthand border': { 'topic': function () { return _optimize('.block{border-width:1px;border-color:red;border-style:dotted}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [ [1, 7, undefined], [1, 24, undefined], [1, 41, undefined] ]], ['property-value', '1px', [[1, 20, undefined]]], ['property-value', 'dotted', [[1, 54, undefined]]], ['property-value', 'red', [[1, 37, undefined]]] ] ]); } }, 'shorthand border - mixed shorthands': { 'topic': function () { return _optimize('.block{border-width:1px;border-color:red;border-bottom:2px solid;border-style:dotted}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-width', [[1, 7, undefined]]], ['property-value', '1px', [[1, 20, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 24, undefined]]], ['property-value', 'red', [[1, 37, undefined]]] ], [ 'property', ['property-name', 'border-bottom', [[1, 41, undefined]]], ['property-value', '2px', [[1, 55, undefined]]], ['property-value', 'solid', [[1, 59, undefined]]] ], [ 'property', ['property-name', 'border-style', [[1, 65, undefined]]], ['property-value', 'dotted', [[1, 78, undefined]]] ] ]); } }, 'shorthand border - mixed shorthand and longhands': { 'topic': function () { return _optimize('.block{border-width:1px;border-bottom-width:2px;border-color:red;border-style:dotted}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-width', [[1, 7, undefined]]], ['property-value', '1px', [[1, 20, undefined]]], ['property-value', '1px', [[1, 20, undefined]]], ['property-value', '2px', [[1, 44, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 48, undefined]]], ['property-value', 'red', [[1, 61, undefined]]] ], [ 'property', ['property-name', 'border-style', [[1, 65, undefined]]], ['property-value', 'dotted', [[1, 78, undefined]]] ] ]); } }, 'shorthand border-width': { 'topic': function () { return _optimize('p{border-top-width:7px;border-bottom-width:7px;border-left-width:4px;border-right-width:4px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-width', [ [1, 2, undefined], [1, 23, undefined], [1, 47, undefined], [1, 69, undefined] ]], ['property-value', '7px', [[1, 19, undefined]]], ['property-value', '4px', [[1, 88, undefined]]] ] ]); } }, 'shorthand border-width - multi-valued': { 'topic': function () { return _optimize('.block{border-width:0 0 0 1px;border-color:red;border-style:dotted}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-width', [[1, 7, undefined]]], ['property-value', '0', [[1, 20, undefined]]], ['property-value', '0', [[1, 22, undefined]]], ['property-value', '0', [[1, 24, undefined]]], ['property-value', '1px', [[1, 26, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 30, undefined]]], ['property-value', 'red', [[1, 43, undefined]]] ], [ 'property', ['property-name', 'border-style', [[1, 47, undefined]]], ['property-value', 'dotted', [[1, 60, undefined]]] ] ]); } }, 'shorthand border-color #1': { 'topic': function () { return _optimize('p{border-top-color:#9fce00;border-bottom-color:#9fce00;border-left-color:#9fce00;border-right-color:#9fce00}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [ [1, 2, undefined], [1, 27, undefined], [1, 55, undefined], [1, 81, undefined] ]], ['property-value', '#9fce00', [[1, 19, undefined]]] ] ]); } }, 'shorthand border-color #2': { 'topic': function () { return _optimize('p{border-right-color:#002;border-bottom-color:#003;border-top-color:#001;border-left-color:#004}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [ [1, 2, undefined], [1, 26, undefined], [1, 51, undefined], [1, 73, undefined] ]], ['property-value', '#001', [[1, 68, undefined]]], ['property-value', '#002', [[1, 21, undefined]]], ['property-value', '#003', [[1, 46, undefined]]], ['property-value', '#004', [[1, 91, undefined]]] ] ]); } }, 'shorthand border-radius': { 'topic': function () { return _optimize('p{border-top-left-radius:7px;border-bottom-right-radius:6px;border-bottom-left-radius:5px;border-top-right-radius:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-radius', [ [1, 2, undefined], [1, 29, undefined], [1, 60, undefined], [1, 90, undefined] ]], ['property-value', '7px', [[1, 25, undefined]]], ['property-value', '3px', [[1, 114, undefined]]], ['property-value', '6px', [[1, 56, undefined]]], ['property-value', '5px', [[1, 86, undefined]]] ] ]); } }, 'shorthand multiplexed border-radius': { 'topic': function () { return _optimize('p{border-radius:7px/3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-radius', [[1, 2, undefined]]], ['property-value', '7px', [[1, 16, undefined]]], ['property-value', '/'], ['property-value', '3px', [[1, 20, undefined]]] ] ]); } }, 'shorthand asymmetric border-radius with same values': { 'topic': function () { return _optimize('p{border-top-left-radius:7px 3px;border-top-right-radius:7px 3px;border-bottom-right-radius:7px 3px;border-bottom-left-radius:7px 3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-radius', [ [1, 2, undefined], [1, 33, undefined], [1, 65, undefined], [1, 100, undefined] ]], ['property-value', '7px', [[1, 25, undefined]]], ['property-value', '/'], ['property-value', '3px', [[1, 29, undefined]]] ] ]); } }, 'shorthand asymmetric border-radius': { 'topic': function () { return _optimize('p{border-top-left-radius:7px 3px;border-top-right-radius:6px 2px;border-bottom-right-radius:5px 1px;border-bottom-left-radius:4px 0}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-radius', [ [1, 2, undefined], [1, 33, undefined], [1, 65, undefined], [1, 100, undefined] ]], ['property-value', '7px', [[1, 25, undefined]]], ['property-value', '6px', [[1, 57, undefined]]], ['property-value', '5px', [[1, 92, undefined]]], ['property-value', '4px', [[1, 126, undefined]]], ['property-value', '/'], ['property-value', '3px', [[1, 29, undefined]]], ['property-value', '2px', [[1, 61, undefined]]], ['property-value', '1px', [[1, 96, undefined]]], ['property-value', '0', [[1, 130, undefined]]] ] ]); } }, 'skipping -webkit-border-radius optimizations': { 'topic': function () { return _optimize('p{-webkit-border-radius:7px 3px 7px 3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-webkit-border-radius', [[1, 2, undefined]]], ['property-value', '7px', [[1, 24, undefined]]], ['property-value', '3px', [[1, 28, undefined]]], ['property-value', '7px', [[1, 32, undefined]]], ['property-value', '3px', [[1, 36, undefined]]] ] ]); } }, 'shorthand multiple !important': { 'topic': function () { return _optimize('a{border-color:#123 !important;border-top-color: #456 !important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', '#456', [[1, 49, undefined]]], ['property-value', '#123', [[1, 15, undefined]]], ['property-value', '#123!important', [[1, 15, undefined]]] ] ]); } }, 'shorthand list-style #1': { 'topic': function () { return _optimize('a{list-style-type:circle;list-style-position:outside;list-style-image:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'list-style', [ [1, 2, undefined], [1, 25, undefined], [1, 53, undefined] ]], ['property-value', 'circle', [[1, 18, undefined]]], ['property-value', 'url(image.png)', [[1, 70, undefined]]] ] ]); } }, 'shorthand list-style #2': { 'topic': function () { return _optimize('a{list-style-image:url(image.png);list-style-type:circle;list-style-position:inside}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'list-style', [ [1, 2, undefined], [1, 34, undefined], [1, 57, undefined] ]], ['property-value', 'circle', [[1, 50, undefined]]], ['property-value', 'inside', [[1, 77, undefined]]], ['property-value', 'url(image.png)', [[1, 19, undefined]]] ] ]); } }, 'shorthand margin': { 'topic': function () { return _optimize('a{margin-top:10px;margin-right:5px;margin-bottom:3px;margin-left:2px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin', [ [1, 2, undefined], [1, 18, undefined], [1, 35, undefined], [1, 53, undefined] ]], ['property-value', '10px', [[1, 13, undefined]]], ['property-value', '5px', [[1, 31, undefined]]], ['property-value', '3px', [[1, 49, undefined]]], ['property-value', '2px', [[1, 65, undefined]]] ] ]); } }, 'shorthand padding': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px;padding-right:2px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [ [1, 2, undefined], [1, 19, undefined], [1, 36, undefined], [1, 55, undefined] ]], ['property-value', '10px', [[1, 14, undefined]]], ['property-value', '2px', [[1, 69, undefined]]], ['property-value', '3px', [[1, 51, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ] ]); } }, 'mixed': { 'topic': function () { return _optimize('a{padding-top:10px;margin-top:3px;padding-left:5px;margin-left:3px;padding-bottom:3px;margin-bottom:3px;padding-right:2px;margin-right:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [ [1, 2, undefined], [1, 34, undefined], [1, 67, undefined], [1, 104, undefined] ]], ['property-value', '10px', [[1, 14, undefined]]], ['property-value', '2px', [[1, 118, undefined]]], ['property-value', '3px', [[1, 82, undefined]]], ['property-value', '5px', [[1, 47, undefined]]] ], [ 'property', ['property-name', 'margin', [ [1, 19, undefined], [1, 51, undefined], [1, 86, undefined], [1, 122, undefined] ]], ['property-value', '3px', [[1, 30, undefined]]] ] ]); } }, 'with other properties': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px;color:red;padding-right:2px;width:100px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 55, undefined]]], ['property-value', 'red', [[1, 61, undefined]]] ], [ 'property', ['property-name', 'padding', [ [1, 2, undefined], [1, 19, undefined], [1, 36, undefined], [1, 65, undefined] ]], ['property-value', '10px', [[1, 14, undefined]]], ['property-value', '2px', [[1, 79, undefined]]], ['property-value', '3px', [[1, 51, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ], [ 'property', ['property-name', 'width', [[1, 83, undefined]]], ['property-value', '100px', [[1, 89, undefined]]] ] ]); } }, 'with hacks': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px;_padding-right:2px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding-top', [[1, 2, undefined]]], ['property-value', '10px', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 19, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ], [ 'property', ['property-name', 'padding-bottom', [[1, 36, undefined]]], ['property-value', '3px', [[1, 51, undefined]]] ], [ 'property', ['property-name', '_padding-right', [[1, 55, undefined]]], ['property-value', '2px', [[1, 70, undefined]]] ] ]); } }, 'just inherit': { 'topic': function () { return _optimize('a{background:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'inherit', [[1, 13, undefined]]] ] ]); } } }) .addBatch({ 'not enough components': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding-top', [[1, 2, undefined]]], ['property-value', '10px', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 19, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ], [ 'property', ['property-name', 'padding-bottom', [[1, 36, undefined]]], ['property-value', '3px', [[1, 51, undefined]]] ] ]); } }, 'with inherit - one': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px;padding-right:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 2, undefined], [1, 19, undefined], [1, 36, undefined]]], ['property-value', '10px', [[1, 14, undefined]]], ['property-value', '5px', [[1, 32, undefined]]], ['property-value', '3px', [[1, 51, undefined]]] ], [ 'property', ['property-name', 'padding-right', [[1, 55, undefined]]], ['property-value', 'inherit', [[1, 69, undefined]]] ] ]); } }, 'with inherit - two': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:inherit;padding-right:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 36, undefined], [1, 59, undefined]]], ['property-value', 'inherit', [[1, 51, undefined], [1, 73, undefined]]] ], [ 'property', ['property-name', 'padding-top', [[1, 2, undefined]]], ['property-value', '10px', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 19, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ] ]); } }, 'with inherit - three': { 'topic': function () { return _optimize('a{padding-top:inherit;padding-left:5px;padding-bottom:inherit;padding-right:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 2, undefined], [1, 39, undefined], [1, 62, undefined]]], ['property-value', 'inherit', [[1, 14, undefined], [1, 54, undefined], [1, 76, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 22, undefined]]], ['property-value', '5px', [[1, 35, undefined]]] ] ]); } }, 'with inherit - four': { 'topic': function () { return _optimize('a{padding-top:inherit;padding-left:inherit;padding-bottom:inherit;padding-right:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 2, undefined], [1, 22, undefined], [1, 43, undefined], [1, 66, undefined]]], ['property-value', 'inherit', [[1, 14, undefined]]] ] ]); } }, 'with inherit - outline': { 'topic': function () { return _optimize('.block{outline-width:inherit;outline-style:solid;outline-color:red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'outline', [[1, 29, undefined], [1, 49, undefined]]], ['property-value', 'red', [[1, 63, undefined]]], ['property-value', 'solid', [[1, 43, undefined]]] ], [ 'property', ['property-name', 'outline-width', [[1, 7, undefined]]], ['property-value', 'inherit', [[1, 21, undefined]]], ] ]); } }, 'mixed importance': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px;padding-right:2px!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding-top', [[1, 2, undefined]]], ['property-value', '10px', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 19, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ], [ 'property', ['property-name', 'padding-bottom', [[1, 36, undefined]]], ['property-value', '3px', [[1, 51, undefined]]] ], [ 'property', ['property-name', 'padding-right', [[1, 55, undefined]]], ['property-value', '2px!important', [[1, 69, undefined]]] ] ]); } }, 'mixed understandability of units': { 'topic': function () { return _optimize('a{padding-top:10px;padding-left:5px;padding-bottom:3px;padding-right:-moz-calc(100% - 20px)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding-top', [[1, 2, undefined]]], ['property-value', '10px', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 19, undefined]]], ['property-value', '5px', [[1, 32, undefined]]] ], [ 'property', ['property-name', 'padding-bottom', [[1, 36, undefined]]], ['property-value', '3px', [[1, 51, undefined]]] ], [ 'property', ['property-name', 'padding-right', [[1, 55, undefined]]], ['property-value', '-moz-calc(100% - 20px)', [[1, 69, undefined]]] ] ]); } }, 'mixed understandability of images': { 'topic': function () { return _optimize('p{background-color:#111;background-image:linear-gradient(sth);background-repeat:repeat;background-position:0 0;background-attachment:scroll;background-size:auto;background-origin:padding-box;background-clip:border-box}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-color', [[1, 2, undefined]]], ['property-value', '#111', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 24, undefined]]], ['property-value', 'linear-gradient(sth)', [[1, 41, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 62, undefined]]], ['property-value', 'repeat', [[1, 80, undefined]]] ], [ 'property', ['property-name', 'background-position', [[1, 87, undefined]]], ['property-value', '0', [[1, 107, undefined]]], ['property-value', '0', [[1, 109, undefined]]] ], [ 'property', ['property-name', 'background-attachment', [[1, 111, undefined]]], ['property-value', 'scroll', [[1, 133, undefined]]] ], [ 'property', ['property-name', 'background-size', [[1, 140, undefined]]], ['property-value', 'auto', [[1, 156, undefined]]] ], [ 'property', ['property-name', 'background-origin', [[1, 161, undefined]]], ['property-value', 'padding-box', [[1, 179, undefined]]] ], [ 'property', ['property-name', 'background-clip', [[1, 191, undefined]]], ['property-value', 'border-box', [[1, 207, undefined]]] ] ]); } }, '!important and default values': { 'topic': function () { return _optimize('.block{border-color:currentColor!important;border-radius:0!important;border-style:none!important;border-width:medium!important;list-style-type:inherit!important;list-style-position:outside!important;list-style-image:none!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-radius', [[1, 43, undefined]]], ['property-value', '0!important', [[1, 57, undefined]]] ], [ 'property', ['property-name', 'border', [[1, 7, undefined], [1, 69, undefined], [1, 97, undefined]]], ['property-value', 'currentColor!important', [[1, 20, undefined]]] ], [ 'property', ['property-name', 'list-style', [[1, 161, undefined], [1, 199, undefined]]], ['property-value', 'outside!important'] ], [ 'property', ['property-name', 'list-style-type', [[1, 127, undefined]]], ['property-value', 'inherit!important', [[1, 143, undefined]]] ] ]); } } }) .addBatch({ 'transition': { 'topic': function () { return _optimize('.block{transition-property:width;transition-duration:5s;transition-timing-function:ease-in;transition-delay:2s}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [ [1, 7, undefined], [1, 33, undefined], [1, 56, undefined], [1, 91, undefined] ]], ['property-value', 'width', [[1, 27, undefined]]], ['property-value', '5s', [[1, 53, undefined]]], ['property-value', 'ease-in', [[1, 83, undefined]]], ['property-value', '2s', [[1, 108, undefined]]] ] ]); } }, 'transition when one component is multiplex': { 'topic': function () { return _optimize('.block{transition-property:transform,margin-left;transition-delay:0ms;transition-duration:375ms;transition-timing-function:ease-out}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [ [1, 7, undefined], [1, 49, undefined], [1, 70, undefined], [1, 96, undefined] ]], ['property-value', 'transform', [[1, 27, undefined]]], ['property-value', '375ms', [[1, 90, undefined]]], ['property-value', 'ease-out', [[1, 123, undefined]]], ['property-value', '0ms', [[1, 66, undefined]]], ['property-value', ','], ['property-value', 'margin-left', [[1, 37, undefined]]], ['property-value', '375ms', [[1, 90, undefined]]], ['property-value', 'ease-out', [[1, 123, undefined]]], ['property-value', '0ms', [[1, 66, undefined]]] ] ]); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/optimize-test.js 0000664 0000000 0000000 00000076632 14532047255 0025235 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var optimizeProperties = require('../../../../lib/optimizer/level-2/properties/optimize'); var tokenize = require('../../../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../../../lib/reader/input-source-map-tracker'); var compatibilityFrom = require('../../../../lib/options/compatibility'); var validator = require('../../../../lib/optimizer/validator'); function _optimize(source, compatibilityOptions) { var compat = compatibilityFrom(compatibilityOptions); var options = { compatibility: compat, level: { 2: { mergeIntoShorthands: true, mergeMedia: false, mergeSemantically: false, overrideProperties: true, restructureRules: false } } }; var tokens = tokenize(source, { inputSourceMapTracker: inputSourceMapTracker(), options: {}, warnings: [] }); optimizeProperties( tokens[0][2], true, true, { options: options, validator: validator(compat) } ); return tokens[0][2]; } vows.describe(optimizeProperties) .addBatch({ 'of two properties': { 'topic': function () { return _optimize('a{display:inline-block;color:red;display:block}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 23, undefined]]], ['property-value', 'red', [[1, 29, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 33, undefined]]], ['property-value', 'block', [[1, 41, undefined]]] ] ]); } }, 'of two adjacent properties': { 'topic': function () { return _optimize('a{display:-moz-inline-box;display:inline-block}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 26, undefined]]], ['property-value', 'inline-block', [[1, 34, undefined]]] ] ]); } }, 'of two same properties with same value where latter is a hack': { 'topic': function () { return _optimize('a{margin:0;_margin:0}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin', [[1, 2, undefined]]], ['property-value', '0', [[1, 9, undefined]]] ], [ 'property', ['property-name', '_margin', [[1, 11, undefined]]], ['property-value', '0', [[1, 19, undefined]]] ] ]); } }, 'of two same properties with same value where latter is !important': { 'topic': function () { return _optimize('a{margin:0;margin:0 !important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin', [[1, 11, undefined]]], ['property-value', '0!important', [[1, 18, undefined]]] ] ]); } }, 'of two properties where former is !important': { 'topic': function () { return _optimize('a{display:inline-block!important;color:red;display:block}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 2, undefined]]], ['property-value', 'inline-block!important', [[1, 10, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 33, undefined]]], ['property-value', 'red', [[1, 39, undefined]]] ] ]); } }, 'of two properties where latter is !important': { 'topic': function () { return _optimize('a{display:inline-block;color:red;display:block!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 23, undefined]]], ['property-value', 'red', [[1, 29, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 33, undefined]]], ['property-value', 'block!important', [[1, 41, undefined]]] ] ]); } }, 'of two properties where both are !important': { 'topic': function () { return _optimize('a{display:inline-block!important;color:red;display:block!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 33, undefined]]], ['property-value', 'red', [[1, 39, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 43, undefined]]], ['property-value', 'block!important', [[1, 51, undefined]]] ] ]); } }, 'of many properties': { 'topic': function () { return _optimize('a{display:inline-block;color:red;font-weight:bolder;font-weight:700;display:block!important;color:#fff}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font-weight', [[1, 52, undefined]]], ['property-value', '700', [[1, 64, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 68, undefined]]], ['property-value', 'block!important', [[1, 76, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 92, undefined]]], ['property-value', '#fff', [[1, 98, undefined]]] ] ]); } }, 'both redefined': { 'topic': function () { return _optimize('p{display:block;display:-moz-inline-box;color:red;display:table-cell}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 40, undefined]]], ['property-value', 'red', [[1, 46, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 50, undefined]]], ['property-value', 'table-cell', [[1, 58, undefined]]] ] ]); } }, 'filter treated as background': { 'topic': function () { return _optimize('p{background:-moz-linear-gradient();background:-webkit-linear-gradient();filter:"progid:DXImageTransform";background:linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', '-moz-linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 36, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 47, undefined]]] ], [ 'property', ['property-name', 'filter', [[1, 73, undefined]]], ['property-value', '"progid:DXImageTransform"', [[1, 80, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 106, undefined]]], ['property-value', 'linear-gradient()', [[1, 117, undefined]]] ] ]); } }, 'filter treated as background-image': { 'topic': function () { return _optimize('p{background-image:-moz-linear-gradient();background-image:-webkit-linear-gradient();filter:"progid:DXImageTransform";background-image:linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-image', [[1, 2, undefined]]], ['property-value', '-moz-linear-gradient()', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 42, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 59, undefined]]] ], [ 'property', ['property-name', 'filter', [[1, 85, undefined]]], ['property-value', '"progid:DXImageTransform"', [[1, 92, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 118, undefined]]], ['property-value', 'linear-gradient()', [[1, 135, undefined]]] ] ]); } }, '-ms-filter treated as background': { 'topic': function () { return _optimize('p{background:-moz-linear-gradient();background:-webkit-linear-gradient();-ms-filter:"progid:DXImageTransform";background:linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', '-moz-linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 36, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 47, undefined]]] ], [ 'property', ['property-name', '-ms-filter', [[1, 73, undefined]]], ['property-value', '"progid:DXImageTransform"', [[1, 84, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 110, undefined]]], ['property-value', 'linear-gradient()', [[1, 121, undefined]]] ] ]); } }, '-ms-filter treated as background-image': { 'topic': function () { return _optimize('p{background-image:-moz-linear-gradient();background-image:-webkit-linear-gradient();-ms-filter:"progid:DXImageTransform";background-image:linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-image', [[1, 2, undefined]]], ['property-value', '-moz-linear-gradient()', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 42, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 59, undefined]]] ], [ 'property', ['property-name', '-ms-filter', [[1, 85, undefined]]], ['property-value', '"progid:DXImageTransform"', [[1, 96, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 122, undefined]]], ['property-value', 'linear-gradient()', [[1, 139, undefined]]] ] ]); } }, 'longhand then shorthand 123': { 'topic': function () { return _optimize('p{border-left-style:solid;border:1px dotted red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 26, undefined]]], ['property-value', '1px', [[1, 33, undefined]]], ['property-value', 'dotted', [[1, 37, undefined]]], ['property-value', 'red', [[1, 44, undefined]]] ] ]); } }, 'longhand then shorthand with important': { 'topic': function () { return _optimize('p{border-left-style:solid!important;border:1px dotted red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-left-style', [[1, 2, undefined]]], ['property-value', 'solid!important', [[1, 20, undefined]]] ], [ 'property', ['property-name', 'border', [[1, 36, undefined]]], ['property-value', '1px', [[1, 43, undefined]]], ['property-value', 'dotted', [[1, 47, undefined]]], ['property-value', 'red', [[1, 54, undefined]]] ] ]); } }, 'shorthand then longhand': { 'topic': function () { return _optimize('p{background:url(image.png);background-image:#fff}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 28, undefined]]], ['property-value', '#fff', [[1, 45, undefined]]] ] ]); } } }) .addBatch({ 'list-style fuzzy matching': { 'topic': function () { return _optimize('p{list-style:inside none}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'list-style', [[1, 2, undefined]]], ['property-value', 'none', [[1, 20, undefined]]], ['property-value', 'inside', [[1, 13, undefined]]] ] ]); } } }) .addBatch({ 'ie hacks - normal before hack': { 'topic': function () { return _optimize('p{color:red;display:none;color:#fff\\9}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 12, undefined]]], ['property-value', 'none', [[1, 20, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 25, undefined]]], ['property-value', '#fff\\9', [[1, 31, undefined]]] ] ]); } }, 'ie hacks - normal after hack': { 'topic': function () { return _optimize('p{color:red\\9;display:none;color:#fff}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red\\9', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 14, undefined]]], ['property-value', 'none', [[1, 22, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 27, undefined]]], ['property-value', '#fff', [[1, 33, undefined]]] ] ]); } }, 'ie hacks - hack after hack': { 'topic': function () { return _optimize('p{color:red\\9;display:none;color:#fff\\9}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 14, undefined]]], ['property-value', 'none', [[1, 22, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 27, undefined]]], ['property-value', '#fff\\9', [[1, 33, undefined]]] ] ]); } }, 'not overriddable': { 'topic': function () { return _optimize('a{display:inline-block;color:red;display:-moz-block}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 2, undefined]]], ['property-value', 'inline-block', [[1, 10, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 23, undefined]]], ['property-value', 'red', [[1, 29, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 33, undefined]]], ['property-value', '-moz-block', [[1, 41, undefined]]] ] ]); } } }) .addBatch({ 'understandable - 2 properties, both !important, 2nd less understandable': { 'topic': function () { return _optimize('a{color:red!important;display:block;color:rgba(0,255,0,.5)!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 36, undefined]]], ['property-value', 'rgba(0,255,0,.5)!important', [[1, 42, undefined]]] ] ]); } }, 'understandable - 2 properties, both !important, 2nd less understandable - IE8 mode': { 'topic': function () { return _optimize('a{color:red!important;display:block;color:rgba(0,255,0,.5)!important}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 36, undefined]]], ['property-value', 'rgba(0,255,0,.5)!important', [[1, 42, undefined]]] ] ]); } }, 'understandable - 2 properties, both !important, 2nd more understandable': { 'topic': function () { return _optimize('a{color:rgba(0,255,0,.5)!important;display:block;color:red!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 35, undefined]]], ['property-value', 'block', [[1, 43, undefined]]] ], [ 'property', ['property-name', 'color', [[1, 49, undefined]]], ['property-value', 'red!important', [[1, 55, undefined]]] ] ]); } }, 'understandable - 2 adjacent properties, both !important, 2nd less understandable': { 'topic': function () { return _optimize('a{background:red!important;background:rgba(0,255,0,.5)!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'rgba(0,255,0,.5)!important', [[1, 38, undefined]]] ] ]); } }, 'understandable - 2 adjacent properties, both !important, 2nd less understandable - IE8 mode': { 'topic': function () { return _optimize('a{background:red!important;background:rgba(0,255,0,.5)!important}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 27, undefined]]], ['property-value', 'rgba(0,255,0,.5)!important', [[1, 38, undefined]]] ] ]); } }, 'understandable - 2 adjacent properties, both !important and understandable': { 'topic': function () { return _optimize('a{background:rgba(0,255,0,.5)!important;background:red!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 51, undefined]]] ] ]); } }, 'understandable - 2 adjacent -ms-transform with different values': { 'topic': function () { return _optimize('div{-ms-transform:translate(0,0);-ms-transform:translate3d(0,0,0)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-ms-transform', [[1, 4, undefined]]], ['property-value', 'translate(0,0)', [[1, 18, undefined]]] ], [ 'property', ['property-name', '-ms-transform', [[1, 33, undefined]]], ['property-value', 'translate3d(0,0,0)', [[1, 47, undefined]]] ] ]); } }, 'understandable - 2 non-adjacent -ms-transform with different values': { 'topic': function () { return _optimize('div{-ms-transform:translate(0,0);-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-ms-transform', [[1, 4, undefined]]], ['property-value', 'translate(0,0)', [[1, 18, undefined]]] ], [ 'property', ['property-name', '-webkit-transform', [[1, 33, undefined]]], ['property-value', 'translate3d(0,0,0)', [[1, 51, undefined]]] ], [ 'property', ['property-name', '-ms-transform', [[1, 70, undefined]]], ['property-value', 'translate3d(0,0,0)', [[1, 84, undefined]]] ] ]); } }, 'understandable - 2 adjacent transform with different values': { 'topic': function () { return _optimize('div{transform:translate(0,0);transform:translate3d(0,0,0)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transform', [[1, 4, undefined]]], ['property-value', 'translate(0,0)', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'transform', [[1, 29, undefined]]], ['property-value', 'translate3d(0,0,0)', [[1, 39, undefined]]] ] ]); } }, 'understandable - 2 non-adjacent transform with different values': { 'topic': function () { return _optimize('div{transform:translate(0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transform', [[1, 4, undefined]]], ['property-value', 'translate(0,0)', [[1, 14, undefined]]] ], [ 'property', ['property-name', '-webkit-transform', [[1, 29, undefined]]], ['property-value', 'translate3d(0,0,0)', [[1, 47, undefined]]] ], [ 'property', ['property-name', 'transform', [[1, 66, undefined]]], ['property-value', 'translate3d(0,0,0)', [[1, 76, undefined]]] ] ]); } }, 'understandable - border(hex) with border(rgba)': { 'topic': function () { return _optimize('a{border:1px solid #fff;border:1px solid rgba(1,0,0,.5)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 31, undefined]]], ['property-value', 'solid', [[1, 35, undefined]]], ['property-value', 'rgba(1,0,0,.5)', [[1, 41, undefined]]] ] ]); } }, 'understandable - border(hex) with border(rgba) - IE8 mode': { 'topic': function () { return _optimize('a{border:1px solid #fff;border:1px solid rgba(1,0,0,.5)}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', '#fff', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'border', [[1, 24, undefined]]], ['property-value', '1px', [[1, 31, undefined]]], ['property-value', 'solid', [[1, 35, undefined]]], ['property-value', 'rgba(1,0,0,.5)', [[1, 41, undefined]]] ] ]); } }, 'understandable - border(hex) with border(rgba !important)': { 'topic': function () { return _optimize('a{border:1px solid #fff;border:1px solid rgba(1,0,0,.5)!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 24, undefined]]], ['property-value', '1px', [[1, 31, undefined]]], ['property-value', 'solid', [[1, 35, undefined]]], ['property-value', 'rgba(1,0,0,.5)!important', [[1, 41, undefined]]] ] ]); } }, 'understandable - border(hex !important) with border(hex)': { 'topic': function () { return _optimize('a{border:1px solid #fff!important;display:block;border:1px solid #fff}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', '#fff!important', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 34, undefined]]], ['property-value', 'block', [[1, 42, undefined]]] ] ]); } }, 'understandable - border(hex) with border(hex !important)': { 'topic': function () { return _optimize('a{border:1px solid #fff;display:block;border:1px solid #fff!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 24, undefined]]], ['property-value', 'block', [[1, 32, undefined]]] ], [ 'property', ['property-name', 'border', [[1, 38, undefined]]], ['property-value', '1px', [[1, 45, undefined]]], ['property-value', 'solid', [[1, 49, undefined]]], ['property-value', '#fff!important', [[1, 55, undefined]]] ] ]); } }, 'understandable - unit with function with unit without one': { 'topic': function () { return _optimize('a{border-top-width:calc(100%);display:block;border-top-width:1px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'display', [[1, 30, undefined]]], ['property-value', 'block', [[1, 38, undefined]]] ], [ 'property', ['property-name', 'border-top-width', [[1, 44, undefined]]], ['property-value', '1px', [[1, 61, undefined]]] ] ]); } }, 'understandable - unit without function with unit with one': { 'topic': function () { return _optimize('a{border-top-width:1px;display:block;border-top-width:calc(100%)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-top-width', [[1, 2, undefined]]], ['property-value', '1px', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 23, undefined]]], ['property-value', 'block', [[1, 31, undefined]]] ], [ 'property', ['property-name', 'border-top-width', [[1, 37, undefined]]], ['property-value', 'calc(100%)', [[1, 54, undefined]]] ] ]); } }, 'understandable - non adjacent units': { 'topic': function () { return _optimize('a{margin-top:80px;padding-top:30px;margin-top:10vmin}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding-top', [[1, 18, undefined]]], ['property-value', '30px', [[1, 30, undefined]]] ], [ 'property', ['property-name', 'margin-top', [[1, 35, undefined]]], ['property-value', '10vmin', [[1, 46, undefined]]] ] ]); } } }) .addBatch({ 'understandable - non adjacent units in IE8 mode': { 'topic': function () { return _optimize('a{margin-top:80px;padding-top:30px;margin-top:10vmin}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin-top', [[1, 2, undefined]]], ['property-value', '80px', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'padding-top', [[1, 18, undefined]]], ['property-value', '30px', [[1, 30, undefined]]] ], [ 'property', ['property-name', 'margin-top', [[1, 35, undefined]]], ['property-value', '10vmin', [[1, 46, undefined]]] ] ]); } }, 'understandable - 2 adjacent properties, both !important, 2nd more understandable in IE8 mode': { 'topic': function () { return _optimize('a{background:rgba(0,255,0,.5)!important;background:red!important}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'rgba(0,255,0,.5)!important', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 40, undefined]]], ['property-value', 'red!important', [[1, 51, undefined]]] ] ]); } }, 'understandable - border(hex) with border(rgba !important) in IE8 mode': { 'topic': function () { return _optimize('a{border:1px solid #fff!important;border:1px solid rgba(1,0,0,.5)!important}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', '#fff!important', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'border', [[1, 34, undefined]]], ['property-value', '1px', [[1, 41, undefined]]], ['property-value', 'solid', [[1, 45, undefined]]], ['property-value', 'rgba(1,0,0,.5)!important', [[1, 51, undefined]]] ] ]); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/override-properties-test.js 0000664 0000000 0000000 00000273647 14532047255 0027413 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var optimizeProperties = require('../../../../lib/optimizer/level-2/properties/optimize'); var tokenize = require('../../../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../../../lib/reader/input-source-map-tracker'); var compatibilityFrom = require('../../../../lib/options/compatibility'); var validator = require('../../../../lib/optimizer/validator'); function _optimize(source, compat) { var tokens = tokenize(source, { inputSourceMapTracker: inputSourceMapTracker(), options: {}, warnings: [] }); compat = compatibilityFrom(compat); var options = { compatibility: compat, level: { 2: { mergeIntoShorthands: true, overrideProperties: true } } }; optimizeProperties( tokens[0][2], true, true, { options: options, validator: validator(compat) } ); return tokens[0][2]; } vows.describe(optimizeProperties) .addBatch({ 'animation shorthand and longhand': { 'topic': function () { return _optimize('.block{animation:1s ease-in;animation-name:slidein}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 7, undefined]]], ['property-value', '1s', [[1, 17, undefined]]], ['property-value', 'ease-in', [[1, 20, undefined]]], ['property-value', 'slidein', [[1, 43, undefined]]] ] ]); } }, 'animation longhand and shorthand': { 'topic': function () { return _optimize('.block{animation-fill-mode:both;animation:ease-in}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 32, undefined]]], ['property-value', 'ease-in', [[1, 42, undefined]]], ] ]); } }, 'animation shorthand with overriddable shorthand': { 'topic': function () { return _optimize('.block{animation:1s infinite slidein;animation:ease-in 2}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 7, undefined]]], ['property-value', 'ease-in', [[1, 47, undefined]]], ['property-value', '2', [[1, 55, undefined]]] ] ]); } }, 'animation shorthand and multiplex longhand': { 'topic': function () { return _optimize('.block{animation:1s infinite slidein;animation-timing-function:ease-in,ease-out}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 7, undefined]]], ['property-value', '1s', [[1, 17, undefined]]], ['property-value', 'ease-in', [[1, 63, undefined]]], ['property-value', 'infinite', [[1, 20, undefined]]], ['property-value', 'slidein', [[1, 29, undefined]]], ['property-value', ','], ['property-value', '1s', [[1, 17, undefined]]], ['property-value', 'ease-out', [[1, 71, undefined]]], ['property-value', 'infinite', [[1, 20, undefined]]], ['property-value', 'slidein', [[1, 29, undefined]]] ] ]); } }, 'animation multiplex shorthand and longhand': { 'topic': function () { return _optimize('.block{animation:ease-in,ease-out;animation-duration:1s}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 7, undefined]]], ['property-value', '1s', [[1, 53, undefined]]], ['property-value', 'ease-in', [[1, 17, undefined]]], ['property-value', ','], ['property-value', '1s', [[1, 53, undefined]]], ['property-value', 'ease-out', [[1, 25, undefined]]] ] ]); } }, 'animation shorthand and multiplex longhand - too long to merge': { 'topic': function () { return _optimize('.block{animation:ease-in;animation-name:longname1,longname2,longname3}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 7, undefined]]], ['property-value', 'ease-in', [[1, 17, undefined]]], ], [ 'property', ['property-name', 'animation-name', [[1, 25, undefined]]], ['property-value', 'longname1', [[1, 40, undefined]]], ['property-value', ',', [[1, 49, undefined]]], ['property-value', 'longname2', [[1, 50, undefined]]], ['property-value', ',', [[1, 59, undefined]]], ['property-value', 'longname3', [[1, 60, undefined]]] ] ]); } }, 'animation shorthand and inherit longhand': { 'topic': function () { return _optimize('.block{animation:1s infinite slidein;animation-timing-function:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'animation', [[1, 7, undefined]]], ['property-value', '1s', [[1, 17, undefined]]], ['property-value', 'infinite', [[1, 20, undefined]]], ['property-value', 'slidein', [[1, 29, undefined]]] ], [ 'property', ['property-name', 'animation-timing-function', [[1, 37, undefined]]], ['property-value', 'inherit', [[1, 63, undefined]]] ] ]); } }, 'vendor prefixed animation shorthand and longhand': { 'topic': function () { return _optimize('.block{-webkit-animation:1s infinite slidein;-webkit-animation-timing-function:ease-in}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-webkit-animation', [[1, 7, undefined]]], ['property-value', '1s', [[1, 25, undefined]]], ['property-value', 'ease-in', [[1, 79, undefined]]], ['property-value', 'infinite', [[1, 28, undefined]]], ['property-value', 'slidein', [[1, 37, undefined]]] ] ]); } } }) .addBatch({ 'longhand then longhand - background colors as functions': { 'topic': function () { return _optimize('p{background-color:-ms-linear-gradient(top,red,#000);background-color:linear-gradient(top,red,#000)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-color', [[1, 2, undefined]]], ['property-value', '-ms-linear-gradient(top,red,#000)', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background-color', [[1, 53, undefined]]], ['property-value', 'linear-gradient(top,red,#000)', [[1, 70, undefined]]] ] ]); } }, 'longhand then longhand - background position as function': { 'topic': function () { return _optimize('p{background-position:-moz-calc(100% - 1em) 0;background-position:calc(100% - 1em) 0}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-position', [[1, 2, undefined]]], ['property-value', '-moz-calc(100% - 1em)', [[1, 22, undefined]]], ['property-value', '0', [[1, 44, undefined]]] ], [ 'property', ['property-name', 'background-position', [[1, 46, undefined]]], ['property-value', 'calc(100% - 1em)', [[1, 66, undefined]]], ['property-value', '0', [[1, 83, undefined]]] ] ]); } }, 'longhand then longhand - background position as same function': { 'topic': function () { return _optimize('p{background-position:calc(100% - 1em) 0;background-position:calc(100% - 1em) 1em}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-position', [[1, 41, undefined]]], ['property-value', 'calc(100% - 1em)', [[1, 61, undefined]]], ['property-value', '1em', [[1, 78, undefined]]] ] ]); } }, 'longhand then longhand - background position as function by value': { 'topic': function () { return _optimize('p{background-position:calc(100% - 1em) 0;background-position:1em 1em}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-position', [[1, 41, undefined]]], ['property-value', '1em', [[1, 61, undefined]]], ['property-value', '1em', [[1, 65, undefined]]] ] ]); } }, 'longhand then longhand - background position as value by function': { 'topic': function () { return _optimize('p{background-position:1em 0;background-position:calc(100% - 1em) 1em}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-position', [[1, 2, undefined]]], ['property-value', '1em', [[1, 22, undefined]]], ['property-value', '0', [[1, 26, undefined]]] ], [ 'property', ['property-name', 'background-position', [[1, 28, undefined]]], ['property-value', 'calc(100% - 1em)', [[1, 48, undefined]]], ['property-value', '1em', [[1, 65, undefined]]] ] ]); } }, 'longhand then longhand - background size as function': { 'topic': function () { return _optimize('p{background-size:-moz-calc(100% - 1em) 0;background-size:calc(100% - 1em) 0}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-size', [[1, 2, undefined]]], ['property-value', '-moz-calc(100% - 1em)', [[1, 18, undefined]]], ['property-value', '0', [[1, 40, undefined]]] ], [ 'property', ['property-name', 'background-size', [[1, 42, undefined]]], ['property-value', 'calc(100% - 1em)', [[1, 58, undefined]]], ['property-value', '0', [[1, 75, undefined]]] ] ]); } }, 'longhand then shorthand': { 'topic': function () { return _optimize('p{background-image:none;background:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 24, undefined]]], ['property-value', 'url(image.png)', [[1, 35, undefined]]] ] ]); } }, 'longhand then shorthand - important then non-important': { 'topic': function () { return _optimize('p{background-image:none!important;background:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-image', [[1, 2, undefined]]], ['property-value', 'none!important', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 34, undefined]]], ['property-value', 'url(image.png)', [[1, 45, undefined]]] ] ]); } }, 'longhand then shorthand - with vendor prefixed function': { 'topic': function () { return _optimize('p{background-color:red;background:-ms-linear-gradient(top,red,#000)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 23, undefined]]], ['property-value', '-ms-linear-gradient(top,red,#000)', [[1, 34, undefined]]] ] ]); } }, 'longhand then shorthand - with same vendor prefixed function': { 'topic': function () { return _optimize('p{background-image:-ms-linear-gradient(bottom,black,white);background:-ms-linear-gradient(top,red,#000)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 59, undefined]]], ['property-value', '-ms-linear-gradient(top,red,#000)', [[1, 70, undefined]]] ] ]); } }, 'longhand then shorthand - with different vendor prefixed function': { 'topic': function () { return _optimize('p{background-image:linear-gradient(bottom,black,white);background:-ms-linear-gradient(top,red,#000)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-image', [[1, 2, undefined]]], ['property-value', 'linear-gradient(bottom,black,white)', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 55, undefined]]], ['property-value', '-ms-linear-gradient(top,red,#000)', [[1, 66, undefined]]] ] ]); } }, 'longhand then shorthand - with unprefixed function': { 'topic': function () { return _optimize('p{background-color:red;background:linear-gradient(red,blue)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 23, undefined]]], ['property-value', 'linear-gradient(red,blue)', [[1, 34, undefined]]] ] ]); } }, 'shorthand then longhand': { 'topic': function () { return _optimize('p{background:url(image.png) repeat;background-repeat:no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]], ['property-value', 'no-repeat', [[1, 53, undefined]]] ] ]); } }, 'shorthand then longhand - important then non-important': { 'topic': function () { return _optimize('p{background:url(image.png) repeat-x!important;background-repeat:no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]], ['property-value', 'repeat-x!important', [[1, 28, undefined]]] ] ]); } }, 'shorthand then longhand - non-important then important': { 'topic': function () { return _optimize('p{background:url(image.png) repeat;background-repeat:no-repeat!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 35, undefined]]], ['property-value', 'no-repeat!important', [[1, 53, undefined]]] ] ]); } }, 'shorthand then longhand - disabled background size merging': { 'topic': function () { return _optimize('p{background:url(image.png);background-size:50%}', { properties: { backgroundSizeMerging: false } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-size', [[1, 28, undefined]]], ['property-value', '50%', [[1, 44, undefined]]] ] ]); } }, 'shorthand then longhand - disabled background clip merging': { 'topic': function () { return _optimize('p{background:url(image.png);background-clip:padding-box}', { properties: { backgroundClipMerging: false } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-clip', [[1, 28, undefined]]], ['property-value', 'padding-box', [[1, 44, undefined]]] ] ]); } }, 'shorthand then longhand - enabled background clip merging': { 'topic': function () { return _optimize('p{background:url(image.png);background-clip:padding-box}', { properties: { backgroundClipMerging: true } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]], ['property-value', 'padding-box'] ] ]); } }, 'shorthand then longhand - disabled background origin merging': { 'topic': function () { return _optimize('p{background:url(image.png);background-origin:border-box}', { properties: { backgroundOriginMerging: false } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-origin', [[1, 28, undefined]]], ['property-value', 'border-box', [[1, 46, undefined]]] ] ]); } }, 'shorthand then longhand - enabled background origin merging': { 'topic': function () { return _optimize('p{background:url(image.png);background-origin:border-box}', { properties: { backgroundOriginMerging: true } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]], ['property-value', 'border-box', [[1, 46, undefined]]] ] ]); } }, 'shorthand then longhand - non mergeable value': { 'topic': function () { return _optimize('p{background:url(image.png);background-color:none}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-color', [[1, 28, undefined]]], ['property-value', 'none', [[1, 45, undefined]]] ] ]); } }, 'shorthand then multiplex longhand - non mergeable value': { 'topic': function () { return _optimize('p{background:#fff;background-image:url(image.png),linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', '#fff', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 18, undefined]]], ['property-value', 'url(image.png)', [[1, 35, undefined]]], ['property-value', ',', [[1, 49, undefined]]], ['property-value', 'linear-gradient()', [[1, 50, undefined]]] ] ]); } }, 'shorthand then longhand - border with rgba() and color opacity on': { 'topic': function () { return _optimize('p{border:solid rgba(0,0,0,0);border-color:transparent}', { colors: { opacity: true } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', 'solid', [[1, 9, undefined]]], ['property-value', 'transparent', [[1, 42, undefined]]] ] ]); } }, 'shorthand then longhand - border with rgba() and color opacity off': { 'topic': function () { return _optimize('p{border:solid rgba(0,0,0,0);border-color:transparent}', { colors: { opacity: false } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', 'solid', [[1, 9, undefined]]], ['property-value', 'rgba(0,0,0,0)', [[1, 15, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 29, undefined]]], ['property-value', 'transparent', [[1, 42, undefined]]] ] ]); } }, 'shorthand then longhand - color into a color - with merging off': { 'topic': function () { return _optimize('p{background:white;background-color:red}', { properties: { merging: false } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'red', [[1, 36, undefined]]] ], ]); } }, 'shorthand then longhand - color into a function - with merging off': { 'topic': function () { return _optimize('p{background:linear-gradient();background-color:red}', { properties: { merging: false } }); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-color', [[1, 31, undefined]]], ['property-value', 'red', [[1, 48, undefined]]] ] ]); } }, 'shorthand then longhand - two shorthands - pending #527': { 'topic': function () { return _optimize('p{background:-webkit-linear-gradient();background:linear-gradient();background-repeat:repeat-x}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 39, undefined]]], ['property-value', 'linear-gradient()', [[1, 50, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 68, undefined]]], ['property-value', 'repeat-x', [[1, 86, undefined]]] ] ]); } }, 'shorthand then longhand - two shorthands and default - pending #527': { 'topic': function () { return _optimize('p{background:-webkit-linear-gradient();background:linear-gradient();background-repeat:repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 39, undefined]]], ['property-value', 'linear-gradient()', [[1, 50, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 68, undefined]]], ['property-value', 'repeat', [[1, 86, undefined]]] ] ]); } }, 'shorthand then longhand - two mergeable shorthands and default - pending #527': { 'topic': function () { return _optimize('p{background:url(image.png);background:url(image.jpg);background-repeat:repeat-x}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.jpg)', [[1, 39, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 54, undefined]]], ['property-value', 'repeat-x', [[1, 72, undefined]]] ] ]); } }, 'shorthand then longhand - non-function into a function': { 'topic': function () { return _optimize('p{background:linear-gradient();background-color:red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-color', [[1, 31, undefined]]], ['property-value', 'red', [[1, 48, undefined]]] ] ]); } }, 'shorthand then longhand - function into a non-function': { 'topic': function () { return _optimize('p{background:repeat-x;background-image:-webkit-linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'repeat-x', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 22, undefined]]], ['property-value', '-webkit-linear-gradient()', [[1, 39, undefined]]] ] ]); } }, 'shorthand then longhand - unset value in shorthand': { 'topic': function () { return _optimize('p{padding:unset;padding-left:30px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 2, undefined]]], ['property-value', 'unset', [[1, 10, undefined]]] ], [ 'property', ['property-name', 'padding-left', [[1, 16, undefined]]], ['property-value', '30px', [[1, 29, undefined]]] ] ]); } }, 'shorthand then shorthand - same values': { 'topic': function () { return _optimize('p{background:red;background:red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'red', [[1, 28, undefined]]] ] ]); } }, 'shorthand then shorthand - same values with defaults': { 'topic': function () { return _optimize('p{background:repeat red;background:red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'red', [[1, 35, undefined]]] ] ]); } }, 'shorthand then shorthand - with different functions': { 'topic': function () { return _optimize('p{background:linear-gradient();background:-webkit-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'linear-gradient()', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 31, undefined]]], ['property-value', '-webkit-gradient()', [[1, 42, undefined]]] ] ]); } }, 'shorthand then shorthand - with function then url': { 'topic': function () { return _optimize('p{background:linear-gradient();background:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 42, undefined]]] ] ]); } }, 'shorthand then shorthand - with url then function': { 'topic': function () { return _optimize('p{background:url(image.png);background:linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 28, undefined]]], ['property-value', 'linear-gradient()', [[1, 39, undefined]]] ] ]); } }, 'shorthand then shorthand - important then non-important': { 'topic': function () { return _optimize('p{background:url(image.png) no-repeat!important;background:url(image.jpg) repeat red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]], ['property-value', 'no-repeat!important', [[1, 28, undefined]]] ] ]); } }, 'shorthand then shorthand - non-important then important': { 'topic': function () { return _optimize('p{background:url(image.png) no-repeat;background:url(image.jpg) repeat red!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 38, undefined]]], ['property-value', 'url(image.jpg)', [[1, 49, undefined]]], ['property-value', 'red!important', [[1, 71, undefined]]] ] ]); } }, 'shorthand then shorthand - same value and latter important': { 'topic': function () { return _optimize('a{margin:0;margin:0 !important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin', [[1, 11, undefined]]], ['property-value', '0!important', [[1, 18, undefined]]] ] ]); } }, 'background-clip, -origin, and -size': { 'topic': function () { return _optimize('a{background:url(/image.png);background-size:10px;background-origin:border-box;background-clip:padding-box}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(/image.png)', [[1, 13, undefined]]], ['property-value', 0], ['property-value', 0], ['property-value', '/'], ['property-value', '10px', [[1, 45, undefined]]], ['property-value', 'border-box', [[1, 68, undefined]]], ['property-value', 'padding-box', [[1, 95, undefined]]] ] ]); } }, 'background-clip, -origin, and -size - IE8 compatibility mode': { 'topic': function () { return _optimize('a{background:url(/image.png);background-size:10px;background-origin:border-box;background-clip:padding-box}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(/image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background-size', [[1, 29, undefined]]], ['property-value', '10px', [[1, 45, undefined]]] ], [ 'property', ['property-name', 'background-origin', [[1, 50, undefined]]], ['property-value', 'border-box', [[1, 68, undefined]]] ], [ 'property', ['property-name', 'background-clip', [[1, 79, undefined]]], ['property-value', 'padding-box', [[1, 95, undefined]]] ] ]); } } }) .addBatch({ 'border': { 'topic': function () { return _optimize('a{border:1px solid red;border-style:dotted}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'dotted', [[1, 36, undefined]]], ['property-value', 'red', [[1, 19, undefined]]] ] ]); } }, 'border - multivalue righthand': { 'topic': function () { return _optimize('a{border:1px solid red;border-style:dotted solid}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', 'red', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'border-style', [[1, 23, undefined]]], ['property-value', 'dotted', [[1, 36, undefined]]], ['property-value', 'solid', [[1, 43, undefined]]] ] ]); } }, 'border - important righthand': { 'topic': function () { return _optimize('a{border:1px solid red;border-style:dotted!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', 'red', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'border-style', [[1, 23, undefined]]], ['property-value', 'dotted!important', [[1, 36, undefined]]], ] ]); } }, 'border - important lefthand': { 'topic': function () { return _optimize('a{border:1px solid red!important;border-style:dotted}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', 'red!important', [[1, 19, undefined]]] ] ]); } }, 'border - both important': { 'topic': function () { return _optimize('a{border:1px solid red!important;border-style:dotted!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'dotted', [[1, 46, undefined]]], ['property-value', 'red!important', [[1, 19, undefined]]] ] ]); } }, 'border - hex and rgb colors': { 'topic': function () { return _optimize('a{border:1px solid #000;border-color:rgba(255,0,0,.5)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', 'rgba(255,0,0,.5)', [[1, 37, undefined]]], ] ]); } }, 'border - hex and rgb colors - IE8 mode': { 'topic': function () { return _optimize('a{border:1px solid #000;border-color:rgba(255,0,0,.5)}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border', [[1, 2, undefined]]], ['property-value', '1px', [[1, 9, undefined]]], ['property-value', 'solid', [[1, 13, undefined]]], ['property-value', '#000', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 24, undefined]]], ['property-value', 'rgba(255,0,0,.5)', [[1, 37, undefined]]], ] ]); } }, 'border-color - hex then rgb': { 'topic': function () { return _optimize('a{border-color:#000;border-color:rgba(255,0,0,.5)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', 'rgba(255,0,0,.5)', [[1, 33, undefined]]], ] ]); } }, 'border-color - hex then rgb - IE8 mode': { 'topic': function () { return _optimize('a{border-color:#000;border-color:rgba(255,0,0,.5)}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', '#000', [[1, 15, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 20, undefined]]], ['property-value', 'rgba(255,0,0,.5)', [[1, 33, undefined]]], ] ]); } }, 'border-color - rgb then hex': { 'topic': function () { return _optimize('a{border-color:rgba(255,0,0,.5);border-color:#000}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', '#000', [[1, 45, undefined]]] ] ]); } }, 'border-color - hex then rgb with multiple values': { 'topic': function () { return _optimize('a{border-color:red;border-color:#000 rgba(255,0,0,.5)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', '#000', [[1, 32, undefined]]], ['property-value', 'rgba(255,0,0,.5)', [[1, 37, undefined]]], ] ]); } }, 'border-color - hex then rgb with multiple values - IE8 mode': { 'topic': function () { return _optimize('a{border-color:red;border-color:#000 rgba(255,0,0,.5)}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 15, undefined]]] ], [ 'property', ['property-name', 'border-color', [[1, 19, undefined]]], ['property-value', '#000', [[1, 32, undefined]]], ['property-value', 'rgba(255,0,0,.5)', [[1, 37, undefined]]], ] ]); } } }) .addBatch({ 'border radius': { 'topic': function () { return _optimize('a{-moz-border-radius:2px;-moz-border-top-left-radius:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-moz-border-radius', [[1, 2, undefined]]], ['property-value', '3px', [[1, 53, undefined]]], ['property-value', '2px', [[1, 21, undefined]]], ['property-value', '2px', [[1, 21, undefined]]] ] ]); } }, 'border radius prefixed and unprefixed': { 'topic': function () { return _optimize('a{-moz-border-radius:2px;border-top-left-radius:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-moz-border-radius', [[1, 2, undefined]]], ['property-value', '2px', [[1, 21, undefined]]] ], [ 'property', ['property-name', 'border-top-left-radius', [[1, 25, undefined]]], ['property-value', '3px', [[1, 48, undefined]]] ] ]); } }, 'border width': { 'topic': function () { return _optimize('a{border-width:2px 3px 2px 1px;border-left-width:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'border-width', [[1, 2, undefined]]], ['property-value', '2px', [[1, 15, undefined]]], ['property-value', '3px', [[1, 19, undefined]]] ] ]); } }, 'list style': { 'topic': function () { return _optimize('a{list-style:circle inside;list-style-image:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'list-style', [[1, 2, undefined]]], ['property-value', 'circle', [[1, 13, undefined]]], ['property-value', 'inside', [[1, 20, undefined]]], ['property-value', 'url(image.png)', [[1, 44, undefined]]] ] ]); } }, 'margin': { 'topic': function () { return _optimize('a{margin:10px 20px;margin-left:25px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin', [[1, 2, undefined]]], ['property-value', '10px', [[1, 9, undefined]]], ['property-value', '20px', [[1, 14, undefined]]], ['property-value', '10px', [[1, 9, undefined]]], ['property-value', '25px', [[1, 31, undefined]]] ] ]); } }, 'outline': { 'topic': function () { return _optimize('a{outline:red solid 1px;outline-width:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'outline', [[1, 2, undefined]]], ['property-value', 'red', [[1, 10, undefined]]], ['property-value', 'solid', [[1, 14, undefined]]], ['property-value', '3px', [[1, 38, undefined]]] ] ]); } }, 'outline with vendor prefixed color 1234': { 'topic': function () { return _optimize('a{outline:red solid 1px;outline:-webkit-focus-ring-color auto 5px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'outline', [[1, 2, undefined]]], ['property-value', 'red', [[1, 10, undefined]]], ['property-value', 'solid', [[1, 14, undefined]]], ['property-value', '1px', [[1, 20, undefined]]] ], [ 'property', ['property-name', 'outline', [[1, 24, undefined]]], ['property-value', '-webkit-focus-ring-color', [[1, 32, undefined]]], ['property-value', 'auto', [[1, 57, undefined]]], ['property-value', '5px', [[1, 62, undefined]]] ] ]); } }, 'padding': { 'topic': function () { return _optimize('a{padding:10px;padding-right:20px;padding-left:20px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 2, undefined]]], ['property-value', '10px', [[1, 10, undefined]]], ['property-value', '20px', [[1, 29, undefined]]], ] ]); } } }) .addBatch({ 'colors with same understandability': { 'topic': function () { return _optimize('a{color:red;color:#fff;color:blue}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 23, undefined]]], ['property-value', 'blue', [[1, 29, undefined]]], ] ]); } }, 'colors with different understandability': { 'topic': function () { return _optimize('a{color:red;color:#fff;color:blue;color:rgba(1,2,3,.4)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 34, undefined]]], ['property-value', 'rgba(1,2,3,.4)', [[1, 40, undefined]]], ] ]); } }, 'colors with different understandability - IE8 mode': { 'topic': function () { return _optimize('a{color:red;color:#fff;color:blue;color:rgba(1,2,3,.4)}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 23, undefined]]], ['property-value', 'blue', [[1, 29, undefined]]], ], [ 'property', ['property-name', 'color', [[1, 34, undefined]]], ['property-value', 'rgba(1,2,3,.4)', [[1, 40, undefined]]], ] ]); } }, 'colors with different understandability overridden by high understandability': { 'topic': function () { return _optimize('a{color:red;color:#fff;color:blue;color:rgba(1,2,3,.4);color:red}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 55, undefined]]], ['property-value', 'red', [[1, 61, undefined]]], ] ]); } }, 'colors with different understandability and importance #1': { 'topic': function () { return _optimize('a{color:#fff!important;color:rgba(1,2,3,.4)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', '#fff!important', [[1, 8, undefined]]], ] ]); } }, 'colors with different understandability and importance #2': { 'topic': function () { return _optimize('a{color:#fff;color:rgba(1,2,3,.4)!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 13, undefined]]], ['property-value', 'rgba(1,2,3,.4)!important', [[1, 19, undefined]]], ] ]); } }, 'colors with different understandability and importance #2 - IE8 mode': { 'topic': function () { return _optimize('a{color:#fff;color:rgba(1,2,3,.4)!important}', 'ie8'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', '#fff', [[1, 8, undefined]]], ], [ 'property', ['property-name', 'color', [[1, 13, undefined]]], ['property-value', 'rgba(1,2,3,.4)!important', [[1, 19, undefined]]], ] ]); } } }) .addBatch({ 'shorthand then shorthand multiplex': { 'topic': function () { return _optimize('p{background:url(one.png);background:url(two.png) center 1px,url(three.png) center 2px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(one.png)', [[1, 13, undefined]]], ], [ 'property', ['property-name', 'background', [[1, 26, undefined]]], ['property-value', 'url(two.png)', [[1, 37, undefined]]], ['property-value', 'center', [[1, 50, undefined]]], ['property-value', '1px', [[1, 57, undefined]]], ['property-value', ','], ['property-value', 'url(three.png)', [[1, 61, undefined]]], ['property-value', 'center', [[1, 76, undefined]]], ['property-value', '2px', [[1, 83, undefined]]] ] ]); } }, 'shorthand then longhand multiplex': { 'topic': function () { return _optimize('p{background:top left;background-repeat:no-repeat,no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 40, undefined]]], ['property-value', ','], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 50, undefined]]] ] ]); } }, 'shorthand then longhand multiplex - background-image': { 'topic': function () { return _optimize('p{background:url(one.png);background-repeat:no-repeat,repeat-x}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(one.png)', [[1, 13, undefined]]], ['property-value', 'no-repeat', [[1, 44, undefined]]], ['property-value', ','], ['property-value', 'repeat-x', [[1, 54, undefined]]] ] ]); } }, 'shorthand multiplex then longhand repeat': { 'topic': function () { return _optimize('p{background:url(image.png),url(image.jpg);background-repeat:no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]], ['property-value', 'no-repeat', [[1, 61, undefined]]], ['property-value', ','], ['property-value', 'url(image.jpg)', [[1, 28, undefined]]], ['property-value', 'no-repeat', [[1, 61, undefined]]] ] ]); } }, 'shorthand multiplex then longhand image': { 'topic': function () { return _optimize('p{background:no-repeat,no-repeat;background-image:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 50, undefined]]], ['property-value', 'no-repeat', [[1, 13, undefined]]], ['property-value', ','], ['property-value', 'no-repeat', [[1, 23, undefined]]] ] ]); } }, 'longhand then shorthand multiplex': { 'topic': function () { return _optimize('p{background-repeat:no-repeat;background:url(image.png),url(image.jpg)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 30, undefined]]], ['property-value', 'url(image.png)', [[1, 41, undefined]]], ['property-value', ','], ['property-value', 'url(image.jpg)', [[1, 56, undefined]]], ] ]); } }, 'longhand multiplex then shorthand': { 'topic': function () { return _optimize('p{background-repeat:no-repeat,no-repeat;background:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 40, undefined]]], ['property-value', 'url(image.png)', [[1, 51, undefined]]], ] ]); } }, 'multiplex longhand into multiplex shorthand': { 'topic': function () { return _optimize('p{background:no-repeat,no-repeat;background-position:top left,bottom left}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'top', [[1, 53, undefined]]], ['property-value', 'left', [[1, 57, undefined]]], ['property-value', 'no-repeat', [[1, 13, undefined]]], ['property-value', ','], ['property-value', 'bottom', [[1, 62, undefined]]], ['property-value', 'left', [[1, 69, undefined]]], ['property-value', 'no-repeat', [[1, 23, undefined]]] ] ]); } }, 'two multiplex shorthands with vendor specific functions': { 'topic': function () { return _optimize('p{background:url(1.png),-webkit-linear-gradient();background:url(1.png),linear-gradient()}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(1.png)', [[1, 13, undefined]]], ['property-value', ','], ['property-value', '-webkit-linear-gradient()', [[1, 24, undefined]]], ], [ 'property', ['property-name', 'background', [[1, 50, undefined]]], ['property-value', 'url(1.png)', [[1, 61, undefined]]], ['property-value', ','], ['property-value', 'linear-gradient()', [[1, 72, undefined]]], ] ]); } }, 'not too long into multiplex #1': { 'topic': function () { return _optimize('p{background:top left;background-repeat:no-repeat,no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 40, undefined]]], ['property-value', ','], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 50, undefined]]] ] ]); } }, 'not too long into multiplex #2': { 'topic': function () { return _optimize('p{background:repeat content-box;background-repeat:no-repeat,no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'no-repeat', [[1, 50, undefined]]], ['property-value', 'content-box', [[1, 20, undefined]]], ['property-value', ','], ['property-value', 'no-repeat', [[1, 60, undefined]]], ['property-value', 'content-box', [[1, 20, undefined]]] ] ]); } }, 'not too long into multiplex - twice': { 'topic': function () { return _optimize('p{background:top left;background-repeat:no-repeat,no-repeat;background-image:url(image.png),url(image.jpg)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 77, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 40, undefined]]], ['property-value', ','], ['property-value', 'url(image.jpg)', [[1, 92, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 50, undefined]]] ] ]); } }, 'not too long into multiplex - over a property': { 'topic': function () { return _optimize('p{background:top left;background-repeat:no-repeat,no-repeat;background-image:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 77, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 40, undefined]]], ['property-value', ','], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', 'no-repeat', [[1, 50, undefined]]] ] ]); } }, 'too long into multiplex #1': { 'topic': function () { return _optimize('p{background:top left / 100px 20px;background-repeat:no-repeat,no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', '/'], ['property-value', '100px', [[1, 24, undefined]]], ['property-value', '20px', [[1, 30, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 35, undefined]]], ['property-value', 'no-repeat', [[1, 53, undefined]]], ['property-value', ',', [[1, 62, undefined]]], ['property-value', 'no-repeat', [[1, 63, undefined]]] ] ]); } }, 'too long into multiplex #2': { 'topic': function () { return _optimize('p{background:content-box padding-box;background-repeat:no-repeat,no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'content-box', [[1, 13, undefined]]], ['property-value', 'padding-box', [[1, 25, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 37, undefined]]], ['property-value', 'no-repeat', [[1, 55, undefined]]], ['property-value', ',', [[1, 64, undefined]]], ['property-value', 'no-repeat', [[1, 65, undefined]]] ] ]); } }, 'too long into multiplex #3 - equal size': { 'topic': function () { return _optimize('p{background:top left / 20px 20px;background-repeat:no-repeat,no-repeat}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'top', [[1, 13, undefined]]], ['property-value', 'left', [[1, 17, undefined]]], ['property-value', '/'], ['property-value', '20px', [[1, 24, undefined]]], ['property-value', '20px', [[1, 29, undefined]]] ], [ 'property', ['property-name', 'background-repeat', [[1, 34, undefined]]], ['property-value', 'no-repeat', [[1, 52, undefined]]], ['property-value', ',', [[1, 61, undefined]]], ['property-value', 'no-repeat', [[1, 62, undefined]]] ] ]); } }, 'background color into background': { 'topic': function () { return _optimize('p{background:red;background-image:url(image.png),url(image.jpg)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 34, undefined]]], ['property-value', ','], ['property-value', 'url(image.jpg)', [[1, 49, undefined]]], ['property-value', 'red', [[1, 13, undefined]]] ] ]); } }, 'background then background - svg hack': { 'topic': function () { return _optimize('p{background:url(image.png);background:url(image.svg),none}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 28, undefined]]], ['property-value', 'url(image.svg)', [[1, 39, undefined]]], ['property-value', ','], ['property-value', 'none', [[1, 54, undefined]]] ] ]); } }, 'background then background - inverted svg hack': { 'topic': function () { return _optimize('p{background:url(image.png);background:none,url(image.svg)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'background', [[1, 28, undefined]]], ['property-value', '0 0'], ['property-value', ','], ['property-value', 'url(image.svg)', [[1, 44, undefined]]] ] ]); } }, 'background-image then background-image - svg hack': { 'topic': function () { return _optimize('p{background-image:url(image.png);background-image:url(image.svg),none}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background-image', [[1, 2, undefined]]], ['property-value', 'url(image.png)', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'background-image', [[1, 34, undefined]]], ['property-value', 'url(image.svg)', [[1, 51, undefined]]], ['property-value', ',', [[1, 65, undefined]]], ['property-value', 'none', [[1, 66, undefined]]] ] ]); } } }) .addBatch({ 'font shorthand and longhand': { 'topic': function () { return _optimize('.block{font:12px sans-serif;font-weight:bold}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 7, undefined]]], ['property-value', 'bold', [[1, 40, undefined]]], ['property-value', '12px', [[1, 12, undefined]]], ['property-value', 'sans-serif', [[1, 17, undefined]]] ] ]); } }, 'font shorthand and line-height': { 'topic': function () { return _optimize('.block{font:12px sans-serif;line-height:16px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 7, undefined]]], ['property-value', '12px', [[1, 12, undefined]]], ['property-value', '/'], ['property-value', '16px', [[1, 40, undefined]]], ['property-value', 'sans-serif', [[1, 17, undefined]]] ] ]); } }, 'font longhand and shorthand': { 'topic': function () { return _optimize('.block{font-stretch:extra-condensed;font:12px sans-serif}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 36, undefined]]], ['property-value', '12px', [[1, 41, undefined]]], ['property-value', 'sans-serif', [[1, 46, undefined]]] ] ]); } }, 'font shorthand with overriddable shorthand': { 'topic': function () { return _optimize('.block{font:bold 14px serif;font:12px sans-serif}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 7, undefined]]], ['property-value', '12px', [[1, 33, undefined]]], ['property-value', 'sans-serif', [[1, 38, undefined]]] ] ]); } }, 'font shorthand with non-overriddable shorthand': { 'topic': function () { return _optimize('.block{font:bold 14px serif;font:16px -moz-sans-serif}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 7, undefined]]], ['property-value', 'bold', [[1, 12, undefined]]], ['property-value', '14px', [[1, 17, undefined]]], ['property-value', 'serif', [[1, 22, undefined]]] ], [ 'property', ['property-name', 'font', [[1, 28, undefined]]], ['property-value', '16px', [[1, 33, undefined]]], ['property-value', '-moz-sans-serif', [[1, 38, undefined]]] ] ]); } }, 'font shorthand after non-component longhands': { 'topic': function () { return _optimize('.block{font-kerning:none;font-synthesis:none;font:14px serif}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font-kerning', [[1, 7, undefined]]], ['property-value', 'none', [[1, 20, undefined]]] ], [ 'property', ['property-name', 'font-synthesis', [[1, 25, undefined]]], ['property-value', 'none', [[1, 40, undefined]]] ], [ 'property', ['property-name', 'font', [[1, 45, undefined]]], ['property-value', '14px', [[1, 50, undefined]]], ['property-value', 'serif', [[1, 55, undefined]]] ] ]); } }, 'system font shorthand before longhand': { 'topic': function () { return _optimize('.block{font:icon;font-weight:bold}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 7, undefined]]], ['property-value', 'icon', [[1, 12, undefined]]] ], [ 'property', ['property-name', 'font-weight', [[1, 17, undefined]]], ['property-value', 'bold', [[1, 29, undefined]]] ] ]); } }, 'system font shorthand after longhand': { 'topic': function () { return _optimize('.block{font-weight:bold;font:icon}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 24, undefined]]], ['property-value', 'icon', [[1, 29, undefined]]] ] ]); } }, 'two system font shorthands': { 'topic': function () { return _optimize('.block{font:status-bar;font:icon}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'font', [[1, 23, undefined]]], ['property-value', 'icon', [[1, 28, undefined]]] ] ]); } } }) .addBatch({ 'padding !important then not !important': { 'topic': function () { return _optimize('a{padding:0!important;padding-left:3px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'padding', [[1, 2, undefined]]], ['property-value', '0!important', [[1, 10, undefined]]] ] ]); } } }) .addBatch({ 'bottom': { 'topic': function () { return _optimize('.block{bottom:0;bottom:2rem}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'bottom', [[1, 16, undefined]]], ['property-value', '2rem', [[1, 23, undefined]]] ] ]); } }, 'bottom - non overriddable': { 'topic': function () { return _optimize('.block{bottom:2rem;bottom:calc(1vm + 1px)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'bottom', [[1, 7, undefined]]], ['property-value', '2rem', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'bottom', [[1, 19, undefined]]], ['property-value', 'calc(1vm + 1px)', [[1, 26, undefined]]] ] ]); } }, 'cursor': { 'topic': function () { return _optimize('.block{cursor:auto;cursor:pointer}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'cursor', [[1, 19, undefined]]], ['property-value', 'pointer', [[1, 26, undefined]]] ] ]); } }, 'cursor - non overriddable': { 'topic': function () { return _optimize('.block{cursor:pointer;cursor:url(image.png)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'cursor', [[1, 7, undefined]]], ['property-value', 'pointer', [[1, 14, undefined]]] ], [ 'property', ['property-name', 'cursor', [[1, 22, undefined]]], ['property-value', 'url(image.png)', [[1, 29, undefined]]] ] ]); } }, 'left': { 'topic': function () { return _optimize('.block{left:0;left:2rem}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'left', [[1, 14, undefined]]], ['property-value', '2rem', [[1, 19, undefined]]] ] ]); } }, 'left - non overriddable': { 'topic': function () { return _optimize('.block{left:2rem;left:calc(1vm + 1px)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'left', [[1, 7, undefined]]], ['property-value', '2rem', [[1, 12, undefined]]] ], [ 'property', ['property-name', 'left', [[1, 17, undefined]]], ['property-value', 'calc(1vm + 1px)', [[1, 22, undefined]]] ] ]); } }, 'position': { 'topic': function () { return _optimize('.block{position:static;position:relative}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'position', [[1, 23, undefined]]], ['property-value', 'relative', [[1, 32, undefined]]] ] ]); } }, 'position - non overriddable': { 'topic': function () { return _optimize('.block{position:fixed;position:sticky}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'position', [[1, 7, undefined]]], ['property-value', 'fixed', [[1, 16, undefined]]] ], [ 'property', ['property-name', 'position', [[1, 22, undefined]]], ['property-value', 'sticky', [[1, 31, undefined]]] ] ]); } }, 'overflow': { 'topic': function () { return _optimize('.block{overflow:hidden;overflow:visible}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'overflow', [[1, 23, undefined]]], ['property-value', 'visible', [[1, 32, undefined]]] ] ]); } }, 'overflow - non overriddable': { 'topic': function () { return _optimize('.block{overflow:hidden;overflow:-moz-scrollbars-none }'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'overflow', [[1, 7, undefined]]], ['property-value', 'hidden', [[1, 16, undefined]]] ], [ 'property', ['property-name', 'overflow', [[1, 23, undefined]]], ['property-value', '-moz-scrollbars-none', [[1, 32, undefined]]] ] ]); } }, 'right': { 'topic': function () { return _optimize('.block{right:0;right:2rem}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'right', [[1, 15, undefined]]], ['property-value', '2rem', [[1, 21, undefined]]] ] ]); } }, 'right - non overriddable': { 'topic': function () { return _optimize('.block{right:2rem;right:calc(1vm + 1px)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'right', [[1, 7, undefined]]], ['property-value', '2rem', [[1, 13, undefined]]] ], [ 'property', ['property-name', 'right', [[1, 18, undefined]]], ['property-value', 'calc(1vm + 1px)', [[1, 24, undefined]]] ] ]); } }, 'top': { 'topic': function () { return _optimize('.block{top:0;top:2rem}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'top', [[1, 13, undefined]]], ['property-value', '2rem', [[1, 17, undefined]]] ] ]); } }, 'top - non overriddable': { 'topic': function () { return _optimize('.block{top:2rem;top:calc(1vm + 1px)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'top', [[1, 7, undefined]]], ['property-value', '2rem', [[1, 11, undefined]]] ], [ 'property', ['property-name', 'top', [[1, 16, undefined]]], ['property-value', 'calc(1vm + 1px)', [[1, 20, undefined]]] ] ]); } }, 'text-align': { 'topic': function () { return _optimize('.block{text-align:center;text-align:justify}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'text-align', [[1, 25, undefined]]], ['property-value', 'justify', [[1, 36, undefined]]] ] ]); } }, 'text-align - non overriddable': { 'topic': function () { return _optimize('.block{text-align:center;text-align:start}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'text-align', [[1, 7, undefined]]], ['property-value', 'center', [[1, 18, undefined]]] ], [ 'property', ['property-name', 'text-align', [[1, 25, undefined]]], ['property-value', 'start', [[1, 36, undefined]]] ] ]); } }, 'text-decoration': { 'topic': function () { return _optimize('.block{text-decoration:none;text-decoration:underline}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'text-decoration', [[1, 28, undefined]]], ['property-value', 'underline', [[1, 44, undefined]]] ] ]); } }, 'text-decoration - non overriddable': { 'topic': function () { return _optimize('.block{text-decoration:none;text-decoration:blink}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'text-decoration', [[1, 7, undefined]]], ['property-value', 'none', [[1, 23, undefined]]] ], [ 'property', ['property-name', 'text-decoration', [[1, 28, undefined]]], ['property-value', 'blink', [[1, 44, undefined]]] ] ]); } }, 'text-overflow': { 'topic': function () { return _optimize('.block{text-overflow:clip;text-overflow:ellipsis}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'text-overflow', [[1, 26, undefined]]], ['property-value', 'ellipsis', [[1, 40, undefined]]] ] ]); } }, 'text-overflow - non overriddable': { 'topic': function () { return _optimize('.block{text-overflow:clip;text-overflow:"..."}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'text-overflow', [[1, 7, undefined]]], ['property-value', 'clip', [[1, 21, undefined]]] ], [ 'property', ['property-name', 'text-overflow', [[1, 26, undefined]]], ['property-value', '"..."', [[1, 40, undefined]]] ] ]); } }, 'vertical-align': { 'topic': function () { return _optimize('.block{vertical-align:sub;vertical-align:middle}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'vertical-align', [[1, 26, undefined]]], ['property-value', 'middle', [[1, 41, undefined]]] ] ]); } }, 'vertical-align - non overriddable': { 'topic': function () { return _optimize('.block{vertical-align:sub;vertical-align:-webkit-funky-align}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'vertical-align', [[1, 7, undefined]]], ['property-value', 'sub', [[1, 22, undefined]]] ], [ 'property', ['property-name', 'vertical-align', [[1, 26, undefined]]], ['property-value', '-webkit-funky-align', [[1, 41, undefined]]] ] ]); } }, 'visibility': { 'topic': function () { return _optimize('.block{visibility:collapse;visibility:visible}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'visibility', [[1, 27, undefined]]], ['property-value', 'visible', [[1, 38, undefined]]] ] ]); } }, 'visibility - non overriddable': { 'topic': function () { return _optimize('.block{visibility:collapse;visibility:var(--visibility)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'visibility', [[1, 7, undefined]]], ['property-value', 'collapse', [[1, 18, undefined]]] ], [ 'property', ['property-name', 'visibility', [[1, 27, undefined]]], ['property-value', 'var(--visibility)', [[1, 38, undefined]]] ] ]); } }, 'white-space': { 'topic': function () { return _optimize('.block{white-space:normal;white-space:nowrap}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'white-space', [[1, 26, undefined]]], ['property-value', 'nowrap', [[1, 38, undefined]]] ] ]); } }, 'white-space - non overriddable': { 'topic': function () { return _optimize('.block{white-space:normal;white-space:var(--white-space)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'white-space', [[1, 7, undefined]]], ['property-value', 'normal', [[1, 19, undefined]]] ], [ 'property', ['property-name', 'white-space', [[1, 26, undefined]]], ['property-value', 'var(--white-space)', [[1, 38, undefined]]] ] ]); } }, 'z-index': { 'topic': function () { return _optimize('.block{z-index:auto;z-index:-1}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'z-index', [[1, 20, undefined]]], ['property-value', '-1', [[1, 28, undefined]]] ] ]); } }, 'z-index - non overriddable': { 'topic': function () { return _optimize('.block{z-index:auto;z-index:"15"}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'z-index', [[1, 7, undefined]]], ['property-value', 'auto', [[1, 15, undefined]]] ], [ 'property', ['property-name', 'z-index', [[1, 20, undefined]]], ['property-value', '"15"', [[1, 28, undefined]]] ] ]); } } }) .addBatch({ 'transition shorthand and longhand': { 'topic': function () { return _optimize('.block{transition:1s ease-in;transition-property:opacity}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 7, undefined]]], ['property-value', 'opacity', [[1, 49, undefined]]], ['property-value', '1s', [[1, 18, undefined]]], ['property-value', 'ease-in', [[1, 21, undefined]]] ] ]); } }, 'transition longhand and shorthand': { 'topic': function () { return _optimize('.block{transition-duration:2s;transition:ease-in}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 30, undefined]]], ['property-value', 'ease-in', [[1, 41, undefined]]], ] ]); } }, 'transition shorthand with overriddable shorthand': { 'topic': function () { return _optimize('.block{transition:opacity 1s;transition:margin 1s ease-in}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 7, undefined]]], ['property-value', 'margin', [[1, 40, undefined]]], ['property-value', '1s', [[1, 47, undefined]]], ['property-value', 'ease-in', [[1, 50, undefined]]] ] ]); } }, 'transition shorthand and multiplex longhand': { 'topic': function () { return _optimize('.block{transition:margin 1s;transition-timing-function:ease-in,ease-out}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 7, undefined]]], ['property-value', 'margin', [[1, 18, undefined]]], ['property-value', '1s', [[1, 25, undefined]]], ['property-value', 'ease-in', [[1, 55, undefined]]], ['property-value', ','], ['property-value', '_'], ['property-value', '1s', [[1, 25, undefined]]], ['property-value', 'ease-out', [[1, 63, undefined]]] ] ]); } }, 'transition multiplex shorthand and longhand': { 'topic': function () { return _optimize('.block{transition:ease-in,ease-out;transition-duration:1s}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 7, undefined]]], ['property-value', '1s', [[1, 55, undefined]]], ['property-value', 'ease-in', [[1, 18, undefined]]], ['property-value', ','], ['property-value', '1s', [[1, 55, undefined]]], ['property-value', 'ease-out', [[1, 26, undefined]]] ] ]); } }, 'transition shorthand and multiplex longhand - too long to merge': { 'topic': function () { return _optimize('.block{transition:2s ease-in 1s;transition-property:margin,opacity,padding}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 7, undefined]]], ['property-value', '2s', [[1, 18, undefined]]], ['property-value', 'ease-in', [[1, 21, undefined]]], ['property-value', '1s', [[1, 29, undefined]]] ], [ 'property', ['property-name', 'transition-property', [[1, 32, undefined]]], ['property-value', 'margin', [[1, 52, undefined]]], ['property-value', ',', [[1, 58, undefined]]], ['property-value', 'opacity', [[1, 59, undefined]]], ['property-value', ',', [[1, 66, undefined]]], ['property-value', 'padding', [[1, 67, undefined]]] ] ]); } }, 'transition shorthand and inherit longhand': { 'topic': function () { return _optimize('.block{transition:1s;transition-timing-function:inherit}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'transition', [[1, 7, undefined]]], ['property-value', '1s', [[1, 18, undefined]]], ], [ 'property', ['property-name', 'transition-timing-function', [[1, 21, undefined]]], ['property-value', 'inherit', [[1, 48, undefined]]] ] ]); } }, 'vendor prefixed transition shorthand and longhand': { 'topic': function () { return _optimize('.block{-webkit-transition:1s;-webkit-transition-timing-function:ease-in}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '-webkit-transition', [[1, 7, undefined]]], ['property-value', '1s', [[1, 26, undefined]]], ['property-value', 'ease-in', [[1, 64, undefined]]] ] ]); } } }) .addBatch({ 'overriding !important by a star hack': { 'topic': function () { return _optimize('a{color:red!important;display:block;*color:#fff}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ] ]); } }, 'overriding !important by an !important star hack': { 'topic': function () { return _optimize('a{color:red!important;display:block;*color:#fff!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ], [ 'property', ['property-name', '*color', [[1, 36, undefined]]], ['property-value', '#fff!important', [[1, 43, undefined]]] ] ]); } }, 'overriding !important by an underscore hack': { 'topic': function () { return _optimize('a{color:red!important;display:block;_color:#fff}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ] ]); } }, 'overriding !important by an !important underscore hack': { 'topic': function () { return _optimize('a{color:red!important;display:block;_color:#fff!important}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ], [ 'property', ['property-name', '_color', [[1, 36, undefined]]], ['property-value', '#fff!important', [[1, 43, undefined]]] ] ]); } }, 'overriding !important by an backslash hack': { 'topic': function () { return _optimize('a{color:red!important;display:block;color:#fff\\0}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red!important', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'display', [[1, 22, undefined]]], ['property-value', 'block', [[1, 30, undefined]]] ] ]); } } }) .addBatch({ 'one unit value': { 'topic': function () { return _optimize('a{width:3px;width:4px}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'width', [[1, 12, undefined]]], ['property-value', '4px', [[1, 18, undefined]]] ] ]); } }, 'incompatible unit values': { 'topic': function () { return _optimize('a{width:4px;width:calc(5rem / 2)}'); }, 'into': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'width', [[1, 2, undefined]]], ['property-value', '4px', [[1, 8, undefined]]] ], [ 'property', ['property-name', 'width', [[1, 12, undefined]]], ['property-value', 'calc(5rem / 2)', [[1, 18, undefined]]] ] ]); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/overrides-non-component-shorthand-test.js 0000664 0000000 0000000 00000005450 14532047255 0032145 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var wrapForOptimizing = require('../../../../lib/optimizer/wrap-for-optimizing').all; var compatibilityFrom = require('../../../../lib/options/compatibility'); var populateComponents = require('../../../../lib/optimizer/level-2/properties/populate-components'); var validator = require('../../../../lib/optimizer/validator'); var overridesNonComponentShorthand = require('../../../../lib/optimizer/level-2/properties/overrides-non-component-shorthand'); vows.describe(overridesNonComponentShorthand) .addBatch({ 'not matching': { 'topic': function () { var left = wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'] ] ])[0]; var right = wrapForOptimizing([ [ 'property', ['property-name', 'padding-top'], ['property-value', '0px'] ] ])[0]; populateComponents([left], validator(compatibilityFrom({})), []); return [right, left]; }, 'is false': function (topic) { assert.isFalse(overridesNonComponentShorthand.apply(null, topic)); } }, 'border-color and border- ': { 'topic': function () { var left = wrapForOptimizing([ [ 'property', ['property-name', 'border-color'], ['property-value', 'red'] ] ])[0]; var right = wrapForOptimizing([ [ 'property', ['property-name', 'border-top'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ])[0]; populateComponents([left], validator(compatibilityFrom({})), []); return [right, left]; }, 'is false': function (topic) { assert.isFalse(overridesNonComponentShorthand.apply(null, topic)); } }, 'border- and border': { 'topic': function () { var left = wrapForOptimizing([ [ 'property', ['property-name', 'border-top'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ])[0]; var right = wrapForOptimizing([ [ 'property', ['property-name', 'border'], ['property-value', '2px'], ['property-value', 'solid'], ['property-value', 'blue'] ] ])[0]; populateComponents([left], validator(compatibilityFrom({})), []); return [right, left]; }, 'is true': function (topic) { assert.isTrue(overridesNonComponentShorthand.apply(null, topic)); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/properties/populate-components-test.js 0000664 0000000 0000000 00000013575 14532047255 0027406 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var wrapForOptimizing = require('../../../../lib/optimizer/wrap-for-optimizing').all; var compatibilityFrom = require('../../../../lib/options/compatibility'); var validator = require('../../../../lib/optimizer/validator'); var populateComponents = require('../../../../lib/optimizer/level-2/properties/populate-components'); vows.describe(populateComponents) .addBatch({ 'shorthand': { 'topic': function () { var wrapped = wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0px'], ['property-value', '1px'], ['property-value', '2px'], ['property-value', '3px'] ] ]); populateComponents(wrapped, validator(compatibilityFrom({})), []); return wrapped; }, 'has one': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'becomes shorthand': function (wrapped) { assert.isTrue(wrapped[0].shorthand); }, 'is dirty': function (wrapped) { assert.isTrue(wrapped[0].dirty); }, 'gets 4 components': function (wrapped) { assert.lengthOf(wrapped[0].components, 4); }, 'gets a margin-top': function (wrapped) { assert.deepEqual(wrapped[0].components[0].name, 'margin-top'); assert.deepEqual(wrapped[0].components[0].value, [['property-value', '0px']]); }, 'gets a margin-right': function (wrapped) { assert.deepEqual(wrapped[0].components[1].name, 'margin-right'); assert.deepEqual(wrapped[0].components[1].value, [['property-value', '1px']]); }, 'gets a margin-bottom': function (wrapped) { assert.deepEqual(wrapped[0].components[2].name, 'margin-bottom'); assert.deepEqual(wrapped[0].components[2].value, [['property-value', '2px']]); }, 'gets a margin-left': function (wrapped) { assert.deepEqual(wrapped[0].components[3].name, 'margin-left'); assert.deepEqual(wrapped[0].components[3].value, [['property-value', '3px']]); } }, 'shorthand with shorthand components': { 'topic': function () { var wrapped = wrapForOptimizing([ [ 'property', ['property-name', 'border'], ['property-value', '1px'], ['property-value', 'solid'], ['property-value', 'red'] ] ]); populateComponents(wrapped, validator(compatibilityFrom({})), []); return wrapped; }, 'has one': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'becomes shorthand': function (wrapped) { assert.isTrue(wrapped[0].shorthand); }, 'is dirty': function (wrapped) { assert.isTrue(wrapped[0].dirty); }, 'gets 3 components': function (wrapped) { assert.lengthOf(wrapped[0].components, 3); }, 'gets a border-width with subcomponents': function (wrapped) { assert.deepEqual(wrapped[0].components[0].name, 'border-width'); assert.deepEqual(wrapped[0].components[0].value, [ ['property-value', '1px'], ['property-value', '1px'], ['property-value', '1px'], ['property-value', '1px'] ]); assert.lengthOf(wrapped[0].components[0].components, 4); assert.deepEqual(wrapped[0].components[0].components.map(function (c) { return c.name; }), [ 'border-top-width', 'border-right-width', 'border-bottom-width', 'border-left-width' ]); }, 'gets a border-style': function (wrapped) { assert.deepEqual(wrapped[0].components[1].name, 'border-style'); assert.deepEqual(wrapped[0].components[1].value, [ ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'], ['property-value', 'solid'] ]); assert.lengthOf(wrapped[0].components[1].components, 4); assert.deepEqual(wrapped[0].components[1].components.map(function (c) { return c.name; }), [ 'border-top-style', 'border-right-style', 'border-bottom-style', 'border-left-style' ]); }, 'gets a border-color': function (wrapped) { assert.deepEqual(wrapped[0].components[2].name, 'border-color'); assert.deepEqual(wrapped[0].components[2].value, [ ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'], ['property-value', 'red'] ]); assert.lengthOf(wrapped[0].components[2].components, 4); assert.deepEqual(wrapped[0].components[2].components.map(function (c) { return c.name; }), [ 'border-top-color', 'border-right-color', 'border-bottom-color', 'border-left-color' ]); } }, 'longhand': { 'topic': function () { var wrapped = wrapForOptimizing([ [ 'property', ['property-name', 'margin-top'], ['property-value', '0px'] ] ]); populateComponents(wrapped, validator(compatibilityFrom({})), []); return wrapped; }, 'has one': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'gets no components': function (wrapped) { assert.isEmpty(wrapped[0].components); } }, 'no value': { 'topic': function () { var wrapped = wrapForOptimizing([ [ 'property', ['property-name', 'margin'] ] ]); populateComponents(wrapped, validator(compatibilityFrom({})), []); return wrapped; }, 'has one': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'is unused': function (wrapped) { assert.isTrue(wrapped[0].unused); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/reduce-non-adjacent-test.js 0000664 0000000 0000000 00000017476 14532047255 0025010 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('remove duplicates') .addBatch( optimizerContext('level 2 on', { 'single selectors': [ '.block-1{color:red;display:block}.block-2{margin:13px}.block-1{color:#fff;margin:2px}', '.block-2{margin:13px}.block-1{display:block;color:#fff;margin:2px}' ], 'multiple selectors': [ 'a{padding:10px;margin:0;color:red}.one{color:red}a,p{color:red;padding:0}', 'a{margin:0}.one{color:red}a,p{color:red;padding:0}' ], 'with one redefined property': [ '.block-1{color:red;display:block}.block-2{color:red}.block-1{color:#fff;margin:2px}', '.block-2{color:red}.block-1{display:block;color:#fff;margin:2px}' ], 'with intentionally redefined properties on joins': [ '.block-1{display:inline-block;display:-moz-inline-box;color:red}.block-2{margin:13px}.block-1{color:#fff;margin:2px}', '.block-2{margin:13px}.block-1{display:inline-block;display:-moz-inline-box;color:#fff;margin:2px}' ], 'with intentionally redefined properties on multiple joins': [ '.block-1{color:red}.block-2{font-size:13px}.block-1{color:#fff;margin:2px}.block-3{margin:10px}.block-1{margin:0}', '.block-2{font-size:13px}.block-3{margin:10px}.block-1{color:#fff;margin:0}' ], 'with all redefined properties': [ 'a{color:red;display:block}.one{font-size:13px}a{color:#fff;display:inline-block;margin:2px}', '.one{font-size:13px}a{color:#fff;display:inline-block;margin:2px}' ], 'many with all redefined properties': [ '.block-1{padding:10px}.block-2{color:transparent}.block-1{color:red;display:block}.block-3{font-size:13px}.block-1{color:#fff;display:inline-block;margin:2px}', '.block-2{color:transparent}.block-3{font-size:13px}.block-1{padding:10px;color:#fff;display:inline-block;margin:2px}' ], 'when overriden by an empty selector': [ 'a{padding:10px}.one{color:red}a{}', 'a{padding:10px}.one{color:red}' ], 'when overriden by a complex selectors': [ 'a{padding:10px;margin:0;color:red}.one{color:red}a,p{color:red;padding:0}.one,a{color:#fff}', 'a{margin:0}a,p{color:red;padding:0}.one,a{color:#fff}' ], 'when complex selector overriden by simple selectors': [ 'a,p{margin:0;color:red}a{color:#fff}', 'a,p{margin:0;color:red}a{color:#fff}' ], 'when complex selector overriden by complex and simple selectors': [ 'a,p{margin:0;color:red}a{color:#fff}a,p{color:#00f}p{color:#0f0}', 'a,p{margin:0;color:#00f}p{color:#0f0}' ], 'when complex selector overriden by complex selectors': [ '.one>.two,.three{color:red;line-height:1rem}#zero,.one>.two,.three,.www{color:#fff;margin:0}a{color:red}.one>.two,.three{line-height:2rem;font-size:1.5rem}', '#zero,.one>.two,.three,.www{color:#fff;margin:0}a{color:red}.one>.two,.three{line-height:2rem;font-size:1.5rem}' ], 'when undefined is used as a value': [ '.block-1{text-shadow:undefined}.block-2{font-size:14px}.block-1{font-size:13px}', '.block-2{font-size:14px}.block-1{text-shadow:undefined;font-size:13px}' ], 'when undefined is used as a value with reduction': [ '.one{text-shadow:undefined}p{color:red}.one{font-size:13px;text-shadow:none}', 'p{color:red}.one{font-size:13px;text-shadow:none}' ], 'when overriden with a browser specific selector': [ 'a{color:red}p{display:block}::-moz-selection,a{color:#fff}', 'a{color:red}p{display:block}::-moz-selection,a{color:#fff}' ], 'when same browser specific selector more than once': [ 'a,::-moz-selection{color:red}p{display:block}a,::-moz-selection{color:#fff}', 'p{display:block}::-moz-selection,a{color:#fff}' ], 'with full property comparison': [ '.one{height:7rem}.two{color:#fff}.one{line-height:7rem;color:red}', '.two{color:#fff}.one{height:7rem;line-height:7rem;color:red}' ], 'with two intermediate, non-overriding selectors': [ '.one{color:red;margin:0}.two{color:#fff}.one{font-size:13px}', '.one{color:red;margin:0;font-size:13px}.two{color:#fff}' ], 'with two intermediate, overriding more specific selectors': [ '.one{color:red;margin:0}.two{font:13px serif}.one{font-size:13px}', '.two{font:13px serif}.one{color:red;margin:0;font-size:13px}' ], 'with granular selectors from the same shorthand': [ '.one{color:red;margin:0}.two{font-weight:700}.one{font-size:13px}', '.one{color:red;margin:0;font-size:13px}.two{font-weight:700}' ], 'with three intermediate, non-overriding selectors': [ '.one{color:red;margin:0}.two{color:#fff}.one{font-size:13px}.three{color:#000}.one{padding:0}', '.one{color:red;margin:0;font-size:13px;padding:0}.two{color:#fff}.three{color:#000}' ], 'successive selectors': [ 'footer,header{top:1.25em;bottom:1.25em}header{top:2.5em}footer{bottom:2.5em}', 'footer,header{top:1.25em;bottom:1.25em}header{top:2.5em}footer{bottom:2.5em}' ], 'over a @media block': [ '.one{color:red;margin:0}@media{.two{font-weight:700}}.one{font-size:13px}', '.one{color:red;margin:0;font-size:13px}@media{.two{font-weight:700}}' ], '!important values': [ '.one,.two{margin:0!important}.one{margin:1px!important}', '.one,.two{margin:0!important}.one{margin:1px!important}' ], 'multiple backgrounds': [ '.two{background-color:#000}.one,.two{background-color:#fff;background-image:url(x),-moz-linear-gradient(top,#aaa,#aaa);background-image:url(x),linear-gradient(to bottom,#aaa,#aaa)}.two{background-image:url(x),-moz-linear-gradient(top,#bbb,#bbb);background-image:url(x),linear-gradient(to bottom,#bbb,#bbb)}.one,.two{display:block}', '.one,.two{background-color:#fff;background-image:url(x),-moz-linear-gradient(top,#aaa,#aaa);background-image:url(x),linear-gradient(to bottom,#aaa,#aaa);display:block}.two{background-image:url(x),-moz-linear-gradient(top,#bbb,#bbb);background-image:url(x),linear-gradient(to bottom,#bbb,#bbb)}' ], 'border-top shorthand': [ '.block1{border-top-width:3px;border-top-style:solid}.block1,.block2{border-top:3px solid red}', '.block1,.block2{border-top:3px solid red}' ], 'non-reducible incomplete border shorthand': [ '.block1{border:3px solid}.block1,.block2{border-color:red}', '.block1{border:3px solid}.block1,.block2{border-color:red}' ] }, { level: 2 }) ) .addBatch( optimizerContext('level 2 on and restructuring on', { 'multiple selectors': [ 'a{padding:10px;margin:0;color:red}.one{color:red}a,p{color:red;padding:0}', '.one,a,p{color:red}a{margin:0}a,p{padding:0}' ], 'when overriden by a complex selectors': [ 'a{padding:10px;margin:0;color:red}.one{color:red}a,p{color:red;padding:0}.one,a{color:#fff}', 'a{margin:0}a,p{color:red;padding:0}.one,a{color:#fff}' ] }, { level: { 2: { restructureRules: true } } }) ) .addBatch( optimizerContext('level 2 off but reduceNonAdjacentRules and merging on', { 'non-adjacent with multi selectors': [ 'a{padding:10px;margin:0;color:red}.one{color:red}a,p{color:red;padding:0}', 'a{margin:0}.one{color:red}a,p{color:red;padding:0}' ] }, { level: { 2: { all: false, reduceNonAdjacentRules: true, mergeIntoShorthands: true, overrideProperties: true } } }) ) .addBatch( optimizerContext('level 2 off', { 'non-adjacent': [ 'a{color:red;display:block}.one{font-size:13px}a{color:#fff;margin:2px}', 'a{color:red;display:block}.one{font-size:13px}a{color:#fff;margin:2px}' ] }, { level: 1 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/remove-duplicate-font-at-rules-test.js 0000664 0000000 0000000 00000003373 14532047255 0027134 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('remove duplicate @font-face at-rules') .addBatch( optimizerContext('level 2 on', { 'adjacent': [ '@font-face{font-family:test;src:url(fonts/test.woff2)}@font-face{font-family:test;src:url(fonts/test.woff2)}', '@font-face{font-family:test;src:url(fonts/test.woff2)}' ], 'non-adjacent': [ '@font-face{font-family:test;src:url(fonts/test.woff2)}.one{color:red}@font-face{font-family:test;src:url(fonts/test.woff2)}', '@font-face{font-family:test;src:url(fonts/test.woff2)}.one{color:red}' ], 'non-mergeable': [ '@font-face{font-family:test;src:url(fonts/test.woff2)}.one{color:#000}@font-face{font-family:test2;src:url(fonts/test.woff2)}', '@font-face{font-family:test;src:url(fonts/test.woff2)}.one{color:#000}@font-face{font-family:test2;src:url(fonts/test.woff2)}' ] }, { level: 2 }) ) .addBatch( optimizerContext('level 2 off but removeDuplicateFontRules on', { 'non-adjacent': [ '@font-face{font-family:test;src:url(fonts/test.woff2)}.one{color:red}@font-face{font-family:test;src:url(fonts/test.woff2)}', '@font-face{font-family:test;src:url(fonts/test.woff2)}.one{color:red}@font-face{}' ] }, { level: { 2: { all: false, removeDuplicateFontRules: true } } }) ) .addBatch( optimizerContext('level 2 off', { 'keeps content same': [ '@font-face{font-family:test;src:url(fonts/test.woff2)}@font-face{font-family:test;src:url(fonts/test.woff2)}', '@font-face{font-family:test;src:url(fonts/test.woff2)}@font-face{font-family:test;src:url(fonts/test.woff2)}' ] }, { level: 1 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/remove-duplicate-media-queries-test.js 0000664 0000000 0000000 00000003621 14532047255 0027162 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('remove duplicate media queries') .addBatch( optimizerContext('level 2 on', { 'adjacent': [ '@media screen{a{color:red}}@media screen{a{color:red}}', '@media screen{a{color:red}}' ], 'non-adjacent': [ '@media screen{a{color:red}}@media print{a{color:#fff}}@media screen{a{color:red}}', '@media print{a{color:#fff}}@media screen{a{color:red}}' ], 'single non-mergeable': [ '@media screen{a{color:red}}.one{color:#000}@media screen{a{color:red}}', '.one{color:#000}@media screen{a{color:red}}' ], 'many non-mergeable': [ '@media print{a{color:#fff}}@media screen{a{color:red}}.one{color:#000}@media screen{a{color:red}}@media print{a{display:block}}@media print{a{color:#fff}}', '.one{color:#000}@media screen{a{color:red}}@media print{a{display:block;color:#fff}}' ] }, { level: 2 }) ) .addBatch( optimizerContext('level 2 off but removeDuplicateMediaBlocks on', { 'non-adjacent': [ '@media screen{a{color:red}}@media print{a{color:#fff}}@media screen{a{color:red}}', '@media screen{}@media print{a{color:#fff}}@media screen{a{color:red}}' ] }, { level: { 2: { all: false, removeDuplicateMediaBlocks: true } } }) ) .addBatch( optimizerContext('level 2 off', { 'keeps content same': [ '@media screen{a{color:red}}@media screen{a{color:red}}', '@media screen{a{color:red}}@media screen{a{color:red}}' ] }, { level: 1 }) ) .addBatch( optimizerContext('media merging off', { 'keeps content same': [ '@media screen{a{color:red}}@media screen{div{color:red}}', '@media screen{a{color:red}}@media screen{div{color:red}}' ] }, { level: { 2: { mergeMedia: false } } }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/remove-duplicates-test.js 0000664 0000000 0000000 00000004435 14532047255 0024621 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('remove duplicates') .addBatch( optimizerContext('level 2 on', { 'same context': [ 'a{color:red}div{color:blue}a{color:red}', 'div{color:#00f}a{color:red}' ], 'different contexts': [ 'a{color:red}div{color:blue}@media screen{a{color:red}}', 'a{color:red}div{color:#00f}@media screen{a{color:red}}' ], 'of two successive selectors': [ 'a{color:red}a{color:red}', 'a{color:red}' ], 'of two successive selectors with different body': [ 'a{color:red}a{display:block}', 'a{color:red;display:block}' ], 'of many successive selectors': [ 'a{color:red}a{color:red}a{color:red}a{color:red}', 'a{color:red}' ], 'of two non-successive selectors': [ 'a{color:red}p{color:#fff}a{color:red}', 'p{color:#fff}a{color:red}' ], 'of many non-successive selectors': [ 'div{width:100%}a{color:red}a{color:red}p{color:#fff}div{width:100%}ol{margin:0}p{color:#fff}', 'a{color:red}div{width:100%}ol{margin:0}p{color:#fff}' ], 'with global and media scope': [ 'a{color:red}@media screen{a{color:red}p{width:75px}a{color:red}}', 'a{color:red}@media screen{p{width:75px}a{color:red}}' ], 'with two media scopes': [ '@media (min-width:75px){a{color:red}}@media screen{a{color:red}p{width:75px}a{color:red}}', '@media (min-width:75px){a{color:red}}@media screen{p{width:75px}a{color:red}}' ] }, { level: 2 }) ) .addBatch( optimizerContext('level 2 off but removing duplicates on', { 'same context': [ 'a{color:red}div{color:blue}a{color:red}', 'a{}div{color:#00f}a{color:red}' ] }, { level: { 2: { all: false, removeDuplicateRules: true } } }) ) .addBatch( optimizerContext('level 2 off', { 'same context': [ 'a{color:red}div{color:blue}a{color:red}', 'a{color:red}div{color:#00f}a{color:red}' ], 'different contexts': [ 'a{color:red}div{color:blue}@media screen{a{color:red}}', 'a{color:red}div{color:#00f}@media screen{a{color:red}}' ], }, { level: 1 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/remove-unused-at-rules-test.js 0000664 0000000 0000000 00000021414 14532047255 0025515 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('remove unused at rules') .addBatch( optimizerContext('@counter-style', { 'one unused declaration': [ '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}', '' ], 'one used declaration in list-style': [ '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style:test}', '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style:test}' ], 'one used declaration in list-style-type': [ '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style-type:test}', '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style-type:test}' ], 'one used declaration in nested list-style-type': [ '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}@media screen{.block{list-style-type:test}}', '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}@media screen{.block{list-style-type:test}}' ], 'one used declaration and one unused': [ '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}@counter-style test2{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style-type:test}', '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style-type:test}' ], 'one used declaration with !important': [ '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style:test!important}', '@counter-style test{system:fixed;symbols:url(one.png) url(two.png);suffix:" "}.block{list-style:test!important}' ] }, { level: { 2: { removeUnusedAtRules: true } } }) ) .addBatch( optimizerContext('@font-face', { 'one unused declaration': [ '@font-face{font-family:test}', '' ], 'one used declaration in font-family': [ '@font-face{font-family:test}.block{font-family:test}', '@font-face{font-family:test}.block{font-family:test}' ], 'one used quoted declaration in font-family': [ '@font-face{font-family:"test test"}.block{font-family:"test test"}', '@font-face{font-family:"test test"}.block{font-family:"test test"}' ], 'one used declaration in font-family with different case': [ '@font-face{font-family:test}.block{font-family:Test}', '@font-face{font-family:test}.block{font-family:Test}' ], 'one used quoted declaration in font-family with different quotes': [ '@font-face{font-family:"test test"}.block{font-family:\'test test\'}', '@font-face{font-family:"test test"}.block{font-family:\'test test\'}' ], 'one used declaration in multi-valued font-family': [ '@font-face{font-family:test}.block{font-family:Arial,test,sans-serif}', '@font-face{font-family:test}.block{font-family:Arial,test,sans-serif}' ], 'one used declaration in font': [ '@font-face{font-family:test}.block{font:16px test}', '@font-face{font-family:test}.block{font:16px test}' ], 'one used declaration in multi-valued font': [ '@font-face{font-family:test}.block{font:16px Arial,test,sans-serif}', '@font-face{font-family:test}.block{font:16px Arial,test,sans-serif}' ], 'one used declaration in nested font': [ '@font-face{font-family:test}@media screen{.block{font:16px test}}', '@font-face{font-family:test}@media screen{.block{font:16px test}}' ], 'one used declaration in multi-valued font with different case': [ '@font-face{font-family:test}.block{font:16px Arial,Test,sans-serif}', '@font-face{font-family:test}.block{font:16px Arial,Test,sans-serif}' ], 'one used declaration and one unused': [ '@font-face{font-family:test}@font-face{font-family:test2}.block{font:16px test}', '@font-face{font-family:test}.block{font:16px test}' ], 'one used with !important': [ '@font-face{font-family:test}.block{font:16px test!important}', '@font-face{font-family:test}.block{font:16px test!important}' ], 'one used as font-family with !important': [ '@font-face{font-family:test}.block{font-family:test!important}', '@font-face{font-family:test}.block{font-family:test!important}' ], 'one used declaration in another @font-face': [ '@font-face{font-family:test;font-weight:normal}@font-face{font-family:test;font-weight:bold}', '' ] }, { level: { 2: { removeUnusedAtRules: true } } }) ) .addBatch( optimizerContext('@keyframes', { 'one unused declaration': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}', '' ], 'one used declaration in animation-name': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation-name:test}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation-name:test}' ], 'one used declaration in multi-value animation-name': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation-name:custom,test}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation-name:custom,test}' ], 'one used declaration in animation': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in test}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in test}' ], 'one used declaration in multi-value animation': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in custom,2s ease-out test}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in custom,2s ease-out test}' ], 'one used declaration in vendor prefixed animation': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{-moz-animation:1s ease-in test}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{-moz-animation:1s ease-in test}' ], 'one used vendor prefixed declaration in animation': [ '@-webkit-keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in test}', '@-webkit-keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in test}' ], 'one used in nested animation': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}@media screen{.block{animation:1s ease-in test}}', '@keyframes test{0%{opacity:0}100%{opacity:1}}@media screen{.block{animation:1s ease-in test}}' ], 'one used declaration and one unused': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}@keyframes test2{0%{opacity:0}100%{opacity:1}}.block{animation-name:test}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation-name:test}' ], 'one used with !important': [ '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in test!important}', '@keyframes test{0%{opacity:0}100%{opacity:1}}.block{animation:1s ease-in test!important}' ] }, { level: { 2: { removeUnusedAtRules: true } } }) ) .addBatch( optimizerContext('@namespace', { 'one unused declaration': [ '@namespace svg url(http://www.w3.org/2000/svg);', '' ], 'one used declaration in scope': [ '@namespace svg url(http://www.w3.org/2000/svg);svg|.block{color:red}', '@namespace svg url(http://www.w3.org/2000/svg);svg|.block{color:red}' ], 'one used declaration in attribute': [ '@namespace svg url(http://www.w3.org/2000/svg);.block[svg|title=test]{color:red}', '@namespace svg url(http://www.w3.org/2000/svg);.block[svg|title=test]{color:red}' ], 'one used declaration in nested attribute': [ '@namespace svg url(http://www.w3.org/2000/svg);@media screen{.block[svg|title=test]{color:red}}', '@namespace svg url(http://www.w3.org/2000/svg);@media screen{.block[svg|title=test]{color:red}}' ], 'many declaration in one rule': [ '@namespace svg url(http://www.w3.org/2000/svg);@namespace xlink url(http://www.w3.org/2000/xlink);.block[svg|title=test],xlink|.block{color:red}', '@namespace svg url(http://www.w3.org/2000/svg);@namespace xlink url(http://www.w3.org/2000/xlink);.block[svg|title=test],xlink|.block{color:red}' ], 'one used declaration and one unused': [ '@namespace svg url(http://www.w3.org/2000/svg);@namespace xlink url(http://www.w3.org/2000/xlink);svg|.block{color:red}', '@namespace svg url(http://www.w3.org/2000/svg);svg|.block{color:red}' ] }, { level: { 2: { removeUnusedAtRules: true } } }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/reorderable-test.js 0000664 0000000 0000000 00000037371 14532047255 0023464 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var canReorder = require('../../../lib/optimizer/level-2/reorderable').canReorder; var extractProperties = require('../../../lib/optimizer/level-2/extract-properties'); var canReorderSingle = require('../../../lib/optimizer/level-2/reorderable').canReorderSingle; var tokenize = require('../../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../../lib/reader/input-source-map-tracker'); function propertiesIn(source) { return extractProperties( tokenize( source, { inputSourceMapTracker: inputSourceMapTracker(), options: {} } )[0] ); } vows.describe(canReorder) .addBatch({ 'empty': { 'topic': function () { return canReorder(propertiesIn('a{}'), propertiesIn('a{}'), {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'left empty': { 'topic': function () { return canReorder(propertiesIn('a{}'), propertiesIn('a{color:red}'), {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'right empty': { 'topic': function () { return canReorder(propertiesIn('a{color:red}'), propertiesIn('a{}'), {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'all reorderable': { 'topic': function () { return canReorder(propertiesIn('a{color:red;width:100%}'), propertiesIn('a{display:block;height:20px}'), {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'one not reorderable on the left': { 'topic': function () { return canReorder(propertiesIn('a{color:red;width:100%;display:inline}'), propertiesIn('a{display:block;height:20px}'), {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'one not reorderable on the right': { 'topic': function () { return canReorder(propertiesIn('a{color:red;width:100%}'), propertiesIn('a{display:block;height:20px;width:20px}'), {}); }, 'must be false': function (result) { assert.isFalse(result); } } }) .export(module); vows.describe(canReorderSingle) .addBatch({ 'different properties': { 'topic': function () { return canReorderSingle(propertiesIn('a{color:red}')[0], propertiesIn('a{display:block}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'font and line-height': { 'topic': function () { return canReorderSingle(propertiesIn('a{font:10px}')[0], propertiesIn('a{line-height:12px}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'same properties with same value': { 'topic': function () { return canReorderSingle(propertiesIn('a{color:red}')[0], propertiesIn('a{color:red}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'same properties with same value and different case': { 'topic': function () { return canReorderSingle(propertiesIn('a{COLOR:red}')[0], propertiesIn('a{color:red}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'same properties with different value': { 'topic': function () { return canReorderSingle(propertiesIn('a{color:red}')[0], propertiesIn('a{color:blue}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'same properties with different value and different case': { 'topic': function () { return canReorderSingle(propertiesIn('a{color:red}')[0], propertiesIn('a{COLOR:blue}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root': { 'topic': function () { return canReorderSingle(propertiesIn('a{text-shadow:none}')[0], propertiesIn('a{text-decoration:underline}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different properties with same root when shorthand does not reset': { 'topic': function () { return canReorderSingle(propertiesIn('a{border:none}')[0], propertiesIn('a{border-spacing:1px}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different properties with same root - border #1': { 'topic': function () { return canReorderSingle(propertiesIn('a{border:none}')[0], propertiesIn('a{border-top-color:red}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root - border #2': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-top:1px solid red}')[0], propertiesIn('a{border-bottom:1px solid blue}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different properties with same root - border #3': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-top-color:red}')[0], propertiesIn('a{border-bottom:1px solid blue}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different properties with same root - border #4': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-bottom:none}')[0], propertiesIn('a{border-bottom:1px solid blue}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root - border #5': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-bottom:none}')[0], propertiesIn('a{border-bottom:none}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different properties with same root - border #6': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-radius:3px}')[0], propertiesIn('a{border:0}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root - border #7': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-radius:3px}')[0], propertiesIn('a{border-style:solid}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different properties with same root - border #8': { 'topic': function () { return canReorderSingle(propertiesIn('a{border:1px solid red}')[0], propertiesIn('a{border-right-style:dotted}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root - border #9': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-color:red}')[0], propertiesIn('a{border-right:1px dotted}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root - border #10': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-color:red}')[0], propertiesIn('a{border-bottom-color:rgba(0,0,0,0.5)}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different properties with same root - border #11': { 'topic': function () { return canReorderSingle(propertiesIn('a{border-color:red}')[0], propertiesIn('a{border-bottom-color:red}')[0], {}); }, 'must be false': function (result) { assert.isTrue(result); } }, 'shorhand and longhand with different value': { 'topic': function () { return canReorderSingle(propertiesIn('a{margin:3px}')[0], propertiesIn('a{margin-bottom:5px}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'shorhand and longhand with same value': { 'topic': function () { return canReorderSingle(propertiesIn('a{margin:3px}')[0], propertiesIn('a{margin-bottom:3px}')[0], {}); }, 'must be false': function (result) { assert.isTrue(result); } }, 'two longhand with different value sharing same shorthand': { 'topic': function () { return canReorderSingle(propertiesIn('a{margin-top:3px solid red}')[0], propertiesIn('a{margin-bottom:3px solid white}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'two longhand with different value when sharing same shorthand and one is vendored': { 'topic': function () { return canReorderSingle(propertiesIn('a{background-image:linear-gradient()}')[0], propertiesIn('a{-webkit-background-size:20px}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different, non-overlapping simple selectors': { 'topic': function () { return canReorderSingle(propertiesIn('a{border:none}')[0], propertiesIn('div{border:1px solid #f00}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different, non-overlapping simple selectors with inheritable property': { 'topic': function () { return canReorderSingle(propertiesIn('a{font:inherit}')[0], propertiesIn('div{font-family:Helvetica}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different, non-overlapping complex selectors': { 'topic': function () { return canReorderSingle(propertiesIn('.one{border:none}')[0], propertiesIn('div{border:1px solid #f00}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'different, non-overlapping complex selectors with same specificity': { 'topic': function () { return canReorderSingle(propertiesIn('.one{border:none}')[0], propertiesIn('.two{border:1px solid #f00}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'different, overlapping simple selectors': { 'topic': function () { return canReorderSingle(propertiesIn('a{border:none}')[0], propertiesIn('a{border:1px solid #f00}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'align-items': { 'topic': function () { return canReorderSingle(propertiesIn('a{border:none}')[0], propertiesIn('a{align-items:flex-start}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'same but one vendor prefixed': { 'topic': function () { return canReorderSingle(propertiesIn('a{-moz-box-sizing:content-box}')[0], propertiesIn('a{box-sizing:content-box}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'same and both vendor prefixed': { 'topic': function () { return canReorderSingle(propertiesIn('a{-moz-box-sizing:content-box}')[0], propertiesIn('a{-moz-box-sizing:content-box}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'same but value with different vendor prefixes': { 'topic': function () { return canReorderSingle(propertiesIn('a{background:-webkit-linear-gradient()}')[0], propertiesIn('a{background:-o-linear-gradient()}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'same but left vendor prefixed': { 'topic': function () { return canReorderSingle(propertiesIn('a{background:-webkit-linear-gradient()}')[0], propertiesIn('a{background:linear-gradient()}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'same but right vendor prefixed': { 'topic': function () { return canReorderSingle(propertiesIn('a{background:linear-gradient()}')[0], propertiesIn('a{background:-webkit-linear-gradient()}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'specificity - same #1': { 'topic': function () { return canReorderSingle(propertiesIn('a{background:red}')[0], propertiesIn('a{background-color:blue}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'specificity - same #2': { 'topic': function () { return canReorderSingle(propertiesIn('div a{background:red}')[0], propertiesIn('body > a{background-color:blue}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'specificity - different #1': { 'topic': function () { return canReorderSingle(propertiesIn('.block{background:red}')[0], propertiesIn('a{background-color:blue}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'specificity - different #2': { 'topic': function () { return canReorderSingle(propertiesIn('.block{background:red}')[0], propertiesIn('#id{background-color:blue}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'specificity - different #3': { 'topic': function () { return canReorderSingle(propertiesIn('.block{background:red}')[0], propertiesIn('#id{background-color:blue}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'specificity - different #4': { 'topic': function () { return canReorderSingle(propertiesIn('#id div.block-1{background:red}')[0], propertiesIn('#id > div.block-1.block-2{background-color:blue}')[0], {}); }, 'must be true': function (result) { assert.isTrue(result); } }, 'specificity - complex #1': { 'topic': function () { return canReorderSingle(propertiesIn('div,.block{background:red}')[0], propertiesIn('.block,#id{background-color:blue}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } } }) .addBatch({ 'flex #1': { 'topic': function () { return canReorderSingle(propertiesIn('a{-webkit-box-align:flex-start}')[0], propertiesIn('a{align-items:flex-start}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'flex #2': { 'topic': function () { return canReorderSingle(propertiesIn('a{-ms-flex-align:start}')[0], propertiesIn('a{align-items:flex-start}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'flex #3': { 'topic': function () { return canReorderSingle(propertiesIn('a{flex:none}')[0], propertiesIn('a{align-items:flex-start}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'flex #4': { 'topic': function () { return canReorderSingle(propertiesIn('a{justify-content:center}')[0], propertiesIn('a{–ms-flex-pack:center}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } }, 'flex #5': { 'topic': function () { return canReorderSingle(propertiesIn('a{justify-content:center}')[0], propertiesIn('a{–webkit-box-pack:center}')[0], {}); }, 'must be false': function (result) { assert.isFalse(result); } } }) .export(module); clean-css-5.3.3/test/optimizer/level-2/restructure-test.js 0000664 0000000 0000000 00000031635 14532047255 0023562 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var optimizerContext = require('../../test-helper').optimizerContext; vows.describe('restructure') .addBatch( optimizerContext('level 2 on', { 'up until changed #1': [ 'a{color:#000}div{color:red}.one{display:block}.two{display:inline;color:red}', 'a{color:#000}.two,div{color:red}.one{display:block}.two{display:inline}' ], 'up until changed #2': [ 'p{margin:0;font:inherit}h1{font-family:Helvetica;margin:20px}section h1{font-family:Helvetica;margin:40px}', 'p{margin:0;font:inherit}h1,section h1{font-family:Helvetica}h1{margin:20px}section h1{margin:40px}' ], 'up until top': [ 'a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'up until top with charset': [ '@charset "utf-8";a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '@charset "utf-8";.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'two at once': [ '.one,.two,.three{color:red;display:block}div{margin:0}.four,.five,.six{color:red;display:block}', '.five,.four,.one,.six,.three,.two{color:red;display:block}div{margin:0}' ], 'down until changed': [ '.one{padding:0}.two{margin:0}.one{margin-bottom:3px}', '.two{margin:0}.one{padding:0;margin-bottom:3px}' ], 'over shorthands': [ 'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}', '.two,div{margin-top:0}.one{margin:0}.two{display:block}' ], 'over shorthands with flush': [ 'div{margin-top:0}.one{margin:5px}.two{display:block;margin-top:0}.three{color:red}.four{margin-top:0}', 'div{margin-top:0}.one{margin:5px}.four,.two{margin-top:0}.two{display:block}.three{color:red}' ], 'over shorthand - border': [ '.one{border-color:red}.two{border:1px solid}.three{color:#fff;border-color:red}', '.one{border-color:red}.two{border:1px solid}.three{color:#fff;border-color:red}' ], 'granuar over granular': [ 'div{margin-top:0}.one{margin-bottom:2px}.two{display:block;margin-top:0}', '.two,div{margin-top:0}.one{margin-bottom:2px}.two{display:block}' ], 'shorthand over granular with different value': [ 'div{margin:0}.one{margin-bottom:1px}.two{display:block;margin:0}', 'div{margin:0}.one{margin-bottom:1px}.two{display:block;margin:0}' ], 'shorthand over granular with different value for simple tags': [ 'div{margin:0}body{margin-bottom:1px}p{display:block;margin:0}', 'div,p{margin:0}body{margin-bottom:1px}p{display:block}' ], 'shorthand over granular with different value for simple tags when tag match': [ 'div{margin:0}body,p{margin-bottom:1px}p{display:block;margin:0}', 'div{margin:0}body,p{margin-bottom:1px}p{display:block;margin:0}' ], 'shorthand over granular with same value': [ 'div{margin:0}.one{margin-bottom:0}.two{display:block;margin:0}', '.two,div{margin:0}.one{margin-bottom:0}.two{display:block}' ], 'dropping longer content at a right place': [ '.one,a:hover{color:red}a:hover{color:#000;display:block;border-color:#000}.longer-name{color:#000;border-color:#000}', '.one,a:hover{color:red}.longer-name,a:hover{color:#000;border-color:#000}a:hover{display:block}' ], 'over media without overriding': [ 'div{margin:0}@media{.one{color:red}}.two{display:block;margin:0}', '.two,div{margin:0}@media{.one{color:red}}.two{display:block}' ], 'over media with overriding by different value': [ 'div{margin:0}@media{.one{margin:10px}}.two{display:block;margin:0}', 'div{margin:0}@media{.one{margin:10px}}.two{display:block;margin:0}' ], 'over media with overriding by same value': [ 'div{margin:0}@media{.one{margin:0}}.two{display:block;margin:0}', '.two,div{margin:0}@media{.one{margin:0}}.two{display:block}' ], 'over media with overriding by a granular': [ 'div{margin:0}@media{.one{margin-bottom:0}}.two{display:block;margin:0}', '.two,div{margin:0}@media{.one{margin-bottom:0}}.two{display:block}' ], 'over media with overriding by a different granular': [ 'div{margin-top:0}@media{.one{margin-bottom:0}}.two{display:block;margin-top:0}', '.two,div{margin-top:0}@media{.one{margin-bottom:0}}.two{display:block}' ], 'over media with a new property': [ 'div{margin-top:0}@media{.one{margin-top:0}}.two{display:block;margin:0}', 'div{margin-top:0}@media{.one{margin-top:0}}.two{display:block;margin:0}' ], 'over a property in the same selector': [ 'div{background-size:100%}a{background:no-repeat;background-size:100%}', 'div{background-size:100%}a{background:0 0/100% no-repeat}' ], 'multiple granular up to a shorthand': [ '.one{border:1px solid #bbb}.two{border-color:#666}.three{border-width:1px;border-style:solid}', '.one{border:1px solid #bbb}.two{border-color:#666}.three{border-width:1px;border-style:solid}' ], 'multiple granular - complex case': [ '.one{background:red;padding:8px 24px}.two{padding-left:24px;padding-right:24px}.three{padding-top:20px}.four{border-left:1px solid #000;border-right:1px solid #000;border-bottom:1px solid #000}.five{background-color:#fff;background-image:-moz-linear-gradient();background-image:-ms-linear-gradient();background-image:-webkit-gradient();background-image:-webkit-linear-gradient()}', '.one{background:red;padding:8px 24px}.two{padding-left:24px;padding-right:24px}.three{padding-top:20px}.four{border-left:1px solid #000;border-right:1px solid #000;border-bottom:1px solid #000}.five{background-color:#fff;background-image:-moz-linear-gradient();background-image:-ms-linear-gradient();background-image:-webkit-gradient();background-image:-webkit-linear-gradient()}' ], 'multiple granular - special': [ 'input:-ms-input-placeholder{color:red;text-align:center}input::placeholder{color:red;text-align:center}', 'input:-ms-input-placeholder{color:red;text-align:center}input::placeholder{color:red;text-align:center}' ], 'multiple - over longhand': [ '.one{overflow:hidden;border-right:1px solid;border-color:#d4d4d4}.one:last-child{border-right:0}.two{overflow:hidden;border-right:1px solid;border-color:#d4d4d4}', '.one,.two{overflow:hidden}.one{border-right:1px solid;border-color:#d4d4d4}.one:last-child{border-right:0}.two{border-right:1px solid;border-color:#d4d4d4}' ], 'multiple - over redefined property': [ 'a,div{text-decoration:none}a{text-decoration:underline;color:#00f}p{text-decoration:underline}', 'a,div{text-decoration:none}a,p{text-decoration:underline}a{color:#00f}' ], 'granular two level deep': [ '.one{border:1px solid red;border-right-width:0}.two{border:1px solid red}', '.one{border:1px solid red;border-right-width:0}.two{border:1px solid red}' ], 'moving one already being moved with different value': [ '.one{color:red}.two{display:block}.three{color:red;display:inline}.four{display:inline-block}.five{color:#000}', '.one,.three{color:red}.two{display:block}.three{display:inline}.four{display:inline-block}.five{color:#000}' ], 'not in keyframes': [ '@keyframes test{0%{transform:scale3d(1,1,1);opacity:1}100%{transform:scale3d(.5,.5,.5);opacity:1}}', '@keyframes test{0%{transform:scale3d(1,1,1);opacity:1}100%{transform:scale3d(.5,.5,.5);opacity:1}}' ], 'not in vendored keyframes': [ '@-moz-keyframes test{0%{transform:scale3d(1,1,1);opacity:1}100%{transform:scale3d(.5,.5,.5);opacity:1}}', '@-moz-keyframes test{0%{transform:scale3d(1,1,1);opacity:1}100%{transform:scale3d(.5,.5,.5);opacity:1}}' ], 'with one important comment': [ '/*! comment */a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '/*! comment */.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'with many important comments': [ '/*! comment 1 *//*! comment 2 */a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '/*! comment 1 *//*! comment 2 */.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'with important comment and charset': [ '@charset "utf-8";/*! comment */a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '@charset "utf-8";/*! comment */.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'with charset and import': [ '@charset "UTF-8";@import url(http://fonts.googleapis.com/css?family=Lora:400,700);a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '@charset "UTF-8";@import url(http://fonts.googleapis.com/css?family=Lora:400,700);.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'with charset and import and comments': [ '@charset "UTF-8";@import url(http://fonts.googleapis.com/css?family=Lora:400,700);/*! comment */a{width:75px}div{color:red}.one{display:block}.two{display:inline;color:red}', '@charset "UTF-8";@import url(http://fonts.googleapis.com/css?family=Lora:400,700);/*! comment */.two,div{color:red}a{width:75px}.one{display:block}.two{display:inline}' ], 'with same vendor prefixed value group': [ 'a{-moz-box-sizing:content-box;box-sizing:content-box}div{color:red}p{-moz-box-sizing:content-box;box-sizing:content-box}', 'a,p{-moz-box-sizing:content-box;box-sizing:content-box}div{color:red}' ], 'with different vendor prefixed value group': [ 'a{-moz-box-sizing:content-box;box-sizing:content-box}div{color:red}p{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}', 'a{-moz-box-sizing:content-box;box-sizing:content-box}div{color:red}p{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}' ], 'no rule after comma': [ 'h1{color:#000}div{color:red},h2{color:#000;display:block}', 'h1{color:#000}div{color:red},h2{color:#000;display:block}' ], 'border color as hex and function': [ '.one{border-color:#000;border-bottom-color:rgb(0,0,0,.2)}.two{border-color:#fff;border-bottom-color:rgb(0,0,0,.2)}', '.one{border-color:#000;border-bottom-color:rgb(0,0,0,.2)}.two{border-color:#fff;border-bottom-color:rgb(0,0,0,.2)}' ] }, { level: { 2: { restructureRules: true } } }) ) .addBatch( optimizerContext('only rule restructuring', { 'best fit sorting': [ '.block--0{color:red}.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}.block--5{color:red}.block--6{color:red}.block--7{color:red}.block--8{color:red}.block--9{color:red}', '.block--0,.block--1,.block--2,.block--3,.block--4,.block--5,.block--6,.block--7,.block--8,.block--9{color:red}' ] }, { level: { 2: { all: false, restructureRules: true, removeEmpty: true } } }) ) .addBatch( optimizerContext('only rule restructuring with rule merging limit', { 'adjacent with as many rules as limit': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}', '.block--1,.block--2,.block--3{color:red}' ], 'adjacent with extra rule': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}', '.block--1{color:red}.block--2,.block--3,.block--4{color:red}' ], 'adjacent with extra two rules 123': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}.block--5{color:red}', '.block--1,.block--2{color:red}.block--3,.block--4,.block--5{color:red}' ], 'adjacent with extra three rules': [ '.block--1{color:red}.block--2{color:red}.block--3{color:red}.block--4{color:red}.block--5{color:red}.block--6{color:red}', '.block--1,.block--2,.block--3{color:red}.block--4,.block--5,.block--6{color:red}' ], 'non-adjacent': [ '.block--1{color:red}.other-block--1{width:0}.block--2{color:red}.other-block--2{height:0}.block--3{color:red}.other-block--3{opacity:0}.block--4{color:red}', '.block--1{color:red}.other-block--1{width:0}.block--2,.block--3,.block--4{color:red}.other-block--2{height:0}.other-block--3{opacity:0}' ] }, { compatibility: { selectors: { mergeLimit: 3 } }, level: { 2: { all: false, restructureRules: true, removeEmpty: true } } }) ) .addBatch( optimizerContext('level 2 off', { 'up until changed': [ 'a{color:#000}div{color:red}.one{display:block}.two{display:inline;color:red}', 'a{color:#000}div{color:red}.one{display:block}.two{display:inline;color:red}' ] }, { level: 1 }) ) .export(module); clean-css-5.3.3/test/optimizer/level-2/rules-overlap-test.js 0000664 0000000 0000000 00000004537 14532047255 0023774 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var rulesOverlap = require('../../../lib/optimizer/level-2/rules-overlap'); vows.describe(rulesOverlap) .addBatch({ 'single non-overlapping scopes': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one']], [['rule-scope', '.two']] ); }, 'do not overlap': function (result) { assert.isFalse(result); } }, 'single overlapping scopes': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one']], [['rule-scope', '.one']] ); }, 'do overlap': function (result) { assert.isTrue(result); } }, 'multiple non-overlapping scopes': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one'], ['rule-scope', '.two .three']], [['rule-scope', '.two'], ['rule-scope', '.four']] ); }, 'do not overlap': function (result) { assert.isFalse(result); } }, 'multiple overlapping scopes': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one'], ['rule-scope', '.four']], [['rule-scope', '.one'], ['rule-scope', '.four']] ); }, 'do overlap': function (result) { assert.isTrue(result); } } }) .addBatch({ 'single non-overlapping BEM scopes in BEM mode': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one']], [['rule-scope', '.two--modifier']], true ); }, 'do overlap': function (result) { assert.isFalse(result); } }, 'single overlapping BEM scopes in BEM mode': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one']], [['rule-scope', '.one--modifier']], true ); }, 'do overlap': function (result) { assert.isTrue(result); } }, 'single overlapping BEM scopes with modifiers in BEM mode': { 'topic': function () { return rulesOverlap( [['rule-scope', '.one--modifier1']], [['rule-scope', '.one--modifier2']], true ); }, 'do overlap': function (result) { assert.isTrue(result); } }, }) .export(module); clean-css-5.3.3/test/optimizer/level-2/specificity-test.js 0000664 0000000 0000000 00000007024 14532047255 0023501 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var specificity = require('../../../lib/optimizer/level-2/specificity'); vows.describe(specificity) .addBatch({ 'id selector': { 'topic': '#id', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [1, 0, 0]); } }, 'class selector': { 'topic': '.block', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 1, 0]); } }, 'type selector': { 'topic': 'div', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 0, 1]); } }, 'mixed': { 'topic': 'div#id .block', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [1, 1, 1]); } }, 'descendant rule': { 'topic': 'div>span', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 0, 2]); } }, 'adjacent sibling rule': { 'topic': 'div+span', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 0, 2]); } }, 'non-adjacent sibling rule': { 'topic': 'div~span', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 0, 2]); } }, 'escaped': { 'topic': 'div\\#id', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 0, 1]); } }, 'attributes': { 'topic': 'div[data-id]', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 1, 1]); } }, 'quoted': { 'topic': 'div[data-query="[#id]"]', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 1, 1]); } }, 'quoted relation': { 'topic': 'div[data-query=">id"]', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 1, 1]); } }, 'pseudo class': { 'topic': '.block:before:hover', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 3, 0]); } }, 'pseudo element': { 'topic': '.block::before', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 2, 0]); } }, ':not': { 'topic': '.block:not()', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 1, 0]); } }, ':not with type selector': { 'topic': '.block:not(h1)', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 1, 1]); } }, ':not with class selector': { 'topic': '.block-1:not(.block-2)', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 2, 0]); } }, ':not with id selector': { 'topic': '.block-1:not(#id)', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [1, 1, 0]); } }, ':not with many selectors': { 'topic': '.block-1:not(#id,.block,h1)', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [1, 2, 1]); } }, ':nth-child': { 'topic': '.block-1:nth-child(odd)', 'must be correct': function (selector) { assert.deepEqual(specificity(selector), [0, 2, 0]); } } }) .export(module); clean-css-5.3.3/test/optimizer/remove-unused-test.js 0000664 0000000 0000000 00000003401 14532047255 0022511 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var removeUnused = require('../../lib/optimizer/remove-unused'); var wrapForOptimizing = require('../../lib/optimizer/wrap-for-optimizing').all; vows.describe(removeUnused) .addBatch({ 'it removes unused only': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'background'], ['property-value', 'none'] ], [ 'property', ['property-name', 'color'], ['property-value', 'red'] ] ]; var _properties = wrapForOptimizing(properties); _properties[0].unused = true; removeUnused(_properties); return properties; }, 'it has one property left': function (properties) { assert.lengthOf(properties, 1); assert.equal(properties[0][1][1], 'color'); } }, 'it respects comments': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'background'], ['property-value', 'none'] ], [ 'comment', ['/* comment */'] ], [ 'property', ['property-name', 'color'], ['property-value', 'red'] ] ]; var _properties = wrapForOptimizing(properties); _properties[1].unused = true; removeUnused(_properties); return properties; }, 'it has one property left': function (properties) { assert.lengthOf(properties, 2); assert.equal(properties[0][1][1], 'background'); assert.equal(properties[1][1][0], '/* comment */'); } } }) .export(module); clean-css-5.3.3/test/optimizer/restore-from-optimizing-test.js 0000664 0000000 0000000 00000020052 14532047255 0024527 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var restoreFromOptimizing = require('../../lib/optimizer/restore-from-optimizing'); var wrapForOptimizing = require('../../lib/optimizer/wrap-for-optimizing').all; var shallowClone = require('../../lib/optimizer/clone').shallow; var restoreWithComponents = require('../../lib/optimizer/level-2/restore-with-components'); var populateComponents = require('../../lib/optimizer/level-2/properties/populate-components'); var validator = require('../../lib/optimizer/validator'); var compatibilityFrom = require('../../lib/options/compatibility'); vows.describe(restoreFromOptimizing) .addBatch({ 'without descriptor': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'margin-top'], ['property-value', '0'] ] ]; var wrapped = wrapForOptimizing(properties); restoreFromOptimizing(wrapped); return properties; }, 'is same as source': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin-top'], ['property-value', '0'] ] ]); } }, 'with changed value but without descriptor': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'margin-top'], ['property-value', '0'] ] ]; var wrapped = wrapForOptimizing(properties); wrapped[0].value = [['property-value', '1px']]; wrapped[0].dirty = true; restoreFromOptimizing(wrapped); return properties; }, 'has right output': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin-top'], ['property-value', '1px'] ] ]); } }, 'with comment': { 'topic': function () { var properties = [ [ 'comment', '/* comment */' ], [ 'property', ['property-name', 'margin-top'], ['property-value', '0'] ] ]; var wrapped = wrapForOptimizing(properties); populateComponents(wrapped, validator(compatibilityFrom())); restoreFromOptimizing(wrapped); return properties; }, 'is same as source': function (properties) { assert.deepEqual(properties, [ [ 'comment', '/* comment */' ], [ 'property', ['property-name', 'margin-top'], ['property-value', '0'] ] ]); } }, 'shorthands': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'] ] ]; var wrapped = wrapForOptimizing(properties); populateComponents(wrapped, validator(compatibilityFrom())); wrapped[0].dirty = true; restoreFromOptimizing(wrapped); return properties; }, 'is same as source': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'] ] ]); } }, 'shorthands in simple mode': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'margin'], ['property-value', '1px'], ['property-value', '2px'] ] ]; var wrapped = wrapForOptimizing(properties); wrapped[0].dirty = true; restoreFromOptimizing(wrapped); return properties; }, 'is same as source': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'margin'], ['property-value', '1px'], ['property-value', '2px'] ] ]); } }, 'values': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'] ] ]; var wrapped = wrapForOptimizing(properties); populateComponents(wrapped, validator(compatibilityFrom())); wrapped[0].value = []; wrapped[0].dirty = true; restoreFromOptimizing(wrapped, restoreWithComponents); return properties; }, 'updates value': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'] ] ]); } }, 'in cloned without reference to `all` 123': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'background'], ['property-value', 'url(image.png)'] ] ]; var wrapped = wrapForOptimizing(properties); populateComponents(wrapped, validator(compatibilityFrom())); var cloned = shallowClone(wrapped[0]); cloned.components = wrapped[0].components; cloned.dirty = true; restoreFromOptimizing([cloned], restoreWithComponents); return cloned; }, 'does not fail': function (cloned) { assert.deepEqual(cloned.value, [['property-value', 'url(image.png)']]); } } }) .addBatch({ 'important': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'color'], ['property-value', 'red!important'] ] ]; var wrapped = wrapForOptimizing(properties); restoreFromOptimizing(wrapped, restoreWithComponents); return properties; }, 'restores important': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color'], ['property-value', 'red!important'] ] ]); } }, 'underscore hack': { 'topic': function () { var properties = [ [ 'property', ['property-name', '_color'], ['property-value', 'red'] ] ]; var wrapped = wrapForOptimizing(properties); restoreFromOptimizing(wrapped, restoreWithComponents); return properties; }, 'restores hack': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '_color'], ['property-value', 'red'] ] ]); } }, 'star hack': { 'topic': function () { var properties = [ [ 'property', ['property-name', '*color'], ['property-value', 'red'] ] ]; var wrapped = wrapForOptimizing(properties); restoreFromOptimizing(wrapped, restoreWithComponents); return properties; }, 'restores hack': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', '*color'], ['property-value', 'red'] ] ]); } }, 'suffix hack': { 'topic': function () { var properties = [ [ 'property', ['property-name', 'color'], ['property-value', 'red\\9'] ] ]; var wrapped = wrapForOptimizing(properties); restoreFromOptimizing(wrapped, restoreWithComponents); return properties; }, 'restores hack': function (properties) { assert.deepEqual(properties, [ [ 'property', ['property-name', 'color'], ['property-value', 'red\\9'] ] ]); } } }) .export(module); clean-css-5.3.3/test/optimizer/wrap-for-optimizing-test.js 0000664 0000000 0000000 00000036017 14532047255 0023650 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var wrapForOptimizing = require('../../lib/optimizer/wrap-for-optimizing').all; vows.describe(wrapForOptimizing) .addBatch({ 'one': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'], ['property-value', '0'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has name': function (wrapped) { assert.deepEqual(wrapped[0].name, 'margin'); }, 'has value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0'], ['property-value', '0']]); }, 'is not a block': function (wrapped) { assert.isFalse(wrapped[0].block); }, 'has no components': function (wrapped) { assert.lengthOf(wrapped[0].components, 0); }, 'is not important': function (wrapped) { assert.isFalse(wrapped[0].important); }, 'is not dirty': function (wrapped) { assert.isFalse(wrapped[0].dirty); }, 'is not a shorthand': function (wrapped) { assert.isFalse(wrapped[0].shorthand); }, 'is unused': function (wrapped) { assert.isFalse(wrapped[0].unused); }, 'is hack': function (wrapped) { assert.isFalse(wrapped[0].hack); }, 'is multiplex': function (wrapped) { assert.isFalse(wrapped[0].multiplex); } }, 'two': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'], ['property-value', '0'] ], [ 'property', ['property-name', 'color'], ['property-value', 'red'] ] ]); }, 'has two wraps': function (wrapped) { assert.lengthOf(wrapped, 2); } }, 'with comments': { 'topic': function () { return wrapForOptimizing([ [ 'comment', '/* comment */' ], [ 'property', ['property-name', 'color'], ['property-value', 'red'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'sets position correctly': function (wrapped) { assert.equal(wrapped[0].position, 1); } }, 'longhand': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'border-radius-top-left'], ['property-value', '1px'], ['property-value', '/'], ['property-value', '2px'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has name': function (wrapped) { assert.deepEqual(wrapped[0].name, 'border-radius-top-left'); }, 'has value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '1px'], ['property-value', '/'], ['property-value', '2px']]); }, 'is multiplex': function (wrapped) { assert.isTrue(wrapped[0].multiplex); } }, 'variable': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', '--color'], ['property-value', 'red'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has name': function (wrapped) { assert.deepEqual(wrapped[0].name, '--color'); }, 'is not a block': function (wrapped) { assert.isFalse(wrapped[0].block); } }, 'variable reference': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'color'], ['property-value', 'var(--red)'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has name': function (wrapped) { assert.deepEqual(wrapped[0].name, 'color'); }, 'has value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', 'var(--red)']]); } }, 'variable block': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', '--color'], [ 'property-block', [ [ 'property', ['property-name', 'color'], ['property-value', 'red'] ], [ 'property', ['property-name', 'text-color'], ['property-value', 'red'] ] ] ] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has name': function (wrapped) { assert.deepEqual(wrapped[0].name, '--color'); }, 'has value': function (wrapped) { assert.deepEqual(wrapped[0].value, [ [ 'property-block', [ [ 'property', ['property-name', 'color'], ['property-value', 'red'] ], [ 'property', ['property-name', 'text-color'], ['property-value', 'red'] ] ] ] ]); }, 'is a block': function (wrapped) { assert.isTrue(wrapped[0].block); } }, 'without value': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has value': function (wrapped) { assert.isUndefined(wrapped.value); }, 'unused is not set': function (wrapped) { assert.isFalse(wrapped[0].unused); } }, 'important': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0!important'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'has important set': function (wrapped) { assert.isTrue(wrapped[0].important); } }, 'important with prefix space': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'], ['property-value', '!important'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'has important set': function (wrapped) { assert.isTrue(wrapped[0].important); } }, 'important with suffix space': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0!'], ['property-value', 'important'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'has important set': function (wrapped) { assert.isTrue(wrapped[0].important); } }, 'important with two spaces': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'], ['property-value', '!'], ['property-value', 'important'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'has important set': function (wrapped) { assert.isTrue(wrapped[0].important); }, 'is not a bang hack': function (wrapped) { assert.isFalse(wrapped[0].hack); } }, 'underscore hack': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', '_color'], ['property-value', 'red'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right name': function (wrapped) { assert.deepEqual(wrapped[0].name, 'color'); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['underscore']); } }, 'star hack': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', '*color'], ['property-value', 'red'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right name': function (wrapped) { assert.deepEqual(wrapped[0].name, 'color'); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['asterisk']); } }, 'backslash hack': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0\\9'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['backslash', '9']); } }, 'backslash hack - single value': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'is a hack': function (wrapped) { assert.isFalse(wrapped[0].hack); } }, 'backslash hack - space between values': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'], ['property-value', '\\9'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['backslash', '9']); } }, 'bang hack': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0!ie'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['bang']); }, 'is not important': function (wrapped) { assert.isFalse(wrapped[0].important); } }, 'bang hack with space': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0 !ie'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['bang']); }, 'is not important': function (wrapped) { assert.isFalse(wrapped[0].important); } }, 'bang hack - space between values': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'margin'], ['property-value', '0'], ['property-value', '!ie'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', '0']]); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['bang']); }, 'is not important': function (wrapped) { assert.isFalse(wrapped[0].important); } }, 'two hacks': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'color'], ['property-value', 'red\\9!important'] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', 'red']]); }, 'is important': function (wrapped) { assert.isTrue(wrapped[0].important); }, 'is a hack': function (wrapped) { assert.deepEqual(wrapped[0].hack, ['backslash', '9']); } }, 'source map': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'color', [[1, 2, undefined]]], ['property-value', 'red', [[1, 2, undefined]]] ] ]); }, 'has one wrap': function (wrapped) { assert.lengthOf(wrapped, 1); }, 'has right value': function (wrapped) { assert.deepEqual(wrapped[0].value, [['property-value', 'red', [[1, 2, undefined]]]]); } }, 'skipping properties': { 'topic': function () { return wrapForOptimizing([ [ 'property', ['property-name', 'background', [[1, 2, undefined]]], ['property-value', 'red', [[1, 12, undefined]]] ] ], ['background']); }, 'has no wrap': function (wrapped) { assert.lengthOf(wrapped, 0); } } }) .export(module); clean-css-5.3.3/test/options/ 0000775 0000000 0000000 00000000000 14532047255 0016053 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/options/compatibility-test.js 0000664 0000000 0000000 00000031540 14532047255 0022242 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var compatibilityFrom = require('../../lib/options/compatibility'); vows.describe(compatibilityFrom) .addBatch({ 'as an empty hash': { 'topic': function () { return compatibilityFrom({}); }, 'gets default compatibility': function (compat) { assert.isTrue(compat.colors.opacity); assert.isTrue(compat.properties.colors); assert.isTrue(compat.properties.backgroundClipMerging); assert.isTrue(compat.properties.backgroundOriginMerging); assert.isTrue(compat.properties.backgroundSizeMerging); assert.isFalse(compat.properties.ieBangHack); assert.isFalse(compat.properties.ieFilters); assert.isFalse(compat.properties.iePrefixHack); assert.isFalse(compat.properties.ieSuffixHack); assert.isTrue(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isTrue(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isTrue(compat.units.rem); assert.isTrue(compat.units.vh); assert.isTrue(compat.units.vm); assert.isTrue(compat.units.vmax); assert.isTrue(compat.units.vmin); assert.isTrue(compat.units.vw); } }, 'not given': { 'topic': function () { return compatibilityFrom(); }, 'gets default compatibility': function (compat) { assert.deepEqual(compat, compatibilityFrom({})); } }, 'as a populated hash': { 'topic': function () { return compatibilityFrom({ units: { rem: false, vmax: false }, properties: { prefix: true } }); }, 'gets merged compatibility': function (compat) { assert.isTrue(compat.colors.opacity); assert.isTrue(compat.properties.backgroundClipMerging); assert.isTrue(compat.properties.backgroundOriginMerging); assert.isTrue(compat.properties.backgroundSizeMerging); assert.isTrue(compat.properties.colors); assert.isFalse(compat.properties.ieBangHack); assert.isFalse(compat.properties.ieFilters); assert.isFalse(compat.properties.iePrefixHack); assert.isFalse(compat.properties.ieSuffixHack); assert.isTrue(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isTrue(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isFalse(compat.units.rem); assert.isTrue(compat.units.vh); assert.isTrue(compat.units.vm); assert.isFalse(compat.units.vmax); assert.isTrue(compat.units.vmin); assert.isTrue(compat.units.vw); } } }) .addBatch({ 'as an ie9 template': { 'topic': function () { return compatibilityFrom('ie9'); }, 'gets template compatibility': function (compat) { assert.isTrue(compat.colors.opacity); assert.isTrue(compat.properties.backgroundClipMerging); assert.isTrue(compat.properties.backgroundOriginMerging); assert.isTrue(compat.properties.backgroundSizeMerging); assert.isTrue(compat.properties.colors); assert.isFalse(compat.properties.ieBangHack); assert.isTrue(compat.properties.ieFilters); assert.isFalse(compat.properties.iePrefixHack); assert.isTrue(compat.properties.ieSuffixHack); assert.isTrue(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isTrue(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isTrue(compat.units.rem); assert.isTrue(compat.units.vh); assert.isTrue(compat.units.vm); assert.isTrue(compat.units.vmax); assert.isTrue(compat.units.vmin); assert.isTrue(compat.units.vw); } }, 'as an ie8 template': { 'topic': function () { return compatibilityFrom('ie8'); }, 'gets template compatibility': function (compat) { assert.isFalse(compat.colors.opacity); assert.isFalse(compat.properties.backgroundClipMerging); assert.isFalse(compat.properties.backgroundOriginMerging); assert.isFalse(compat.properties.backgroundSizeMerging); assert.isTrue(compat.properties.colors); assert.isFalse(compat.properties.ieBangHack); assert.isTrue(compat.properties.ieFilters); assert.isTrue(compat.properties.iePrefixHack); assert.isTrue(compat.properties.ieSuffixHack); assert.isFalse(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isFalse(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isFalse(compat.units.rem); assert.isFalse(compat.units.vh); assert.isFalse(compat.units.vm); assert.isFalse(compat.units.vmax); assert.isFalse(compat.units.vmin); assert.isFalse(compat.units.vw); } }, 'as an ie7 template': { 'topic': function () { return compatibilityFrom('ie7'); }, 'gets template compatibility': function (compat) { assert.isFalse(compat.colors.opacity); assert.isFalse(compat.properties.backgroundClipMerging); assert.isFalse(compat.properties.backgroundOriginMerging); assert.isFalse(compat.properties.backgroundSizeMerging); assert.isTrue(compat.properties.colors); assert.isTrue(compat.properties.ieBangHack); assert.isTrue(compat.properties.ieFilters); assert.isTrue(compat.properties.iePrefixHack); assert.isTrue(compat.properties.ieSuffixHack); assert.isFalse(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isTrue(compat.selectors.ie7Hack); assert.isFalse(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isFalse(compat.units.rem); assert.isFalse(compat.units.vh); assert.isFalse(compat.units.vm); assert.isFalse(compat.units.vmax); assert.isFalse(compat.units.vmin); assert.isFalse(compat.units.vw); } }, 'as an unknown template': { 'topic': function () { return compatibilityFrom(''); }, 'gets default compatibility': function (compat) { assert.deepEqual(compat, compatibilityFrom({})); } } }) .addBatch({ 'as a complex string value with group': { 'topic': function () { return compatibilityFrom('ie8,-properties.iePrefixHack,+colors.opacity'); }, 'gets calculated compatibility': function (compat) { assert.isTrue(compat.colors.opacity); assert.isFalse(compat.properties.backgroundClipMerging); assert.isFalse(compat.properties.backgroundOriginMerging); assert.isFalse(compat.properties.backgroundSizeMerging); assert.isTrue(compat.properties.colors); assert.isFalse(compat.properties.ieBangHack); assert.isTrue(compat.properties.ieFilters); assert.isFalse(compat.properties.iePrefixHack); assert.isTrue(compat.properties.ieSuffixHack); assert.isFalse(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isFalse(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isFalse(compat.units.rem); assert.isFalse(compat.units.vh); assert.isFalse(compat.units.vm); assert.isFalse(compat.units.vmax); assert.isFalse(compat.units.vmin); assert.isFalse(compat.units.vw); } }, 'as a single string value without group': { 'topic': function () { return compatibilityFrom('+properties.iePrefixHack'); }, 'gets calculated compatibility': function (compat) { assert.isTrue(compat.colors.opacity); assert.isTrue(compat.properties.colors); assert.isTrue(compat.properties.backgroundClipMerging); assert.isTrue(compat.properties.backgroundOriginMerging); assert.isTrue(compat.properties.backgroundSizeMerging); assert.isFalse(compat.properties.ieBangHack); assert.isFalse(compat.properties.ieFilters); assert.isTrue(compat.properties.iePrefixHack); assert.isFalse(compat.properties.ieSuffixHack); assert.isTrue(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isTrue(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isTrue(compat.units.rem); assert.isTrue(compat.units.vh); assert.isTrue(compat.units.vm); assert.isTrue(compat.units.vmax); assert.isTrue(compat.units.vmin); assert.isTrue(compat.units.vw); } }, 'as a complex string value without group': { 'topic': function () { return compatibilityFrom('+properties.iePrefixHack,-units.rem'); }, 'gets calculated compatibility': function (compat) { assert.isTrue(compat.colors.opacity); assert.isTrue(compat.properties.colors); assert.isTrue(compat.properties.backgroundClipMerging); assert.isTrue(compat.properties.backgroundOriginMerging); assert.isTrue(compat.properties.backgroundSizeMerging); assert.isFalse(compat.properties.ieBangHack); assert.isFalse(compat.properties.ieFilters); assert.isTrue(compat.properties.iePrefixHack); assert.isFalse(compat.properties.ieSuffixHack); assert.isTrue(compat.properties.merging); assert.isFalse(compat.properties.shorterLengthUnits); assert.isTrue(compat.properties.spaceAfterClosingBrace); assert.isTrue(compat.properties.urlQuotes); assert.isTrue(compat.properties.zeroUnits); assert.isFalse(compat.selectors.adjacentSpace); assert.isFalse(compat.selectors.ie7Hack); assert.isTrue(compat.selectors.multiplePseudoMerging); assert.isTrue(compat.units.ch); assert.isTrue(compat.units.in); assert.isTrue(compat.units.pc); assert.isTrue(compat.units.pt); assert.isFalse(compat.units.rem); assert.isTrue(compat.units.vh); assert.isTrue(compat.units.vm); assert.isTrue(compat.units.vmax); assert.isTrue(compat.units.vmin); assert.isTrue(compat.units.vw); } } }) .export(module); clean-css-5.3.3/test/options/format-test.js 0000664 0000000 0000000 00000022523 14532047255 0020662 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var systemLineBreak = require('os').EOL; var vows = require('vows'); var formatFrom = require('../../lib/options/format').formatFrom; vows.describe(formatFrom) .addBatch({ 'undefined': { 'topic': function () { return formatFrom(undefined); }, 'is false': function (formatOptions) { assert.deepEqual(formatOptions, false); } }, 'false': { 'topic': function () { return formatFrom(false); }, 'is false': function (formatOptions) { assert.deepEqual(formatOptions, false); } }, 'true': { 'topic': function () { return formatFrom(true); }, 'is default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 0, indentWith: ' ', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'hash': { 'topic': function () { return formatFrom({ breaks: { afterProperty: true }, breakWith: '\r\n', indentBy: 1 }); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '\r\n', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: '\r\n', indentBy: 1, indentWith: ' ', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'hash with breaks as numbers': { 'topic': function () { return formatFrom({ breaks: { afterProperty: 2, beforeBlockEnds: 1 }, breakWith: '\r\n', indentBy: 1 }); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '\r\n\r\n', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '\r\n', betweenSelectors: '' }, breakWith: '\r\n', indentBy: 1, indentWith: ' ', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'hash with indentBy as string': { 'topic': function () { return formatFrom({ indentBy: '2' }); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 2, indentWith: ' ', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'hash with explicit indentWith': { 'topic': function () { return formatFrom({ indentWith: '\t' }); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 0, indentWith: '\t', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'hash with implicit indentWith': { 'topic': function () { return formatFrom({ indentWith: 'tab' }); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 0, indentWith: '\t', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'string': { 'topic': function () { return formatFrom('breaks:afterProperty=on;indentBy:3;wrapAt:25'); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: systemLineBreak, afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 3, indentWith: ' ', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: 25, semicolonAfterLastProperty: false }); } }, 'string with indentWith': { 'topic': function () { return formatFrom('indentWith:tab'); }, 'is merged with default': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: '', afterBlockBegins: '', afterBlockEnds: '', afterComment: '', afterProperty: '', afterRuleBegins: '', afterRuleEnds: '', beforeBlockEnds: '', betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 0, indentWith: '\t', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'beautify keyword': { 'topic': function () { return formatFrom('beautify'); }, 'resolves correctly': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: systemLineBreak, afterBlockBegins: systemLineBreak, afterBlockEnds: systemLineBreak, afterComment: systemLineBreak, afterProperty: systemLineBreak, afterRuleBegins: systemLineBreak, afterRuleEnds: systemLineBreak, beforeBlockEnds: systemLineBreak, betweenSelectors: systemLineBreak }, breakWith: systemLineBreak, indentBy: 2, indentWith: ' ', spaces: { aroundSelectorRelation: true, beforeBlockBegins: true, beforeValue: true }, wrapAt: false, semicolonAfterLastProperty: false }); } }, 'keep-breaks keyword': { 'topic': function () { return formatFrom('keep-breaks'); }, 'resolves correctly': function (formatOptions) { assert.deepEqual(formatOptions, { breaks: { afterAtRule: systemLineBreak, afterBlockBegins: systemLineBreak, afterBlockEnds: systemLineBreak, afterComment: systemLineBreak, afterProperty: '', afterRuleBegins: '', afterRuleEnds: systemLineBreak, beforeBlockEnds: systemLineBreak, betweenSelectors: '' }, breakWith: systemLineBreak, indentBy: 0, indentWith: ' ', spaces: { aroundSelectorRelation: false, beforeBlockBegins: false, beforeValue: false }, wrapAt: false, semicolonAfterLastProperty: false }); } } }) .export(module); clean-css-5.3.3/test/options/optimization-level-test.js 0000664 0000000 0000000 00000065726 14532047255 0023241 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var optimizationLevelFrom = require('../../lib/options/optimization-level').optimizationLevelFrom; var roundingPrecisionFrom = require('../../lib/options/rounding-precision').roundingPrecisionFrom; vows.describe(optimizationLevelFrom) .addBatch({ 'undefined': { 'topic': function () { return optimizationLevelFrom(undefined); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); } }, 'number - level 0': { 'topic': function () { return optimizationLevelFrom(0); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); } }, 'number - level 1': { 'topic': function () { return optimizationLevelFrom(1); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); } }, 'number - level 2': { 'topic': function () { return optimizationLevelFrom(2); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: true, mergeIntoShorthands: true, mergeMedia: true, mergeNonAdjacentRules: true, mergeSemantically: false, overrideProperties: true, removeEmpty: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, removeDuplicateRules: true, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'string with value': { 'topic': function () { return optimizationLevelFrom('0'); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); } }, 'a hash': { 'topic': function () { return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: true }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 0, tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: true, mergeIntoShorthands: true, mergeMedia: true, mergeNonAdjacentRules: true, mergeSemantically: false, overrideProperties: true, removeEmpty: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, removeDuplicateRules: true, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with all keyword for level 1': { 'topic': function () { return optimizationLevelFrom({ 1: { all: false, cleanupCharsets: true } }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: false, optimizeBackground: false, optimizeBorderRadius: false, optimizeFilter: false, optimizeFontWeight: false, optimizeOutline: false, removeEmpty: false, removeNegativePaddings: false, removeQuotes: false, removeWhitespace: false, replaceMultipleZeros: false, replaceTimeUnits: false, replaceZeroUnits: false, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: false, tidyBlockScopes: false, tidySelectors: false, variableValueOptimizers: [] }); } }, 'a hash with * keyword for level 1': { 'topic': function () { return optimizationLevelFrom({ 1: { '*': false, cleanupCharsets: true } }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: false, optimizeBackground: false, optimizeBorderRadius: false, optimizeFilter: false, optimizeFontWeight: false, optimizeOutline: false, removeEmpty: false, removeNegativePaddings: false, removeQuotes: false, removeWhitespace: false, replaceMultipleZeros: false, replaceTimeUnits: false, replaceZeroUnits: false, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: false, tidyBlockScopes: false, tidySelectors: false, variableValueOptimizers: [] }); } }, 'a hash with all keyword for level 2': { 'topic': function () { return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: { all: false, mergeMedia: true } }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 0, tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: false, mergeIntoShorthands: false, mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: false, overrideProperties: false, removeEmpty: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, removeDuplicateRules: false, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with * keyword for level 2': { 'topic': function () { return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: { '*': false, mergeMedia: true } }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 0, tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: false, mergeIntoShorthands: false, mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: false, overrideProperties: false, removeEmpty: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, removeDuplicateRules: false, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with options as strings': { 'topic': function () { return optimizationLevelFrom({ 1: 'roundingPrecision:3;specialComments:0' }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(3), selectorsSortingMethod: 'standard', specialComments: 0, tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); } }, 'a hash with options as strings with boolean values': { 'topic': function () { return optimizationLevelFrom({ 2: 'mergeMedia:false;mergeSemantically:true' }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: true, mergeIntoShorthands: true, mergeMedia: false, mergeNonAdjacentRules: true, mergeSemantically: true, overrideProperties: true, removeEmpty: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, removeDuplicateRules: true, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with options as strings with boolean values as on/off': { 'topic': function () { return optimizationLevelFrom({ 2: 'mergeMedia:off;mergeSemantically:on' }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: true, mergeIntoShorthands: true, mergeMedia: false, mergeNonAdjacentRules: true, mergeSemantically: true, overrideProperties: true, removeEmpty: true, reduceNonAdjacentRules: true, removeDuplicateFontRules: true, removeDuplicateMediaBlocks: true, removeDuplicateRules: true, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with options as strings with all keyword': { 'topic': function () { return optimizationLevelFrom({ 2: 'all:false;mergeMedia:true;mergeSemantically:true' }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: false, mergeIntoShorthands: false, mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: true, overrideProperties: false, removeEmpty: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, removeDuplicateRules: false, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with options as strings with * keyword': { 'topic': function () { return optimizationLevelFrom({ 2: '*:false;mergeMedia:true;mergeSemantically:true' }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1', '2']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); }, 'has level 2 options': function (levelOptions) { assert.deepEqual(levelOptions['2'], { mergeAdjacentRules: false, mergeIntoShorthands: false, mergeMedia: true, mergeNonAdjacentRules: false, mergeSemantically: true, overrideProperties: false, removeEmpty: false, reduceNonAdjacentRules: false, removeDuplicateFontRules: false, removeDuplicateMediaBlocks: false, removeDuplicateRules: false, removeUnusedAtRules: false, restructureRules: false, skipProperties: [] }); } }, 'a hash with options as undefined/boolean': { 'topic': function () { return optimizationLevelFrom({ 0: undefined, 1: true, 2: undefined }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: roundingPrecisionFrom(undefined), selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); } }, 'a hash with roundingPrecision as number': { 'topic': function () { return optimizationLevelFrom({ 1: { roundingPrecision: 4 } }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: { 'ch': 4, 'cm': 4, 'em': 4, 'ex': 4, 'in': 4, 'mm': 4, 'pc': 4, 'pt': 4, 'px': 4, 'q': 4, 'rem': 4, 'vh': 4, 'vmax': 4, 'vmin': 4, 'vw': 4, '%': 4 }, selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); } }, 'a hash with complex roundingPrecision': { 'topic': function () { return optimizationLevelFrom({ 1: 'roundingPrecision:all=5,rem=off,%=1' }); }, 'has all options': function (levelOptions) { assert.deepEqual(Object.keys(levelOptions), ['0', '1']); }, 'has level 0 options': function (levelOptions) { assert.deepEqual(levelOptions['0'], {}); }, 'has level 1 options': function (levelOptions) { assert.deepEqual(levelOptions['1'], { cleanupCharsets: true, normalizeUrls: true, optimizeBackground: true, optimizeBorderRadius: true, optimizeFilter: true, optimizeFontWeight: true, optimizeOutline: true, removeEmpty: true, removeNegativePaddings: true, removeQuotes: true, removeWhitespace: true, replaceMultipleZeros: true, replaceTimeUnits: true, replaceZeroUnits: true, roundingPrecision: { 'ch': 5, 'cm': 5, 'em': 5, 'ex': 5, 'in': 5, 'mm': 5, 'pc': 5, 'pt': 5, 'px': 5, 'q': 5, 'rem': 'off', 'vh': 5, 'vmax': 5, 'vmin': 5, 'vw': 5, '%': 1 }, selectorsSortingMethod: 'standard', specialComments: 'all', tidyAtRules: true, tidyBlockScopes: true, tidySelectors: true, variableValueOptimizers: [] }); } }, 'a hash with skipProperties as a string': { 'topic': function () { return optimizationLevelFrom({ 2: 'skipProperties:background,font,transform' }); }, 'has correct skipProperties level 2 option': function (levelOptions) { assert.deepEqual(levelOptions['2'].skipProperties, ['background', 'font', 'transform']); } } }) .export(module); clean-css-5.3.3/test/options/rounding-precision-test.js 0000664 0000000 0000000 00000022454 14532047255 0023213 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var roundingPrecisionFrom = require('../../lib/options/rounding-precision').roundingPrecisionFrom; vows.describe(roundingPrecisionFrom) .addBatch({ 'default': { 'topic': function () { return roundingPrecisionFrom(null); }, 'is disabled for all units': function (precision) { assert.equal(precision.ch, 'off'); assert.equal(precision.cm, 'off'); assert.equal(precision.em, 'off'); assert.equal(precision.ex, 'off'); assert.equal(precision.in, 'off'); assert.equal(precision.mm, 'off'); assert.equal(precision.pc, 'off'); assert.equal(precision.pt, 'off'); assert.equal(precision.px, 'off'); assert.equal(precision.q, 'off'); assert.equal(precision.rem, 'off'); assert.equal(precision.vh, 'off'); assert.equal(precision.vmax, 'off'); assert.equal(precision.vmin, 'off'); assert.equal(precision.vw, 'off'); assert.equal(precision['%'], 'off'); } }, 'shortcut': { 'topic': function () { return roundingPrecisionFrom(2); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 2); assert.equal(precision.cm, 2); assert.equal(precision.em, 2); assert.equal(precision.ex, 2); assert.equal(precision.in, 2); assert.equal(precision.mm, 2); assert.equal(precision.pc, 2); assert.equal(precision.pt, 2); assert.equal(precision.px, 2); assert.equal(precision.q, 2); assert.equal(precision.rem, 2); assert.equal(precision.vh, 2); assert.equal(precision.vmax, 2); assert.equal(precision.vmin, 2); assert.equal(precision.vw, 2); assert.equal(precision['%'], 2); } }, 'string': { 'topic': function () { return roundingPrecisionFrom('6'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 6); assert.equal(precision.cm, 6); assert.equal(precision.em, 6); assert.equal(precision.ex, 6); assert.equal(precision.in, 6); assert.equal(precision.mm, 6); assert.equal(precision.pc, 6); assert.equal(precision.pt, 6); assert.equal(precision.px, 6); assert.equal(precision.q, 6); assert.equal(precision.rem, 6); assert.equal(precision.vh, 6); assert.equal(precision.vmax, 6); assert.equal(precision.vmin, 6); assert.equal(precision.vw, 6); assert.equal(precision['%'], 6); } }, 'hash': { 'topic': function () { return roundingPrecisionFrom({ px: 5, q: 7 }); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 'off'); assert.equal(precision.cm, 'off'); assert.equal(precision.em, 'off'); assert.equal(precision.ex, 'off'); assert.equal(precision.in, 'off'); assert.equal(precision.mm, 'off'); assert.equal(precision.pc, 'off'); assert.equal(precision.pt, 'off'); assert.equal(precision.px, 5); assert.equal(precision.q, 7); assert.equal(precision.rem, 'off'); assert.equal(precision.vh, 'off'); assert.equal(precision.vmax, 'off'); assert.equal(precision.vmin, 'off'); assert.equal(precision.vw, 'off'); assert.equal(precision['%'], 'off'); } }, 'keyword': { 'topic': function () { return roundingPrecisionFrom('off'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 'off'); assert.equal(precision.cm, 'off'); assert.equal(precision.em, 'off'); assert.equal(precision.ex, 'off'); assert.equal(precision.in, 'off'); assert.equal(precision.mm, 'off'); assert.equal(precision.pc, 'off'); assert.equal(precision.pt, 'off'); assert.equal(precision.px, 'off'); assert.equal(precision.q, 'off'); assert.equal(precision.rem, 'off'); assert.equal(precision.vh, 'off'); assert.equal(precision.vmax, 'off'); assert.equal(precision.vmin, 'off'); assert.equal(precision.vw, 'off'); assert.equal(precision['%'], 'off'); } } }) .addBatch({ 'all': { 'topic': function () { return roundingPrecisionFrom('all=6'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 6); assert.equal(precision.cm, 6); assert.equal(precision.em, 6); assert.equal(precision.ex, 6); assert.equal(precision.in, 6); assert.equal(precision.mm, 6); assert.equal(precision.pc, 6); assert.equal(precision.pt, 6); assert.equal(precision.px, 6); assert.equal(precision.q, 6); assert.equal(precision.rem, 6); assert.equal(precision.vh, 6); assert.equal(precision.vmax, 6); assert.equal(precision.vmin, 6); assert.equal(precision.vw, 6); assert.equal(precision['%'], 6); } }, 'all via star': { 'topic': function () { return roundingPrecisionFrom('*=3'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 3); assert.equal(precision.cm, 3); assert.equal(precision.em, 3); assert.equal(precision.ex, 3); assert.equal(precision.in, 3); assert.equal(precision.mm, 3); assert.equal(precision.pc, 3); assert.equal(precision.pt, 3); assert.equal(precision.px, 3); assert.equal(precision.q, 3); assert.equal(precision.rem, 3); assert.equal(precision.vh, 3); assert.equal(precision.vmax, 3); assert.equal(precision.vmin, 3); assert.equal(precision.vw, 3); assert.equal(precision['%'], 3); } }, 'all with overriden values': { 'topic': function () { return roundingPrecisionFrom('all=3,ch=1,rem=-1,px=6'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 1); assert.equal(precision.cm, 3); assert.equal(precision.em, 3); assert.equal(precision.ex, 3); assert.equal(precision.in, 3); assert.equal(precision.mm, 3); assert.equal(precision.pc, 3); assert.equal(precision.pt, 3); assert.equal(precision.px, 6); assert.equal(precision.q, 3); assert.equal(precision.rem, 'off'); assert.equal(precision.vh, 3); assert.equal(precision.vmax, 3); assert.equal(precision.vmin, 3); assert.equal(precision.vw, 3); assert.equal(precision['%'], 3); } }, 'overriden values': { 'topic': function () { return roundingPrecisionFrom('ch=1,rem=-1,px=6'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 1); assert.equal(precision.cm, 'off'); assert.equal(precision.em, 'off'); assert.equal(precision.ex, 'off'); assert.equal(precision.in, 'off'); assert.equal(precision.mm, 'off'); assert.equal(precision.pc, 'off'); assert.equal(precision.pt, 'off'); assert.equal(precision.px, 6); assert.equal(precision.q, 'off'); assert.equal(precision.rem, 'off'); assert.equal(precision.vh, 'off'); assert.equal(precision.vmax, 'off'); assert.equal(precision.vmin, 'off'); assert.equal(precision.vw, 'off'); assert.equal(precision['%'], 'off'); } }, 'overriden values via keyword': { 'topic': function () { return roundingPrecisionFrom('ch=1,rem=off,px=6'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 1); assert.equal(precision.cm, 'off'); assert.equal(precision.em, 'off'); assert.equal(precision.ex, 'off'); assert.equal(precision.in, 'off'); assert.equal(precision.mm, 'off'); assert.equal(precision.pc, 'off'); assert.equal(precision.pt, 'off'); assert.equal(precision.px, 6); assert.equal(precision.q, 'off'); assert.equal(precision.rem, 'off'); assert.equal(precision.vh, 'off'); assert.equal(precision.vmax, 'off'); assert.equal(precision.vmin, 'off'); assert.equal(precision.vw, 'off'); assert.equal(precision['%'], 'off'); } }, 'non numeric value': { 'topic': function () { return roundingPrecisionFrom('ch=a,rem=2,px=c'); }, 'is set for all units': function (precision) { assert.equal(precision.ch, 'off'); assert.equal(precision.cm, 'off'); assert.equal(precision.em, 'off'); assert.equal(precision.ex, 'off'); assert.equal(precision.in, 'off'); assert.equal(precision.mm, 'off'); assert.equal(precision.pc, 'off'); assert.equal(precision.pt, 'off'); assert.equal(precision.px, 'off'); assert.equal(precision.q, 'off'); assert.equal(precision.rem, 2); assert.equal(precision.vh, 'off'); assert.equal(precision.vmax, 'off'); assert.equal(precision.vmin, 'off'); assert.equal(precision.vw, 'off'); assert.equal(precision['%'], 'off'); } } }) .export(module); clean-css-5.3.3/test/protocol-imports-test.js 0000664 0000000 0000000 00000121135 14532047255 0021232 0 ustar 00root root 0000000 0000000 /* jshint unused: false, camelcase: false */ var vows = require('vows'); var assert = require('assert'); var http = require('http'); var httpProxy = require('http-proxy'); var enableDestroy = require('server-destroy'); var nock = require('nock'); var url = require('url'); var path = require('path'); var CleanCSS = require('../index'); var port = 24682; vows.describe('protocol imports').addBatch({ 'using file:// protocol of a missing file': { topic: function () { new CleanCSS({ inline: 'all' }).minify('@import url(file://missing.css);a{color:#f00}', this.callback); }, 'should raise error': function (errors, minified) { assert.lengthOf(errors, 1); }, 'should ignore @import': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); } }, 'using file:// protocol of an existing file': { topic: function () { new CleanCSS({ inline: 'all' }).minify('@import url(file://test/fixtures/partials/one.css);a{color:#f00}', this.callback); }, 'should not raise error': function (errors, minified) { assert.isNull(errors); }, 'should ignore @import': function (errors, minified) { assert.equal(minified.styles, '.one{color:red}a{color:red}'); } }, 'using file:// protocol to an existing file rebased to different root': { topic: function () { new CleanCSS({ inline: 'all', rebase: true, rebaseTo: path.join('test', 'fixtures') }).minify('@import url(file://partials/one.css);a{color:#f00}', this.callback); }, 'should not raise error': function (errors, minified) { assert.isNull(errors); }, 'should ignore @import': function (errors, minified) { assert.equal(minified.styles, '.one{color:red}a{color:red}'); } }, 'using file:// protocol to a file given by absolute path': { topic: function () { new CleanCSS({ inline: 'all' }).minify('@import url(file:///test/fixtures/partials/one.css);a{color:#f00}', this.callback); }, 'should not raise error': function (errors, minified) { assert.isNull(errors); }, 'should ignore @import': function (errors, minified) { assert.equal(minified.styles, '.one{color:red}a{color:red}'); } }, 'of a missing file': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/missing.css') .reply(404); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/missing.css);a{color:red}', this.callback); }, 'should raise error': function (errors, minified) { assert.lengthOf(errors, 1); }, 'should ignore @import': function (errors, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/missing.css);a{color:red}'); }, 'hits the endpoint': function (_errors, _minified) { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/present.css') .reply(200, 'p{font-size:13px}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/present.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'p{font-size:13px}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with spaces in path': { topic: function () { this.reqMocks = nock('http://fonts.googleapis.com') .get('/css?family=Oleo%20Script%20Swash%20Caps') .reply(200, 'p{font-size:13px}'); new CleanCSS({ inline: 'all' }).minify('@import url(\'http://fonts.googleapis.com/css?family=Oleo Script Swash Caps\');', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'p{font-size:13px}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file via HTTPS': { topic: function () { this.reqMocks = nock('https://127.0.0.1') .get('/present.css') .reply(200, 'p{font-size:13px}'); new CleanCSS({ inline: 'all' }).minify('@import url(https://127.0.0.1/present.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'p{font-size:13px}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with media': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/present.css') .reply(200, 'p{font-size:13px}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/present.css) screen;a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, '@media screen{p{font-size:13px}}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with dependencies': { topic: function () { this.reqMocks1 = nock('http://127.0.0.1') .get('/present.css') .reply(200, '@import url(/vendor/reset.css);@import url(https://127.0.0.2/base.css);p{font-size:13px}') .get('/vendor/reset.css') .reply(200, 'body{margin:0}'); this.reqMocks2 = nock('https://127.0.0.2') .get('/base.css') .reply(200, 'div{padding:0}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/present.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'body{margin:0}div{padding:0}p{font-size:13px}a{color:red}'); }, 'hits endpoints': function () { assert.isTrue(this.reqMocks1.isDone()); assert.isTrue(this.reqMocks2.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with relative dependencies': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/nested/present.css') .reply(200, '@import url(../vendor/reset.css);p{font-size:13px}') .get('/vendor/reset.css') .reply(200, 'body{margin:0}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/nested/present.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'body{margin:0}p{font-size:13px}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file missing relative dependency': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/nested/present.css') .reply(200, '@import url(../missing.css);p{font-size:13px}') .get('/missing.css') .reply(404); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/nested/present.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.lengthOf(errors, 1); assert.equal(errors[0], 'Broken @import declaration of "http://127.0.0.1/missing.css" - 404'); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/missing.css);p{font-size:13px}a{color:red}'); }, 'hits the endpoint': function (_errors, _minified) { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with URLs to rebase': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/urls.css') .reply(200, 'a{background:url(test.png)}'); new CleanCSS({ inline: 'all', rebase: true }).minify('@import url(http://127.0.0.1/urls.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{background:url(http://127.0.0.1/test.png)}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with relative URLs to rebase': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/base.css') .reply(200, '@import url(deeply/nested/urls.css);') .get('/deeply/nested/urls.css') .reply(200, 'a{background:url(../images/test.png)}'); new CleanCSS({ inline: 'all', rebase: true }).minify('@import url(http://127.0.0.1/base.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{background:url(http://127.0.0.1/deeply/images/test.png)}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with relative URLs and rebase turned off': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/base.css') .reply(200, '@import url(deeply/nested/urls.css);') .get('/deeply/nested/urls.css') .reply(200, 'a{background:url(../images/test.png)}'); new CleanCSS({ inline: 'all', rebase: false }).minify('@import url(http://127.0.0.1/base.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{background:url(../images/test.png)}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an existing file with absolute URLs in different domain': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/base.css') .reply(200, 'a{background:url(http://example.com/deeply/images/test.png)}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/base.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{background:url(http://example.com/deeply/images/test.png)}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of an unreachable domain': { topic: function () { new CleanCSS({ inline: 'all' }).minify('@import url(http://0.0.0.0/custom.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.lengthOf(errors, 1); assert.include(errors[0], 'Broken @import declaration of "http://0.0.0.0/custom.css"'); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, '@import url(http://0.0.0.0/custom.css);a{color:red}'); } }, 'of a 30x response with absolute URL': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/moved.css') .reply(301, '', { 'Location': 'http://127.0.0.1/present.css' }) .get('/present.css') .reply(200, 'body{margin:0}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/moved.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'body{margin:0}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a 30x response with relative URL': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/moved.css') .reply(301, '', { 'Location': '/present.css' }) .get('/present.css') .reply(200, 'body{margin:0}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/moved.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'body{margin:0}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a cyclical reference response': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/one.css') .reply(200, '@import url(/two.css);div{padding:0}') .get('/two.css') .reply(200, '@import url(http://127.0.0.1/two.css);body{margin:0}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/one.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'body{margin:0}div{padding:0}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a resource without protocol': { topic: function () { new CleanCSS({ inline: 'all' }).minify('@import url(//127.0.0.1/no-protocol.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should be kept intact': function (errors, minified) { assert.equal(minified.styles, '@import url(//127.0.0.1/no-protocol.css);a{color:red}'); } }, 'of a resource without protocol with rebase': { topic: function () { new CleanCSS({ inline: 'all' }).minify('@import url(//127.0.0.1/no-protocol.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, '@import url(//127.0.0.1/no-protocol.css);'); } }, 'of a resource with a protocol and absolute URL without a protocol': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/no-protocol.css') .reply(200, 'a{background:url(//127.0.0.1/image.png)}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/no-protocol.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{background:url(//127.0.0.1/image.png)}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a resource with protocol with rebase to another domain': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/no-protocol.css') .reply(200, 'a{background:url(//127.0.0.2/image.png)}'); new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.1/no-protocol.css);', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{background:url(//127.0.0.2/image.png)}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a resource available via POST only': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .post('/computed.css') .reply(200, 'div{padding:0}'); new CleanCSS({ inline: 'all', inlineRequest: { method: 'POST' } }).minify('@import url(http://127.0.0.1/computed.css);a{color:red}', this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'div{padding:0}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a remote resource mixed with local ones': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(test/fixtures/partials/one.css);'; this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{padding:0}'); new CleanCSS({ inline: 'all' }).minify(source, this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'div{padding:0}.one{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a remote resource referenced from local one given via hash': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{padding:0}'); new CleanCSS({ inline: 'all' }).minify({ 'local.css': { styles: '@import url(http://127.0.0.1/remote.css);' } }, this.callback); }, 'should not raise errors': function (errors, minified) { assert.isNull(errors); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'div{padding:0}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a remote resource after content and no callback': { topic: function () { var source = '.one{color:red}@import url(http://127.0.0.1/remote.css);'; this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{padding:0}'); return new CleanCSS({ inline: 'all' }).minify(source); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.match(minified.warnings[0], /no callback given/); }, 'should process @import': function (error, minified) { assert.equal(minified.styles, '.one{color:red}'); }, 'does not hit the endpoint': function () { assert.isFalse(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a remote resource mixed with local ones but no callback': { topic: function () { var source = '@import url(test/fixtures/partials/one.css);@import url(http://127.0.0.1/remote.css);'; this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{padding:0}'); return new CleanCSS({ inline: 'all' }).minify(source); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.match(minified.warnings[0], /no callback given/); }, 'should process @import': function (error, minified) { assert.equal(minified.styles, '.one{color:red}'); }, 'does not hit the endpoint': function () { assert.isFalse(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'of a remote resource mixed with local ones and disabled remote imports': { topic: function () { var source = '@import url(http://127.0.0.1/skipped.css);@import url(test/fixtures/partials/one.css);'; new CleanCSS({ inline: ['local'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.equal(minified.warnings[0], 'Skipping remote @import of "http://127.0.0.1/skipped.css" as resource is not allowed.'); }, 'should keep imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/skipped.css);.one{color:red}'); } }, 'of a remote file that imports relative stylesheets': { topic: function () { var source = '@import url(http://127.0.0.1/test/folder/remote.css);'; this.reqMocks = nock('http://127.0.0.1') .get('/test/folder/remote.css') .reply(200, '@import url(../otherfolder/remote.css);@import url(deepersubfolder/fonts.css);') .get('/test/otherfolder/remote.css') .reply(200, 'div{padding:0}') .get('/test/folder/deepersubfolder/fonts.css') .reply(200, 'a{color:red}'); new CleanCSS({ inline: 'all' }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should process @import': function (error, minified) { assert.equal(minified.styles, 'div{padding:0}a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } } }).addBatch({ 'of a timed out response': { topic: function () { nock.enableNetConnect(); var self = this; var timeout = 100; this.server = http.createServer(function (req, res) { setTimeout(function () {}, timeout * 2); }); this.server.listen(port, function () { new CleanCSS({ inline: 'all', inlineTimeout: timeout }).minify('@import url(http://localhost:' + port + '/timeout.css);a{color:red}', self.callback); }); enableDestroy(self.server); }, 'should raise errors': function (errors, minified) { assert.lengthOf(errors, 1); assert.equal(errors[0], 'Broken @import declaration of "http://localhost:' + port + '/timeout.css" - timeout'); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, '@import url(http://localhost:' + port + '/timeout.css);a{color:red}'); }, teardown: function () { this.server.destroy(); nock.disableNetConnect(); } } }).addBatch({ 'of a proxied resource': { topic: function () { var self = this; nock.enableNetConnect(); this.proxied = false; this.reqMocks = nock('http://127.0.0.2') .get('/styles.css') .reply(200, 'a{color:red}'); var proxy = httpProxy.createProxyServer(); this.proxyServer = http.createServer(function (req, res) { self.proxied = true; proxy.web(req, res, { target: 'http://' + url.parse(req.url).host }, function () {}); }); this.proxyServer.listen(8080, function () { var options = { inline: 'all', inlineRequest: { hostname: '127.0.0.1', port: 8080 } }; new CleanCSS(options).minify('@import url(http://127.0.0.2/styles.css);', self.callback); }); enableDestroy(this.proxyServer); }, 'proxies the connection': function () { assert.isTrue(this.proxied); }, 'gets right output': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); this.proxyServer.destroy(); } } }).addBatch({ 'of a proxied resource with https url': { topic: function () { var self = this; nock.enableNetConnect(); this.proxied = false; this.reqMocks = nock('http://127.0.0.2') .get('/sslstyles.css') .reply(200, 'a{color:red}'); var proxy = httpProxy.createProxyServer(); this.proxyServer = http.createServer(function (req, res) { self.proxied = true; self.isSSL = req.url.indexOf('https://') === 0; proxy.web(req, res, { target: 'http://' + url.parse(req.url).host }, function () {}); }); this.proxyServer.listen(8080, function () { var options = { inline: 'all', inlineRequest: { hostname: '127.0.0.1', port: 8080 } }; new CleanCSS(options).minify('@import url(https://127.0.0.2/sslstyles.css);', self.callback); }); enableDestroy(this.proxyServer); }, 'proxies the connection': function () { assert.isTrue(this.proxied); }, 'ssl was used': function () { assert.isTrue(this.isSSL); }, 'gets right output': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); this.proxyServer.destroy(); } } }).addBatch({ 'of a proxied resource via env variables': { topic: function () { var self = this; nock.enableNetConnect(); this.reqMocks = nock('http://127.0.0.2') .get('/styles.css') .reply(200, 'a{color:red}'); var proxy = httpProxy.createProxyServer(); this.proxied = false; this.proxyServer = http.createServer(function (req, res) { self.proxied = true; proxy.web(req, res, { target: 'http://' + url.parse(req.url).host }, function (e) { console.log(e); }); }); this.proxyServer.listen(8081, function () { process.env.http_proxy = 'http://127.0.0.1:8081'; new CleanCSS({ inline: 'all' }).minify('@import url(http://127.0.0.2/styles.css);', self.callback); }); enableDestroy(this.proxyServer); }, 'proxies the connection': function () { assert.isTrue(this.proxied); }, 'gets right output': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); this.proxyServer.destroy(); delete process.env.http_proxy; } } }).addBatch({ 'of a proxied resource via env variables overridden by options': { topic: function () { var self = this; nock.enableNetConnect(); this.reqMocks = nock('http://127.0.0.2') .get('/styles.css') .reply(200, 'a{color:red}'); var proxy = httpProxy.createProxyServer(); this.proxied = false; this.proxyServer = http.createServer(function (req, res) { self.proxied = true; proxy.web(req, res, { target: 'http://' + url.parse(req.url).host }, function () {}); }); this.proxyServer.listen(8082, function () { var options = { inline: 'all', inlineRequest: { hostname: '127.0.0.1', port: 8082 } }; process.env.http_proxy = 'http://some-fake-proxy:8082'; new CleanCSS(options).minify('@import url(http://127.0.0.2/styles.css);', self.callback); }); enableDestroy(this.proxyServer); }, 'proxies the connection': function () { assert.isTrue(this.proxied); }, 'gets right output': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); this.proxyServer.destroy(); delete process.env.http_proxy; } } }).addBatch({ 'allowed imports - not set': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; new CleanCSS().minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 2); assert.equal(minified.warnings[0], 'Skipping remote @import of "http://127.0.0.1/remote.css" as resource is not allowed.'); assert.equal(minified.warnings[1], 'Skipping remote @import of "http://127.0.0.2/remote.css" as resource is not allowed.'); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);.one{color:red}'); } }, 'allowed imports - not set and disabled by `inline`': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; new CleanCSS({ inline: ['none'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should not raise warnings': function (error, minified) { assert.isEmpty(minified.warnings); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'); } }, 'allowed imports - local': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; new CleanCSS({ inline: ['local'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 2); assert.equal(minified.warnings[0], 'Skipping remote @import of "http://127.0.0.1/remote.css" as resource is not allowed.'); assert.equal(minified.warnings[1], 'Skipping remote @import of "http://127.0.0.2/remote.css" as resource is not allowed.'); }, 'should keeps imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);.one{color:red}'); } }, 'allowed imports - remote': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; this.reqMocks1 = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{border:0}'); this.reqMocks2 = nock('http://127.0.0.2') .get('/remote.css') .reply(200, 'p{width:100%}'); new CleanCSS({ inline: ['remote'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise a warning': function (error, minified) { assert.lengthOf(minified.warnings, 1); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, 'div{border:0}p{width:100%}'); }, 'hits endpoints': function () { assert.isTrue(this.reqMocks1.isDone()); assert.isTrue(this.reqMocks2.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'allowed imports - remote when local resource is missing': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(missing.css);'; this.reqMocks1 = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{border:0}'); this.reqMocks2 = nock('http://127.0.0.2') .get('/remote.css') .reply(200, 'p{width:100%}'); new CleanCSS({ inline: ['remote'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise a warning': function (error, minified) { assert.lengthOf(minified.warnings, 1); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, 'div{border:0}p{width:100%}'); }, 'hits endpoints': function () { assert.isTrue(this.reqMocks1.isDone()); assert.isTrue(this.reqMocks2.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'allowed imports - all': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; this.reqMocks1 = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div{border:0}'); this.reqMocks2 = nock('http://127.0.0.2') .get('/remote.css') .reply(200, 'p{width:100%}'); new CleanCSS({ inline: ['all'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should not raise warnings': function (error, minified) { assert.isEmpty(minified.warnings); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, 'div{border:0}p{width:100%}.one{color:red}'); }, 'hits endpoints': function () { assert.isTrue(this.reqMocks1.isDone()); assert.isTrue(this.reqMocks2.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'allowed imports - blacklisted': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; new CleanCSS({ inline: ['remote', 'local', '!127.0.0.2', '!127.0.0.1', '!test/fixtures/partials/one.css'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise a warning': function (error, minified) { assert.lengthOf(minified.warnings, 3); assert.equal(minified.warnings[0], 'Skipping remote @import of "http://127.0.0.1/remote.css" as resource is not allowed.'); assert.equal(minified.warnings[1], 'Skipping remote @import of "http://127.0.0.2/remote.css" as resource is not allowed.'); assert.equal(minified.warnings[2], 'Skipping local @import of "test/fixtures/partials/one.css" as resource is not allowed.'); }, 'should process first imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'); } }, 'allowed imports - no-protocol': { topic: function () { var source = '@import url(//127.0.0.1/remote.css);@import url(test/fixtures/partials/one.css);'; new CleanCSS({ inline: ['//127.0.0.1', 'local'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise a warning': function (error, minified) { assert.lengthOf(minified.warnings, 1); assert.equal(minified.warnings[0], 'Skipping remote @import of "//127.0.0.1/remote.css" as no protocol given.'); }, 'should process first imports': function (error, minified) { assert.equal(minified.styles, '@import url(//127.0.0.1/remote.css);.one{color:red}'); } } }).addBatch({ 'allowed imports - from specific URI': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; this.reqMocks = nock('http://127.0.0.2') .get('/remote.css') .reply(200, 'p{width:100%}'); new CleanCSS({ inline: ['http://127.0.0.2/remote.css', 'test/fixtures/partials/one.css'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 1); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/remote.css);p{width:100%}.one{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } }, 'allowed imports - from URI prefix': { topic: function () { var source = '@import url(http://127.0.0.1/remote.css);@import url(http://127.0.0.2/remote.css);@import url(test/fixtures/partials/one.css);'; this.reqMocks = nock('http://127.0.0.2') .get('/remote.css') .reply(200, 'p{width:100%}'); new CleanCSS({ inline: ['remote', '!http://127.0.0.1/', 'test/fixtures/partials'] }).minify(source, this.callback); }, 'should not raise errors': function (error, minified) { assert.isEmpty(minified.errors); }, 'should raise warnings': function (error, minified) { assert.lengthOf(minified.warnings, 1); }, 'should process imports': function (error, minified) { assert.equal(minified.styles, '@import url(http://127.0.0.1/remote.css);p{width:100%}.one{color:red}'); }, 'hits the endpoint': function () { assert.isTrue(this.reqMocks.isDone()); }, teardown: function () { nock.cleanAll(); } } }).addBatch({ 'custom fetch callback with no request': { topic: function () { new CleanCSS({ fetch: function (uri, inlineRequest, inlineTimeout, callback) { if (uri == 'http://localhost:12345/custom.css') { callback(null, 'a{color:red}'); } }, inline: 'all' }).minify('@import url(http://localhost:12345/custom.css);', this.callback); }, 'should process @import': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); } }, 'custom fetch callback with real request': { topic: function () { var self = this; nock.enableNetConnect(); this.server = http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/css'}); res.end('a{color:red}'); }); this.server.listen(port, function () { new CleanCSS({ fetch: function (uri, inlineRequest, inlineTimeout, callback) { if (uri == 'http://localhost:' + port + '/custom.css') { http.get(uri, function (res) { var rawData = []; res.on('data', function (chunk) { rawData.push(chunk); }); res.on('end', function () { callback(null, rawData.join('')); }); }); } }, inline: 'all' }).minify('@import url(http://localhost:' + port + '/custom.css);', self.callback); }); enableDestroy(this.server); }, 'gets right output': function (errors, minified) { assert.equal(minified.styles, 'a{color:red}'); }, teardown: function () { this.server.destroy(); } }, 'custom fetch callback with error': { topic: function () { new CleanCSS({ fetch: function (uri, inlineRequest, inlineTimeout, callback) { callback('some error', null); }, inline: 'all' }).minify('@import url(http://localhost:12345/custom.css);', this.callback); }, 'should raise error': function (errors, minified) { assert.deepEqual(errors, ['Broken @import declaration of "http://localhost:12345/custom.css" - some error']); } } }).export(module); clean-css-5.3.3/test/reader/ 0000775 0000000 0000000 00000000000 14532047255 0015622 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/reader/is-allowed-resource-test.js 0000664 0000000 0000000 00000005123 14532047255 0023023 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var isAllowedResource = require('../../lib/reader/is-allowed-resource'); vows.describe(isAllowedResource) .addBatch({ 'local and remote': { 'topic': 'http://127.0.0.1/remote.css', 'is allowed': function (topic) { assert.isTrue(isAllowedResource(topic, true, ['local', 'remote'])); } }, 'remote and local': { 'topic': 'http://127.0.0.1/remote.css', 'is allowed': function (topic) { assert.isTrue(isAllowedResource(topic, true, ['remote', 'local'])); } } }) .addBatch({ 'local URI': { 'topic': 'test/fixtures/partials/one.css', 'is allowed': function (topic) { assert.isTrue(isAllowedResource(topic, false, [topic])); } }, 'local matching URI prefix': { 'topic': 'test/fixtures/partials/one.css', 'is allowed': function (topic) { assert.isTrue(isAllowedResource(topic, false, ['test/fixtures/partials'])); } }, 'local not matching URI prefix': { 'topic': 'test/fixtures/partials/one.css', 'is not allowed': function (topic) { assert.isFalse(isAllowedResource(topic, false, ['test/fixtures/partials-relative'])); } }, 'remote URI': { 'topic': 'http://127.0.0.1/styles.css', 'is allowed': function (topic) { assert.isTrue(isAllowedResource(topic, true, [topic])); } }, 'remote matching URI prefix': { 'topic': 'http://127.0.0.1/path/to/styles.css', 'is allowed': function (topic) { assert.isTrue(isAllowedResource(topic, true, ['http://127.0.0.1/path/to'])); } }, 'remote not matching URI prefix': { 'topic': 'http://127.0.0.1/path/to/styles.css', 'is not allowed': function (topic) { assert.isFalse(isAllowedResource(topic, true, ['http://127.0.0.1/another/path/to'])); } } }) .addBatch({ 'negated rule': { 'topic': 'http://127.0.0.1/path/to/styles.css', 'is not allowed': function (topic) { assert.isFalse(isAllowedResource(topic, true, ['!127.0.0.1'])); } }, 'negated rules': { 'topic': 'http://127.0.0.1/path/to/styles.css', 'is not allowed': function (topic) { assert.isFalse(isAllowedResource(topic, true, ['!127.0.0.1', '!127.0.0.2'])); } }, 'negated remote then local rules': { 'topic': 'http://127.0.0.1/path/to/styles.css', 'is not allowed': function (topic) { assert.isFalse(isAllowedResource(topic, true, ['!127.0.0.1', '!127.0.0.2', '!path/to/styles.css'])); } } }) .export(module); clean-css-5.3.3/test/source-map-test.js 0000664 0000000 0000000 00000243713 14532047255 0017760 0 ustar 00root root 0000000 0000000 /* jshint unused: false */ var assert = require('assert'); var fs = require('fs'); var http = require('http'); var path = require('path'); var enableDestroy = require('server-destroy'); var nock = require('nock'); var vows = require('vows'); var port = 24682; var CleanCSS = require('../index'); var inputMapPath = path.join('test', 'fixtures', 'source-maps', 'styles.css.map'); var inputMap = fs.readFileSync(inputMapPath, 'utf-8'); var lineBreak = require('os').EOL; var escape = global.escape; vows.describe('source-map') .addBatch({ 'vendor prefix with comments': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('html{font-family:sans-serif;/* 1 */-ms-text-size-adjust:100%;/* 2 */-webkit-text-size-adjust:100%/* 3 */}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}'); } }, 'background gradient': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('a{background: linear-gradient(to bottom, rgba(0, 0, 0, 0.1) 0, rgba(0, 0, 0, 0.1))}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{background:linear-gradient(to bottom,rgba(0,0,0,.1) 0,rgba(0,0,0,.1))}'); } }, 'background shorthand defaults': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('a{background: #ffffff none repeat scroll 0 0}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{background:#fff}'); } }, 'background position and size': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('a{background:url(image.png) 0 0 / 100% no-repeat}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{background:url(image.png) 0 0/100% no-repeat}'); } }, 'background position and size without image': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('a{background: 50% 50% / 100% auto no-repeat currentColor}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{background:50% 50%/100% auto no-repeat currentColor}'); } }, 'important': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('@font-face{font-family:si}a{font-family:si!important}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, '@font-face{font-family:si}a{font-family:si!important}'); } }, 'variables': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify(':root{--color:red}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, ':root{--color:red}'); } }, 'variables reused': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify(':root{--color:var(--otherColor)}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, ':root{--color:var(--otherColor)}'); } }, 'empty rules and comments': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('p{/* comment */}'); }, 'gets right output': function (minified) { assert.equal(minified.styles, ''); } } }) .addBatch({ 'module #1': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('/*! a */div[data-id=" abc "] { color:red; }'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); }, 'has comment mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has selector mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 8, originalLine: 1, originalColumn: 8, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has name mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 29, originalLine: 1, originalColumn: 31, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has value mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 35, originalLine: 1, originalColumn: 37, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); } }, 'module #2': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('@media screen {\n@font-face \n{ \nfont-family: test; } }'); }, 'has 4 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); }, 'has `@media` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `@font-face mapping`': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 14, originalLine: 2, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `font-family` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 25, originalLine: 4, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `test` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 25, originalLine: 4, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'with formatting': { 'topic': function () { return new CleanCSS({ format: 'keep-breaks', level: 2, sourceMap: true }).minify('@media screen { a{color:red} p {color:blue} }div{color:pink}'); }, 'has 10 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 10); }, 'has `@media` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `a` mapping': function (minified) { var mapping = { generatedLine: 2, generatedColumn: 0, originalLine: 1, originalColumn: 16, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 2, generatedColumn: 2, originalLine: 1, originalColumn: 18, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 2, generatedColumn: 8, originalLine: 1, originalColumn: 24, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has `p` mapping': function (minified) { var mapping = { generatedLine: 3, generatedColumn: 0, originalLine: 1, originalColumn: 29, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); }, 'has second `color` mapping': function (minified) { var mapping = { generatedLine: 3, generatedColumn: 2, originalLine: 1, originalColumn: 32, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[5], mapping); }, 'has `blue` mapping': function (minified) { var mapping = { generatedLine: 3, generatedColumn: 8, originalLine: 1, originalColumn: 38, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[6], mapping); }, 'has `div` mapping': function (minified) { var mapping = { generatedLine: 5, generatedColumn: 0, originalLine: 1, originalColumn: 45, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[7], mapping); }, 'has third `color` mapping': function (minified) { var mapping = { generatedLine: 5, generatedColumn: 4, originalLine: 1, originalColumn: 49, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[8], mapping); }, 'has `pink` mapping': function (minified) { var mapping = { generatedLine: 5, generatedColumn: 10, originalLine: 1, originalColumn: 55, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[9], mapping); } }, 'keyframes': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('@-webkit-keyframes frames {\n 0% {\n border: 1px;\n }\n 100% {\n border: 3px;\n }\n}'); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has `@keframes` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `0%` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 26, originalLine: 2, originalColumn: 2, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `border` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 29, originalLine: 3, originalColumn: 4, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `1px` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 36, originalLine: 3, originalColumn: 12, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has `100%` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 40, originalLine: 5, originalColumn: 2, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); }, 'has second `border` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 45, originalLine: 6, originalColumn: 4, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[5], mapping); }, 'has `3px` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 52, originalLine: 6, originalColumn: 12, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[6], mapping); } }, 'double comments': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('/* COMMENT 1 */\n/* COMMENT 2 */\ndiv{color:red}'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div`_ mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 3, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 4, originalLine: 3, originalColumn: 4, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 10, originalLine: 3, originalColumn: 10, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'preserved CSS fragment': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('/* clean-css ignore:start */a { margin: 0px; }/* clean-css ignore:end */'); }, 'has 1 mapping': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 1); }, 'has all preserved content mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 28, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); } } }) .addBatch({ 'input map as string': { 'topic': function () { return new CleanCSS({ sourceMap: true }).minify('div > a {\n color: red;\n}', inputMap); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div > a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'input map as source map object': { 'topic': function () { return new CleanCSS({ sourceMap: true }).minify('div > a {\n color: red;\n}', JSON.parse(inputMap)); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div > a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'input map and a callback': { 'topic': function () { new CleanCSS({ sourceMap: true }).minify('div > a {\n color: red;\n}', JSON.parse(inputMap), this.callback); }, 'has 3 mappings': function (error, minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div > a` mapping': function (error, minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (error, minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (error, minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'input map from source': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('div > a {\n color: red;\n}/*# sourceMappingURL=' + inputMapPath + ' */'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div > a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: path.join('test', 'fixtures', 'source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: path.join('test', 'fixtures', 'source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has second `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: path.join('test', 'fixtures', 'source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'input map from source with rebaseTo': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, rebase: true, rebaseTo: './test/fixtures' }).minify('div > a {\n color: red;\n}/*# sourceMappingURL=' + inputMapPath + ' */'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div > a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: path.join('source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: path.join('source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: path.join('source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'input map as inlined data URI with implicit charset us-ascii, not base64, no content-type': inlineDataUriContext('data:,' + escape(inputMap)), 'input map as inlined data URI with implicit charset us-ascii, base64': inlineDataUriContext('data:application/json;base64,' + Buffer.from(inputMap, 'ascii').toString('base64')), 'input map as inlined data URI with implicit charset us-ascii, not base64': inlineDataUriContext('data:application/json,' + escape(inputMap)), 'input map as inlined data URI with charset utf-8, base64': inlineDataUriContext('data:application/json;charset=utf-8;base64,' + Buffer.from(inputMap, 'utf8').toString('base64')), 'input map as inlined data URI with charset utf-8, not base64': inlineDataUriContext('data:application/json;charset=utf-8,' + escape(String.fromCharCode.apply(String, Buffer.from(inputMap, 'utf8')))), 'input map as inlined data URI with explicit charset us-ascii, base64': inlineDataUriContext('data:application/json;charset=us-ascii;base64,' + Buffer.from(inputMap, 'ascii').toString('base64')), 'input map as inlined data URI with explicit charset us-ascii, not base64': inlineDataUriContext('data:application/json;charset=us-ascii,' + escape(inputMap)), 'complex input map': { 'topic': function () { return new CleanCSS({ level: 2, rebase: true, sourceMap: true }).minify('@import url(' + path.dirname(inputMapPath) + '/import.css);'); }, 'has 6 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 6); }, 'has `div` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: path.join(path.dirname(inputMapPath), 'some.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 4, originalLine: 2, originalColumn: 2, source: path.join(path.dirname(inputMapPath), 'some.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 10, originalLine: 2, originalColumn: 2, source: path.join(path.dirname(inputMapPath), 'some.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `div > a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 14, originalLine: 1, originalColumn: 4, source: path.join(path.dirname(inputMapPath), 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has second `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 20, originalLine: 2, originalColumn: 2, source: path.join(path.dirname(inputMapPath), 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); }, 'has `blue` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 26, originalLine: 2, originalColumn: 2, source: path.join(path.dirname(inputMapPath), 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[5], mapping); } }, 'complex but partial input map referenced by path': { 'topic': function () { return new CleanCSS({ level: 2, rebase: true, sourceMap: true }).minify('@import url(test/fixtures/source-maps/no-map-import.css);'); }, 'has 6 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 6); }, 'has 3 mappings to .less file': function (minified) { var fromLess = minified.sourceMap._mappings._array.filter(function (mapping) { return mapping.source == path.join('test', 'fixtures', 'source-maps', 'styles.less'); }); assert.lengthOf(fromLess, 3); }, 'has 3 mappings to .css file': function (minified) { var fromCSS = minified.sourceMap._mappings._array.filter(function (mapping) { return mapping.source == path.join('test', 'fixtures', 'source-maps', 'no-map.css'); }); assert.lengthOf(fromCSS, 3); } }, 'complex input map with an existing file as rebaseTo': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, rebase: true, rebaseTo: path.join('test', 'fixtures', 'source-maps') }).minify('@import url(test/fixtures/source-maps/styles.css);'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has 3 mappings to styles.less file': function (minified) { var stylesSource = minified.sourceMap._mappings._array.filter(function (mapping) { return mapping.source == 'styles.less'; }); assert.lengthOf(stylesSource, 3); } }, 'nested once': { 'topic': function () { return new CleanCSS({ level: 2, rebase: true, sourceMap: true }).minify('@import url(test/fixtures/source-maps/nested/once.css);'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `section > div a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 2, originalColumn: 8, source: path.join('test', 'fixtures', 'source-maps', 'nested/once.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 14, originalLine: 3, originalColumn: 4, source: path.join('test', 'fixtures', 'source-maps', 'nested/once.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 20, originalLine: 3, originalColumn: 4, source: path.join('test', 'fixtures', 'source-maps', 'nested/once.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'nested twice': { 'topic': function () { return new CleanCSS({ level: 2, rebase: true, sourceMap: true }).minify('@import url(test/fixtures/source-maps/nested/twice.css);'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `body > nav a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 3, originalColumn: 4, source: path.join('test', 'fixtures', 'source-maps', 'nested/twice.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 11, originalLine: 4, originalColumn: 6, source: path.join('test', 'fixtures', 'source-maps', 'nested/twice.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 17, originalLine: 4, originalColumn: 6, source: path.join('test', 'fixtures', 'source-maps', 'nested/twice.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'input source map with missing mutliselector input': { 'topic': function () { return new CleanCSS({ sourceMap: true }) .minify( 'a,\na:hover,\na:visited\n{\n color: red;\n}', '{"version":3,"sources":["source.css"],"names":[],"mappings":"AAAA;;;;IAII,YAAW;EACd"}' ); }, 'has 5 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 5); }, 'has `a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `a:hover` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 2, originalLine: 1, originalColumn: 0, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `a:visited` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 10, originalLine: 1, originalColumn: 0, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 20, originalLine: 5, originalColumn: 4, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 26, originalLine: 5, originalColumn: 4, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); } }, 'input source map with missing mutliselector sortable input': { 'topic': function () { return new CleanCSS({ sourceMap: true }) .minify( 'a.button:link,\na.button:visited,\na.button:hover\n{\n color: red;\n}', '{"version":3,"sources":["source.css"],"names":[],"mappings":"AAAA;;;;IAII,YAAW;EACd"}' ); }, 'has 5 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 5); }, 'has `a.button:hover` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `a.button:link` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 15, originalLine: 1, originalColumn: 0, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `a.button:visited` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 29, originalLine: 1, originalColumn: 0, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 46, originalLine: 5, originalColumn: 4, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 52, originalLine: 5, originalColumn: 4, source: 'source.css', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); } } }) .addBatch({ 'invalid response for external source map': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, '/*# sourceMappingURL=http://127.0.0.1/remote.css.map */') .get('/remote.css.map') .reply(404); new CleanCSS({ inline: 'all', sourceMap: true }).minify('@import url(http://127.0.0.1/remote.css);', this.callback); }, 'has mapping': function (errors, minified) { assert.isDefined(minified.sourceMap); }, 'raises no errors': function (errors, _) { assert.isNull(errors); }, 'raises a warning': function (_, minified) { assert.lengthOf(minified.warnings, 1); assert.equal(minified.warnings[0], 'Missing source map at "http://127.0.0.1/remote.css.map" - 404'); }, teardown: function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'timed out response for external source map': { topic: function () { nock.enableNetConnect(); var self = this; var timeout = 100; this.server = http.createServer(function (req, res) { switch (req.url) { case '/remote.css': res.writeHead(200); res.write('/*# sourceMappingURL=http://127.0.0.1:' + port + '/remote.css.map */'); res.end(); break; case '/remote.css.map': setTimeout(function () {}, timeout * 2); } }); this.server.listen(port, '127.0.0.1', function () { new CleanCSS({ inline: 'all', inlineTimeout: timeout, sourceMap: true }) .minify('@import url(http://127.0.0.1:' + port + '/remote.css);', self.callback); }); enableDestroy(this.server); }, 'has mapping': function (errors, minified) { assert.isDefined(minified.sourceMap); }, 'raises no errors': function (errors, _) { assert.isNull(errors); }, 'raises a warning': function (_, minified) { assert.lengthOf(minified.warnings, 1); assert.equal(minified.warnings[0], 'Missing source map at "http://127.0.0.1:24682/remote.css.map" - timeout'); }, teardown: function () { this.server.destroy(); nock.disableNetConnect(); } }, 'absolute source map from external host via http': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div>a{color:blue}/*# sourceMappingURL=http://127.0.0.1/remote.css.map */') .get('/remote.css.map') .reply(200, inputMap); new CleanCSS({ inline: 'all', sourceMap: true }).minify('@import url(http://127.0.0.1/remote.css);', this.callback); }, 'has mapping': function (errors, minified) { assert.isDefined(minified.sourceMap); }, 'maps to external source file': function (errors, minified) { assert.equal(minified.sourceMap._mappings._array[0].source, 'http://127.0.0.1/styles.less'); }, teardown: function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'absolute source map from external host via https': { topic: function () { this.reqMocks = nock('https://127.0.0.1') .get('/remote.css') .reply(200, 'div>a{color:blue}/*# sourceMappingURL=https://127.0.0.1/remote.css.map */') .get('/remote.css.map') .reply(200, inputMap); new CleanCSS({ inline: 'all', sourceMap: true }).minify('@import url(https://127.0.0.1/remote.css);', this.callback); }, 'has mapping': function (errors, minified) { assert.isDefined(minified.sourceMap); }, 'maps to external source file': function (errors, minified) { assert.equal(minified.sourceMap._mappings._array[0].source, 'https://127.0.0.1/styles.less'); }, teardown: function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'relative source map from external host': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div>a{color:blue}/*# sourceMappingURL=remote.css.map */') .get('/remote.css.map') .reply(200, inputMap); new CleanCSS({ inline: 'all', rebase: true, sourceMap: true }).minify('@import url(http://127.0.0.1/remote.css);', this.callback); }, 'has mapping': function (errors, minified) { assert.isDefined(minified.sourceMap); }, 'maps to external source file': function (errors, minified) { assert.equal(minified.sourceMap._mappings._array[0].source, 'http://127.0.0.1/styles.less'); }, teardown: function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'missing source map from external host when source maps are disabled': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .get('/remote.css') .reply(200, 'div>a{color:blue}/*# sourceMappingURL=missing.css.map */'); new CleanCSS({ inline: 'all', sourceMap: false }).minify('@import url(http://127.0.0.1/remote.css);', this.callback); }, 'has no warnings': function (errors, minified) { assert.lengthOf(minified.warnings, 0); }, teardown: function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'available via POST only': { topic: function () { this.reqMocks = nock('http://127.0.0.1') .post('/remote.css') .reply(200, 'div>a{color:blue}/*# sourceMappingURL=remote.css.map */') .post('/remote.css.map') .reply(200, inputMap); new CleanCSS({ inline: 'all', inlineRequest: { method: 'POST' }, rebase: true, sourceMap: true }) .minify('@import url(http://127.0.0.1/remote.css);', this.callback); }, 'has mapping': function (errors, minified) { assert.isDefined(minified.sourceMap); }, 'maps to external source file': function (errors, minified) { assert.equal(minified.sourceMap._mappings._array[0].source, 'http://127.0.0.1/styles.less'); }, teardown: function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } } }) .addBatch({ 'important comment after a property': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('div { color: #f00 !important; /*!comment*/ }'); }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important/*!comment*/}'); } }, 'important comment between properties': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('div { color: #f00 !important; /*!comment*/; display: block }'); }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important;/*!comment*/display:block}'); } }, 'important comments after a property': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('div { color: #f00 !important; /*!1*//*!2*/ }'); }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important/*!1*//*!2*/}'); } }, 'important comments after a property with remove comments': { 'topic': function () { return new CleanCSS({ level: { 1: { specialComments: 1 } }, sourceMap: true }).minify('div { color: #f00 !important; /*!1*/} /*!2*/ a{/*!3*/}'); }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important/*!1*/}'); } } }) .addBatch({ 'multiple source maps': { 'relative to local': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' } }); }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div,section>div a{color:red}div>a{color:#00f}'); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has `div` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: path.join('test', 'fixtures', 'source-maps', 'some.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `section > div a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 4, originalLine: 2, originalColumn: 8, source: path.join('test', 'fixtures', 'source-maps', 'nested/once.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 18, originalLine: 2, originalColumn: 2, source: path.join('test', 'fixtures', 'source-maps', 'some.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 24, originalLine: 2, originalColumn: 2, source: path.join('test', 'fixtures', 'source-maps', 'some.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has `div > a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 28, originalLine: 1, originalColumn: 4, source: path.join('test', 'fixtures', 'source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); }, 'has second `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 34, originalLine: 2, originalColumn: 2, source: path.join('test', 'fixtures', 'source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[5], mapping); }, 'has `#00f` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 40, originalLine: 2, originalColumn: 2, source: path.join('test', 'fixtures', 'source-maps', 'styles.less'), name: null }; assert.deepEqual(minified.sourceMap._mappings._array[6], mapping); } } }, 'relative to path': { 'complex but partial input map referenced by path': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, rebaseTo: './test' }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has right sources': function (minified) { var sources = []; minified.sourceMap._mappings._array.forEach(function (m) { if (sources.indexOf(m.source) === -1) sources.push(m.source); }); assert.deepEqual(sources, [ path.join('fixtures', 'source-maps', 'some.less'), path.join('fixtures', 'source-maps', 'nested', 'once.less'), path.join('fixtures', 'source-maps', 'styles.less') ]); } } } }) .addBatch({ 'inlined sources': { 'from string - off': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('div > a {\n color: red;\n}'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, ['$stdin']); }, 'has embedded sources content': function (minified) { assert.isUndefined(JSON.parse(minified.sourceMap.toString()).sourcesContent); }, 'has selector mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 9, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'from string - on': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true }).minify('div > a {\n color: red;\n}'); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, ['$stdin']); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, ['div > a {\n color: red;\n}']); } }, 'from array - off': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify([ path.join('test', 'fixtures', 'partials', 'one.css'), path.join('test', 'fixtures', 'partials', 'three.css') ]); }, 'has 6 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 6); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'partials', 'one.css'), path.join('test', 'fixtures', 'partials', 'three.css') ]); }, 'has embedded sources content': function (minified) { assert.isUndefined(JSON.parse(minified.sourceMap.toString()).sourcesContent); } }, 'from array - on': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true }).minify([ path.join('test', 'fixtures', 'partials', 'one.css'), path.join('test', 'fixtures', 'partials', 'three.css') ]); }, 'has 6 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 6); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'partials', 'one.css'), path.join('test', 'fixtures', 'partials', 'three.css') ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ '.one { color:#f00; }' + lineBreak, '.three {background-image: url(extra/down.gif);}' + lineBreak ]); } }, 'from array - on remote': { 'topic': function () { this.reqMocks = nock('http://127.0.0.1') .get('/some.css') .reply(200, 'div{background:url(image.png)}'); new CleanCSS({ inline: 'all', sourceMap: true, sourceMapInlineSources: true }).minify([ 'http://127.0.0.1/some.css' ], this.callback); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ 'http://127.0.0.1/some.css' ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div{background:url(image.png)}', ]); }, 'teardown': function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'from hash - off': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'source-maps', 'some.css'), path.join('test', 'fixtures', 'source-maps', 'nested', 'once.css'), path.join('test', 'fixtures', 'source-maps', 'styles.css') ]); }, 'has embedded sources content': function (minified) { assert.isUndefined(JSON.parse(minified.sourceMap.toString()).sourcesContent); } }, 'from hash - on': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'source-maps', 'some.css'), path.join('test', 'fixtures', 'source-maps', 'nested', 'once.css'), path.join('test', 'fixtures', 'source-maps', 'styles.css') ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div {\n color: red;\n}', 'section > div a {\n color: red;\n}', 'div > a {\n color: blue;\n}' ]); } } } }) .addBatch({ 'inlined sources from source map(s)': { 'single': { 'topic': function () { return new CleanCSS({ sourceMap: true, sourceMapInlineSources: true }).minify( 'div > a {\n color: red;\n}', '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css","sourcesContent":["div > a {\\n color: blue;\\n}\\n"]}' ); }, 'has 3 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, ['styles.less']); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, ['div > a {\n color: blue;\n}\n']); }, 'has selector mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }, 'multiple': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css","sourcesContent":["div {\\n color: red;\\n}\\n"]}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css","sourcesContent":["div > a {\\n color: blue;\\n}\\n"]}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css","sourcesContent":["section {\\n > div a {\\n color:red;\\n }\\n}\\n"]}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'source-maps', 'some.less'), path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), path.join('test', 'fixtures', 'source-maps', 'styles.less') ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div {\n color: red;\n}\n', 'section {\n > div a {\n color:red;\n }\n}\n', 'div > a {\n color: blue;\n}\n' ]); } }, 'multiple with map passed as source map object': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: { version:3, sources: ['some.less'], names: [], mappings: 'AAAA;EACE,UAAA', file: 'some.css', sourcesContent: ['div {\n color: red;\n}\n'] } }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: { version:3, sources: ['styles.less'], names: [], mappings: 'AAAA,GAAI;EACF,WAAA', file: 'styles.css', sourcesContent: ['div > a {\n color: blue;\n}\n'] } }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: { version:3, sources: ['once.less'], names: [], mappings: 'AAAA,OACE,MAAM;EACJ,UAAA', file: 'once.css', sourcesContent: ['section {\n > div a {\n color:red;\n }\n}\n'] } } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'source-maps', 'some.less'), path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), path.join('test', 'fixtures', 'source-maps', 'styles.less') ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div {\n color: red;\n}\n', 'section {\n > div a {\n color:red;\n }\n}\n', 'div > a {\n color: blue;\n}\n' ]); } }, 'multiple relative to rebaseTo path': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true, rebase: true, rebaseTo: './test' }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css","sourcesContent":["div {\\n color: red;\\n}\\n"]}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css","sourcesContent":["div > a {\\n color: blue;\\n}\\n"]}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css","sourcesContent":["section {\\n > div a {\\n color:red;\\n }\\n}\\n"]}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('fixtures', 'source-maps', 'some.less'), path.join('fixtures', 'source-maps', 'nested', 'once.less'), path.join('fixtures', 'source-maps', 'styles.less') ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div {\n color: red;\n}\n', 'section {\n > div a {\n color:red;\n }\n}\n', 'div > a {\n color: blue;\n}\n' ]); } }, 'mixed': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css","sourcesContent":["div {\\n color: red;\\n}\\n"]}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css","sourcesContent":["section {\\n > div a {\\n color:red;\\n }\\n}\\n"]}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'source-maps', 'some.less'), path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), path.join('test', 'fixtures', 'source-maps', 'styles.less') ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div {\n color: red;\n}\n', 'section {\n > div a {\n color:red;\n }\n}\n', 'div > a {' + lineBreak + ' color: blue;' + lineBreak + '}' + lineBreak ]); } }, 'mixed without inline sources switch': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify({ 'test/fixtures/source-maps/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css","sourcesContent":["div {\\n color: red;\\n}\\n"]}' }, 'test/fixtures/source-maps/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css","sourcesContent":["section {\\n > div a {\\n color:red;\\n }\\n}\\n"]}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ path.join('test', 'fixtures', 'source-maps', 'some.less'), path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), path.join('test', 'fixtures', 'source-maps', 'styles.less') ]); }, 'has embedded sources content': function (minified) { assert.isUndefined(JSON.parse(minified.sourceMap.toString()).sourcesContent); } }, 'mixed remote': { 'topic': function () { this.reqMocks = nock('http://127.0.0.1') .get('/some.less') .reply(200, 'div {\n color: red;\n}\n') .get('/styles.less') .reply(200, 'div > a {\n color: blue;\n}\n'); new CleanCSS({ inline: 'all', level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'http://127.0.0.1/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' }, 'http://127.0.0.1/other/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["../styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' } }, this.callback); }, 'has 7 mappings': function (errors, minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'has embedded sources': function (errors, minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ 'http://127.0.0.1/some.less', path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), 'http://127.0.0.1/styles.less' ]); }, 'has embedded sources content': function (errors, minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ 'div {\n color: red;\n}\n', 'section {' + lineBreak + ' > div a {' + lineBreak + ' color:red;' + lineBreak + ' }' + lineBreak + '}' + lineBreak, 'div > a {\n color: blue;\n}\n' ]); }, 'teardown': function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'mixed remote and 404 resource': { 'topic': function () { this.reqMocks = nock('http://127.0.0.1') .get('/some.less') .reply(404) .get('/styles.less') .reply(200, 'div > a {\n color: blue;\n}\n'); new CleanCSS({ inline: 'all', level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'http://127.0.0.1/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' }, 'http://127.0.0.1/other/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["../styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' } }, this.callback); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'should warn about some.less': function (minified) { assert.deepEqual(minified.warnings, ['Missing original source at "http://127.0.0.1/some.less" - 404']); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ 'http://127.0.0.1/some.less', path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), 'http://127.0.0.1/styles.less' ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ null, 'section {' + lineBreak + ' > div a {' + lineBreak + ' color:red;' + lineBreak + ' }' + lineBreak + '}' + lineBreak, 'div > a {\n color: blue;\n}\n' ]); }, 'teardown': function () { assert.isTrue(this.reqMocks.isDone()); nock.cleanAll(); } }, 'mixed remote and no callback': { 'topic': function () { return new CleanCSS({ inline: 'all', level: 2, sourceMap: true, sourceMapInlineSources: true }).minify({ 'http://127.0.0.1/some.css': { styles: 'div {\n color: red;\n}', sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' }, 'http://127.0.0.1/other/styles.css': { styles: 'div > a {\n color: blue;\n}', sourceMap: '{"version":3,"sources":["../styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' }, 'test/fixtures/source-maps/nested/once.css': { styles: 'section > div a {\n color: red;\n}', sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' } }); }, 'has 7 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, 'should warn about some.less and styles.less': function (minified) { assert.deepEqual(minified.warnings, [ 'Cannot fetch remote resource from "http://127.0.0.1/some.less" as no callback given.', 'Cannot fetch remote resource from "http://127.0.0.1/styles.less" as no callback given.' ]); }, 'has embedded sources': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sources, [ 'http://127.0.0.1/some.less', path.join('test', 'fixtures', 'source-maps', 'nested', 'once.less'), 'http://127.0.0.1/styles.less' ]); }, 'has embedded sources content': function (minified) { assert.deepEqual(JSON.parse(minified.sourceMap.toString()).sourcesContent, [ null, 'section {' + lineBreak + ' > div a {' + lineBreak + ' color:red;' + lineBreak + ' }' + lineBreak + '}' + lineBreak, null ]); } } } }) .addBatch({ 'level 2 optimizations': { 'new property in restructuring': { 'topic': function () { return new CleanCSS({ level: { 2: { restructureRules: true } }, sourceMap: true }).minify('a{color:#000}div{color:red}.one{display:block}.two{display:inline;color:red}'); }, 'has right output': function (minified) { assert.equal(minified.styles, 'a{color:#000}.two,div{color:red}.one{display:block}.two{display:inline}'); }, 'has 13 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 13); }, 'has a merged `.two` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 13, originalLine: 1, originalColumn: 46, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has a merged `div` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 18, originalLine: 1, originalColumn: 13, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); }, 'has a merged `color` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 22, originalLine: 1, originalColumn: 66, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[5], mapping); }, 'has a merged `red` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 28, originalLine: 1, originalColumn: 72, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[6], mapping); } }, 'overriding': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('a{background:url(image.png);background-color:#eee;background-repeat:repeat-x}'); }, 'has right output': function (minified) { assert.equal(minified.styles, 'a{background:url(image.png) repeat-x #eee}'); }, 'has 5 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 5); }, 'has a `background` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 2, originalLine: 1, originalColumn: 2, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has a `url(image.png)` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 13, originalLine: 1, originalColumn: 13, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has a `repeat-x` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 28, originalLine: 1, originalColumn: 68, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has a `#eee` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 37, originalLine: 1, originalColumn: 45, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); } }, 'shorthand merging': { 'topic': function () { return new CleanCSS({ level: 2, sourceMap: true }).minify('a{margin-top:10px;\nmargin-bottom:4px;\nmargin-left:5px;\nmargin-right:5px}'); }, 'has right output': function (minified) { assert.equal(minified.styles, 'a{margin:10px 5px 4px}'); }, 'has 8 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 8); }, 'has a `a` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has a `margin` -> `margin-top mapping`': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 2, originalLine: 1, originalColumn: 2, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has a `margin` -> `margin-bottom mapping`': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 2, originalLine: 2, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); }, 'has a `margin` -> `margin-left mapping`': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 2, originalLine: 3, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[3], mapping); }, 'has a `margin` -> `margin-right mapping`': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 2, originalLine: 4, originalColumn: 0, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[4], mapping); }, 'has a `10px` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 9, originalLine: 1, originalColumn: 13, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[5], mapping); }, 'has a `5px` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 14, originalLine: 4, originalColumn: 13, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[6], mapping); }, 'has a `4px` mapping': function (minified) { var mapping = { generatedLine: 1, generatedColumn: 18, originalLine: 2, originalColumn: 14, source: '$stdin', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[7], mapping); } } } }) .export(module); function inlineDataUriContext(dataUri) { return { 'topic': function() { return new CleanCSS({sourceMap: true}).minify('div > a {\n color: red;\n}/*# sourceMappingURL=' + dataUri + ' */'); }, 'has 3 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, 'has `div > a` mapping': function(minified) { var mapping = { generatedLine: 1, generatedColumn: 0, originalLine: 1, originalColumn: 4, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[0], mapping); }, 'has `color` mapping': function(minified) { var mapping = { generatedLine: 1, generatedColumn: 6, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[1], mapping); }, 'has second `color` mapping': function(minified) { var mapping = { generatedLine: 1, generatedColumn: 12, originalLine: 2, originalColumn: 2, source: 'styles.less', name: null }; assert.deepEqual(minified.sourceMap._mappings._array[2], mapping); } }; } clean-css-5.3.3/test/test-helper.js 0000664 0000000 0000000 00000001046 14532047255 0017153 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var CleanCSS = require('../lib/clean'); function optimizerContext(group, specs, options) { var context = {}; options = options || {}; function optimized(target) { return function (source) { assert.equal(new CleanCSS(options).minify(source).styles, target); }; } for (var name in specs) { context[group + ' - ' + name] = { topic: specs[name][0], optimized: optimized(specs[name][1]) }; } return context; } module.exports = { optimizerContext: optimizerContext }; clean-css-5.3.3/test/tokenizer/ 0000775 0000000 0000000 00000000000 14532047255 0016372 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/tokenizer/tokenize-test.js 0000664 0000000 0000000 00000323105 14532047255 0021541 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var tokenize = require('../../lib/tokenizer/tokenize'); var inputSourceMapTracker = require('../../lib/reader/input-source-map-tracker'); var fs = require('fs'); var path = require('path'); var inputMapPath = path.join('test', 'fixtures', 'source-maps', 'styles.css.map'); var inputMap = fs.readFileSync(inputMapPath, 'utf-8'); function tokenizerContext(group, specs) { var ctx = {}; function tokenizedContext(target) { return function (tokenized) { assert.deepEqual(tokenized, target); }; } function toTokens(source) { return function () { return tokenize(source, { inputSourceMapTracker: inputSourceMapTracker(), options: {}, warnings: [] }); }; } for (var test in specs) { var target = specs[test][1]; ctx[group + ' ' + test] = { topic: toTokens(specs[test][0]), tokenized: tokenizedContext(target) }; } return ctx; } vows.describe(tokenize) .addBatch( tokenizerContext('basic', { 'no content': [ '', [] ], 'a comment': [ '/* comment */', [ [ 'comment', '/* comment */', [ [1, 0, undefined] ] ] ] ], 'a comment followed by a break': [ '/* comment */\n', [ [ 'comment', '/* comment */', [ [1, 0, undefined] ] ] ] ], 'a comment with forward slash as first character': [ '/*/ comment */', [ [ 'comment', '/*/ comment */', [ [1, 0, undefined] ] ] ] ], 'a rule between two comments': [ '/* comment 1 */*/* comment 2 */{}', [ [ 'comment', '/* comment 1 */', [ [1, 0, undefined] ] ], [ 'comment', '/* comment 2 */', [ [1, 16, undefined] ] ], [ 'rule', [ [ 'rule-scope', '*', [ [1, 15, undefined] ] ] ], [] ] ] ], 'an empty rule': [ 'a{}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [] ] ] ], 'a comment with breaks followed by an empty rule': [ '/* comment \n\n */a{}', [ [ 'comment', '/* comment \n\n */', [ [1, 0, undefined] ] ], [ 'rule', [ [ 'rule-scope', 'a', [ [3, 3, undefined] ] ] ], [] ] ] ], 'an empty rule with whitespace': [ 'a{ \n }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [] ] ] ], 'a rule with a property': [ 'a{color:red}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 8, undefined] ] ] ] ] ] ] ], 'a rule with a multi value property': [ 'a{margin:0px 2px 1px}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'margin', [ [1, 2, undefined] ] ], [ 'property-value', '0px', [ [1, 9, undefined] ] ], [ 'property-value', '2px', [ [1, 13, undefined] ] ], [ 'property-value', '1px', [ [1, 17, undefined] ] ] ] ] ] ] ], 'a rule with a filter property': [ 'a{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'filter', [ [1, 2, undefined] ] ], [ 'property-value', 'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)', [ [1, 9, undefined] ] ] ] ] ] ] ], 'a rule with whitespace': [ 'a {color:red;\n\ndisplay :\r\n block }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 3, undefined] ] ], [ 'property-value', 'red', [ [1, 9, undefined] ] ] ], [ 'property', [ 'property-name', 'display', [ [3, 0, undefined] ] ], [ 'property-value', 'block', [ [4, 2, undefined] ] ] ] ] ] ] ], 'a rule with suffix whitespace': [ 'div a{color:red\r\n}', [ [ 'rule', [ [ 'rule-scope', 'div a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 6, undefined] ] ], [ 'property-value', 'red', [ [1, 12, undefined] ] ] ] ] ] ] ], 'a rule with whitespace in functions': [ 'a{color:rgba( 255, 255, 0, 0.5 )}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'rgba( 255, 255, 0, 0.5 )', [ [1, 8, undefined] ] ] ] ] ] ] ], 'a rule with functions and no whitespace breaks': [ 'a{background:rgba(255,255,0,0.5)url(test.png)repeat no-repeat}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'rgba(255,255,0,0.5)', [ [1, 13, undefined] ] ], [ 'property-value', 'url(test.png)', [ [1, 32, undefined] ] ], [ 'property-value', 'repeat', [ [1, 45, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 52, undefined] ] ] ] ] ] ] ], 'a rule with url and no whitespace breaks': [ 'a{background:url(image.png)50px/25%}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'url(image.png)', [ [1, 13, undefined] ] ], [ 'property-value', '50px', [ [1, 27, undefined] ] ], [ 'property-value', '/', [ [1, 31, undefined] ] ], [ 'property-value', '25%', [ [1, 32, undefined] ] ] ] ] ] ] ], 'a rule with grid repeat': [ '.block{-ms-grid-columns:( 1fr )[5]}', [ [ 'rule', [ [ 'rule-scope', '.block', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '-ms-grid-columns', [ [1, 7, undefined] ] ], [ 'property-value', '( 1fr )[5]', [ [1, 24, undefined] ] ] ] ] ] ] ], 'a rule with two properties where first ends with a round close bracket': [ 'a{width:calc(100% - 25px);width:50rem}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'width', [ [1, 2, undefined] ] ], [ 'property-value', 'calc(100% - 25px)', [ [1, 8, undefined] ] ] ], [ 'property', [ 'property-name', 'width', [ [1, 26, undefined] ] ], [ 'property-value', '50rem', [ [1, 32, undefined] ] ] ] ] ] ] ], 'a rule with empty properties': [ 'a{color:red; ; ; ;}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 8, undefined] ] ] ] ] ] ] ], 'a rule with quoted attribute': [ 'a[data-kind="one two"]{color:red}', [ [ 'rule', [ [ 'rule-scope', 'a[data-kind="one two"]', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 23, undefined] ] ], [ 'property-value', 'red', [ [1, 29, undefined] ] ] ] ] ] ] ], 'a rule with escaped quote': [ '.this-class\\\'s-got-an-apostrophe{color:red}', [ [ 'rule', [ [ 'rule-scope', '.this-class\\\'s-got-an-apostrophe', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 33, undefined] ] ], [ 'property-value', 'red', [ [1, 39, undefined] ] ] ] ] ] ] ], 'a rule with escaped backslash in content 12345': [ '.block{content:"\\\\";}', [ [ 'rule', [ [ 'rule-scope', '.block', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'content', [ [1, 7, undefined] ] ], [ 'property-value', '"\\\\"', [ [1, 15, undefined] ] ] ] ] ] ] ], 'a rule with quoted comment': [ 'a{background:url(\'/* this is silly */\')}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'url(\'/* this is silly */\')', [ [1, 13, undefined] ] ] ] ] ] ] ], 'a rule with quote and comments inside quote': [ 'a{content:\'"abc /* 1 */"\'}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'content', [ [1, 2, undefined] ] ], [ 'property-value', '\'"abc /* 1 */"\'', [ [1, 10, undefined] ] ] ] ] ] ] ], 'a double rule': [ 'a,\n\ndiv.class > p {color:red}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ], [ 'rule-scope', 'div.class > p', [ [3, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [3, 15, undefined] ] ], [ 'property-value', 'red', [ [3, 21, undefined] ] ] ] ] ] ] ], 'a triple rule': [ 'b,a,div{}', [ [ 'rule', [ [ 'rule-scope', 'b', [ [1, 0, undefined] ] ], [ 'rule-scope', 'a', [ [1, 2, undefined] ] ], [ 'rule-scope', 'div', [ [1, 4, undefined] ] ] ], [] ] ] ], 'two rules': [ 'a{color:red}\n div{color:blue}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 8, undefined] ] ] ] ] ], [ 'rule', [ [ 'rule-scope', 'div', [ [2, 1, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [2, 5, undefined] ] ], [ 'property-value', 'blue', [ [2, 11, undefined] ] ] ] ] ] ] ], 'two comments and a rule separated by newline': [ '/* comment 1 */\n/* comment 2 */\ndiv{}', [ [ 'comment', '/* comment 1 */', [ [1, 0, undefined] ] ], [ 'comment', '/* comment 2 */', [ [2, 0, undefined] ] ], [ 'rule', [ [ 'rule-scope', 'div', [ [3, 0, undefined] ] ] ], [] ] ] ], 'two comments one inside another and two rules': [ '.block-1{color:red;/* comment 1 /* comment 2 */ */}.block-2{color:blue}', [ [ 'rule', [ [ 'rule-scope', '.block-1', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 9, undefined] ] ], [ 'property-value', 'red', [ [1, 15, undefined] ] ] ], [ 'comment', '/* comment 1 /* comment 2 */', [ [1, 19, undefined] ] ] ] ], [ 'rule', [ [ 'rule-scope', '.block-2', [ [1, 51, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 60, undefined] ] ], [ 'property-value', 'blue', [ [1, 66, undefined] ] ] ] ] ] ] ], 'comment as a first thing in a rule with two dashes': [ '.block--modifier{/* Comment */color:red}', [ [ 'rule', [ [ 'rule-scope', '.block--modifier', [ [1, 0, undefined] ] ] ], [ [ 'comment', '/* Comment */', [ [1, 17, undefined] ] ], [ 'property', [ 'property-name', 'color', [ [1, 30, undefined] ] ], [ 'property-value', 'red', [ [1, 36, undefined] ] ] ] ] ] ] ], 'rule wrapped between comments': [ '/* comment 1 */div/* comment 2 */{color:red}', [ [ 'comment', '/* comment 1 */', [ [1, 0, undefined] ] ], [ 'comment', '/* comment 2 */', [ [1, 18, undefined] ] ], [ 'rule', [ [ 'rule-scope', 'div', [ [1, 15, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 34, undefined] ] ], [ 'property-value', 'red', [ [1, 40, undefined] ] ] ] ] ] ] ], 'rule wrapped between ignore comments': [ '.block-1 { color: red }\n/* clean-css ignore:start */\n .block-2 { color: transparent } \n/* clean-css ignore:end */\n.block-3 { color: red }', [ [ 'rule', [ [ 'rule-scope', '.block-1', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 11, undefined] ] ], [ 'property-value', 'red', [ [1, 18, undefined] ] ] ] ] ], [ 'comment', '/* clean-css ignore:start */', [ [2, 0, undefined] ] ], [ 'raw', '\n .block-2 { color: transparent } \n', [ [2, 28, undefined] ] ], [ 'comment', '/* clean-css ignore:end */', [ [4, 0, undefined] ] ], [ 'rule', [ [ 'rule-scope', '.block-3', [ [5, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [5, 11, undefined] ] ], [ 'property-value', 'red', [ [5, 18, undefined] ] ] ] ] ] ] ], 'two properties wrapped between comments': [ 'div{/* comment 1 */color:red/* comment 2 */}', [ [ 'rule', [ [ 'rule-scope', 'div', [ [1, 0, undefined] ] ] ], [ [ 'comment', '/* comment 1 */', [ [1, 4, undefined] ] ], [ 'property', [ 'property-name', 'color', [ [1, 19, undefined] ] ], [ 'property-value', 'red', [ [1, 25, undefined] ] ] ], [ 'comment', '/* comment 2 */', [ [1, 28, undefined] ] ] ] ] ] ], 'multiple values wrapped between comments #1': [ 'div{background:url(image.png),/* comment */red}', [ [ 'rule', [ [ 'rule-scope', 'div', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 4, undefined] ] ], [ 'property-value', 'url(image.png)', [ [1, 15, undefined] ] ], [ 'property-value', ',', [ [1, 29, undefined] ] ], [ 'property-value', 'red', [ [1, 43, undefined] ] ] ], [ 'comment', '/* comment */', [ [1, 30, undefined] ] ] ] ] ] ], 'multiple values wrapped between comments #2': [ 'div{background:url(image.png),red/* comment */}', [ [ 'rule', [ [ 'rule-scope', 'div', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 4, undefined] ] ], [ 'property-value', 'url(image.png)', [ [1, 15, undefined] ] ], [ 'property-value', ',', [ [1, 29, undefined] ] ], [ 'property-value', 'red', [ [1, 30, undefined] ] ] ], [ 'comment', '/* comment */', [ [1, 33, undefined] ] ] ] ] ] ], 'multiple values wrapped between comments #3': [ 'div{background:url(image.png),rgba(0,0,0,/* comment */0.1)}', [ [ 'rule', [ [ 'rule-scope', 'div', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 4, undefined] ] ], [ 'property-value', 'url(image.png)', [ [1, 15, undefined] ] ], [ 'property-value', ',', [ [1, 29, undefined] ] ], [ 'property-value', 'rgba(0,0,0,0.1)', [ [1, 30, undefined] ] ] ], [ 'comment', '/* comment */', [ [1, 41, undefined] ] ] ] ] ] ], 'pseudorules': [ 'div:nth-child(2n):not(.test){color:red}', [ [ 'rule', [ [ 'rule-scope', 'div:nth-child(2n):not(.test)', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 29, undefined] ] ], [ 'property-value', 'red', [ [1, 35, undefined] ] ] ] ] ] ] ], '! important': [ 'a{color:red! important}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red!', [ [1, 8, undefined] ] ], [ 'property-value', 'important', [ [1, 13, undefined] ] ] ] ] ] ] ], ' !important': [ 'a{color:red !important}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 8, undefined] ] ], [ 'property-value', '!important', [ [1, 12, undefined] ] ] ] ] ] ] ], ' ! important': [ 'a{color:red ! important}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 8, undefined] ] ], [ 'property-value', '!', [ [1, 12, undefined] ] ], [ 'property-value', 'important', [ [1, 14, undefined] ] ] ] ] ] ] ], '@apply': [ 'a{@apply(--rule);color:red}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'at-rule', '@apply(--rule)', [ [1, 2, undefined] ] ], [ 'property', [ 'property-name', 'color', [ [1, 17, undefined] ] ], [ 'property-value', 'red', [ [1, 23, undefined] ] ] ] ] ] ] ], '@apply with whitespace and no semicolon': [ 'a{ @apply(--rule) }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'at-rule', '@apply(--rule)', [ [1, 4, undefined] ] ] ] ] ] ], '@apply - between properties': [ 'a{display:block;@apply(--rule);color:red}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'display', [ [1, 2, undefined] ] ], [ 'property-value', 'block', [ [1, 10, undefined] ] ] ], [ 'at-rule', '@apply(--rule)', [ [1, 16, undefined] ] ], [ 'property', [ 'property-name', 'color', [ [1, 31, undefined] ] ], [ 'property-value', 'red', [ [1, 37, undefined] ] ] ] ] ] ] ], '@apply within a variable': [ ':root{--layout-horizontal:{@apply(--layout)};}', [ [ 'rule', [ [ 'rule-scope', ':root', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--layout-horizontal', [ [1, 6, undefined] ] ], [ 'property-block', [ [ 'at-rule', '@apply(--layout)', [ [1, 27, undefined] ] ] ] ] ] ] ] ] ], '@apply within a variable before properties': [ ':root{--layout-horizontal:{@apply(--layout);color:red;display:block};}', [ [ 'rule', [ [ 'rule-scope', ':root', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--layout-horizontal', [ [1, 6, undefined] ] ], [ 'property-block', [ [ 'at-rule', '@apply(--layout)', [ [1, 27, undefined] ] ], [ 'property', [ 'property-name', 'color', [ [1, 44, undefined] ] ], [ 'property-value', 'red', [ [1, 50, undefined] ] ] ], [ 'property', [ 'property-name', 'display', [ [1, 54, undefined] ] ], [ 'property-value', 'block', [ [1, 62, undefined] ] ] ] ] ] ] ] ] ] ], '@apply in a new rule after variable is last in previous one 1234': [ '.block-1{fill:var(--test1)}.block-2{@apply(--test2)}', [ [ 'rule', [ [ 'rule-scope', '.block-1', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'fill', [ [1, 9, undefined] ] ], [ 'property-value', 'var(--test1)', [ [1, 14, undefined] ] ] ] ] ], [ 'rule', [ [ 'rule-scope', '.block-2', [ [1, 27, undefined] ] ] ], [ [ 'at-rule', '@apply(--test2)', [ [1, 36, undefined] ] ] ] ] ] ], '@apply after a function': [ '.block{color:rgb(0,0,0);@apply(--test)}', [ [ 'rule', [ [ 'rule-scope', '.block', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 7, undefined] ] ], [ 'property-value', 'rgb(0,0,0)', [ [1, 13, undefined] ] ] ], [ 'at-rule', '@apply(--test)', [ [1, 24, undefined] ] ] ] ] ] ], '@page named rule': [ '@page one{margin:10px}', [ [ 'at-rule-block', [ [ 'at-rule-block-scope', '@page one', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'margin', [ [1, 10, undefined] ] ], [ 'property-value', '10px', [ [1, 17, undefined] ] ] ] ] ] ] ], '@page named rule with page-margin box': [ '@page :first{margin:10px;@top-center{content:"Page One"}padding:5px}', [ [ 'at-rule-block', [ [ 'at-rule-block-scope', '@page :first', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'margin', [ [1, 13, undefined] ] ], [ 'property-value', '10px', [ [1, 20, undefined] ] ] ], [ 'at-rule-block', [ [ 'at-rule-block-scope', '@top-center', [ [1, 25, undefined] ] ] ], [ [ 'property', [ 'property-name', 'content', [ [1, 37, undefined] ] ], [ 'property-value', '"Page One"', [ [1, 45, undefined] ] ] ] ] ], [ 'property', [ 'property-name', 'padding', [ [1, 56, undefined] ] ], [ 'property-value', '5px', [ [1, 64, undefined] ] ] ] ] ] ] ], 'media query': [ '@media (min-width:980px){}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media (min-width:980px)', [ [1, 0, undefined] ] ] ], [] ] ] ], 'media query without space abc': [ '@media(min-width:980px){.block{color:red}}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media(min-width:980px)', [ [1, 0, undefined] ] ] ], [ [ 'rule', [ [ 'rule-scope', '.block', [ [1, 24, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 31, undefined] ] ], [ 'property-value', 'red', [ [1, 37, undefined] ] ] ] ] ] ] ] ] ], 'multiple media query': [ '@media print,(min-width:980px){a{color:red}}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media print', [ [1, 0, undefined] ] ], [ 'nested-block-scope', '(min-width:980px)', [ [1, 13, undefined] ] ] ], [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 31, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 33, undefined] ] ], [ 'property-value', 'red', [ [1, 39, undefined] ] ] ] ] ] ] ] ] ], 'media query surrounded by rules': [ 'a{color:red}@media (min-width:980px){}p{color:blue}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 8, undefined] ] ] ] ] ], [ 'nested-block', [ [ 'nested-block-scope', '@media (min-width:980px)', [ [1, 12, undefined] ] ] ], [] ], [ 'rule', [ [ 'rule-scope', 'p', [ [1, 38, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 40, undefined] ] ], [ 'property-value', 'blue', [ [1, 46, undefined] ] ] ] ] ] ] ], 'media query with rules': [ '@media (min-width:980px){a{color:red}}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media (min-width:980px)', [ [1, 0, undefined] ] ] ], [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 25, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 27, undefined] ] ], [ 'property-value', 'red', [ [1, 33, undefined] ] ] ] ] ] ] ] ] ], 'nested media query': [ '@media only screen and (max-width:1319px){\n@media print {\na{color:#000}\n}\na{color:red}}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media only screen and (max-width:1319px)', [ [1, 0, undefined] ] ] ], [ [ 'nested-block', [ [ 'nested-block-scope', '@media print', [ [2, 0, undefined] ] ] ], [ [ 'rule', [ [ 'rule-scope', 'a', [ [3, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [3, 2, undefined] ] ], [ 'property-value', '#000', [ [3, 8, undefined] ] ] ] ] ] ] ], [ 'rule', [ [ 'rule-scope', 'a', [ [5, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [5, 2, undefined] ] ], [ 'property-value', 'red', [ [5, 8, undefined] ] ] ] ] ] ] ] ] ], '@media with whitespace': [ '@media ( min-width:980px ){ }p{color:red}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media ( min-width:980px )', [ [1, 0, undefined] ] ] ], [] ], [ 'rule', [ [ 'rule-scope', 'p', [ [1, 29, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 31, undefined] ] ], [ 'property-value', 'red', [ [1, 37, undefined] ] ] ] ] ] ] ], 'between blocks': [ '@media (min-width:980px){}/*! comment */@media screen{}', [ [ 'nested-block', [ [ 'nested-block-scope', '@media (min-width:980px)', [ [1, 0, undefined] ] ] ], [] ], [ 'comment', '/*! comment */', [ [1, 26, undefined] ] ], [ 'nested-block', [ [ 'nested-block-scope', '@media screen', [ [1, 40, undefined] ] ] ], [] ] ] ], 'in blocks': [ '@media (/* comment \n */min-width:980px){a{color:red}}', [ [ 'comment', '/* comment \n */', [ [1, 8, undefined] ] ], [ 'nested-block', [ [ 'nested-block-scope', '@media (min-width:980px)', [ [1, 0, undefined] ] ] ], [ [ 'rule', [ [ 'rule-scope', 'a', [ [2, 20, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [2, 22, undefined] ] ], [ 'property-value', 'red', [ [2, 28, undefined] ] ] ] ] ] ] ] ] ], 'font-face': [ '@font-face{font-family: "Helvetica Neue";font-size:12px}', [ [ 'at-rule-block', [ [ 'at-rule-block-scope', '@font-face', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'font-family', [ [1, 11, undefined] ] ], [ 'property-value', '"Helvetica Neue"', [ [1, 24, undefined] ] ] ], [ 'property', [ 'property-name', 'font-size', [ [1, 41, undefined] ] ], [ 'property-value', '12px', [ [1, 51, undefined] ] ] ] ] ] ] ], 'charset': [ '@charset \'utf-8\';a{color:red}', [ [ 'at-rule', '@charset \'utf-8\'', [ [1, 0, undefined] ] ], [ 'rule', [ [ 'rule-scope', 'a', [ [1, 17, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 19, undefined] ] ], [ 'property-value', 'red', [ [1, 25, undefined] ] ] ] ] ] ] ], 'charset after a line break': [ '\n@charset \n\'utf-8\';', [ [ 'at-rule', '@charset \n\'utf-8\'', [ [2, 0, undefined] ] ] ] ], 'charset after a carriage return': [ '\r@charset \n\'utf-8\';', [ [ 'at-rule', '@charset \n\'utf-8\'', [ [2, 0, undefined] ] ] ] ], '@import': [ 'a{}@import \n"test.css";\n\na{color:red}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [] ], [ 'at-rule', '@import \n"test.css"', [ [1, 3, undefined] ] ], [ 'rule', [ [ 'rule-scope', 'a', [ [4, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [4, 2, undefined] ] ], [ 'property-value', 'red', [ [4, 8, undefined] ] ] ] ] ] ] ], '@import with round braces': [ '@import url(http://fonts.googleapis.com/css?family=Lora:400,700);', [ [ 'at-rule', '@import url(http://fonts.googleapis.com/css?family=Lora:400,700)', [[1, 0, undefined]] ] ] ], '@import with media': [ '@import "test.css" screen, tv, print;', [ [ 'at-rule', '@import "test.css" screen, tv, print', [[1, 0, undefined]] ] ] ], 'keyframes with quoted name': [ '@keyframes "test"{0%{color:red}}', [ [ 'nested-block', [ [ 'nested-block-scope', '@keyframes "test"', [ [1, 0, undefined] ] ] ], [ [ 'rule', [ [ 'rule-scope', '0%', [ [1, 18, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 21, undefined] ] ], [ 'property-value', 'red', [ [1, 27, undefined] ] ] ] ] ] ] ] ] ], 'variables': [ 'a{border:var(--width)var(--style)var(--color)}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'border', [ [1, 2, undefined] ] ], [ 'property-value', 'var(--width)', [ [1, 9, undefined] ] ], [ 'property-value', 'var(--style)', [ [1, 21, undefined] ] ], [ 'property-value', 'var(--color)', [ [1, 33, undefined] ] ] ] ] ] ] ], 'variable declarations': [ ':root{--color:var(--otherColor)}', [ [ 'rule', [ [ 'rule-scope', ':root', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--color', [ [1, 6, undefined] ] ], [ 'property-value', 'var(--otherColor)', [ [1, 14, undefined] ] ] ] ] ] ] ], 'multiple variable blocks': [ 'div{--test1:{color:red};--test2:{color:blue};}', [ [ 'rule', [ [ 'rule-scope', 'div', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test1', [ [1, 4, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'color', [ [1, 13, undefined] ] ], [ 'property-value', 'red', [ [1, 19, undefined] ] ] ] ] ] ], [ 'property', [ 'property-name', '--test2', [ [1, 24, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'color', [ [1, 33, undefined] ] ], [ 'property-value', 'blue', [ [1, 39, undefined] ] ] ] ] ] ] ] ] ] ], 'variable block with trailing whitespace': [ 'a{--test:{color:#f00 };color:blue}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test', [ [1, 2, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'color', [ [1, 10, undefined] ] ], [ 'property-value', '#f00', [ [1, 16, undefined] ] ] ] ] ] ], [ 'property', [ 'property-name', 'color', [ [1, 23, undefined] ] ], [ 'property-value', 'blue', [ [1, 29, undefined] ] ] ] ] ] ] ], 'variable declaration with whitespace as value': [ 'a{--test: }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test', [ [1, 2, undefined] ] ], [ 'property-value', ' ', [ [1, 10, undefined] ] ] ] ] ] ] ], 'variable declaration with multiple whitespace as value': [ 'a{--test: }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test', [ [1, 2, undefined] ] ], [ 'property-value', ' ', [ [1, 12, undefined] ] ] ] ] ] ] ], 'variable declaration with whitespace as value and semicolon': [ 'a{--test: ;}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test', [ [1, 2, undefined] ] ], [ 'property-value', ' ', [ [1, 10, undefined] ] ] ] ] ] ] ], 'multiple variable declarations with whitespace as value': [ 'a{--test1: ;--test2: }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test1', [ [1, 2, undefined] ] ], [ 'property-value', ' ', [ [1, 11, undefined] ] ] ], [ 'property', [ 'property-name', '--test2', [ [1, 12, undefined] ] ], [ 'property-value', ' ', [ [1, 21, undefined] ] ] ] ] ] ] ], 'variables with comments inside them 123456': [ 'a{--test:var(--x,/*!*/ /*!*/);}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test', [ [1, 2, undefined] ] ], [ 'property-value', 'var(--x,/*!*/ /*!*/)', [ [1, 9, undefined] ] ] ] ] ] ] ], 'variable declarations with comments inside them 2': [ 'a{--test1:1;/*!*/--test2:2;/*!*/--test3:3;}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--test1', [ [1, 2, undefined] ] ], [ 'property-value', '1', [ [1, 10, undefined] ] ] ], [ 'comment', '/*!*/', [ [ 1, 12, undefined ] ] ], [ 'property', [ 'property-name', '--test2', [ [ 1, 17, undefined ] ] ], [ 'property-value', '2', [ [ 1, 25, undefined ] ] ] ], [ 'comment', '/*!*/', [ [ 1, 27, undefined ] ] ], [ 'property', [ 'property-name', '--test3', [ [ 1, 32, undefined ] ] ], [ 'property-value', '3', [ [ 1, 40, undefined ] ] ] ] ] ] ] ], '_:-ms-lang flat block': [ '_:-ms-lang(x),@-ms-viewport{color:red}', [ [ 'at-rule-block', [ [ 'at-rule-block-scope', '_:-ms-lang(x)', [ [1, 0, undefined] ] ], [ 'at-rule-block-scope', '@-ms-viewport', [ [1, 14, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 28, undefined] ] ], [ 'property-value', 'red', [ [1, 34, undefined] ] ] ] ] ] ] ] }) ) .addBatch( tokenizerContext('Polymer mixins', { 'flat value': [ 'a{--my-toolbar-color:red}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--my-toolbar-color', [ [1, 2, undefined] ] ], [ 'property-value', 'red', [ [1, 21, undefined] ] ] ] ] ] ] ], 'block value': [ 'a{--my-toolbar:{color:red;width:100%}}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', '--my-toolbar', [ [1, 2, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'color', [ [1, 16, undefined] ] ], [ 'property-value', 'red', [ [1, 22, undefined] ] ] ], [ 'property', [ 'property-name', 'width', [ [1, 26, undefined] ] ], [ 'property-value', '100%', [ [1, 32, undefined] ] ] ] ] ] ] ] ] ] ], 'mixed block value': [ 'a{display:block;--my-toolbar:{color:red;width:100%};color:blue}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'display', [ [1, 2, undefined] ] ], [ 'property-value', 'block', [ [1, 10, undefined] ] ] ], [ 'property', [ 'property-name', '--my-toolbar', [ [1, 16, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'color', [ [1, 30, undefined] ] ], [ 'property-value', 'red', [ [1, 36, undefined] ] ] ], [ 'property', [ 'property-name', 'width', [ [1, 40, undefined] ] ], [ 'property-value', '100%', [ [1, 46, undefined] ] ] ] ] ] ], [ 'property', [ 'property-name', 'color', [ [1, 52, undefined] ] ], [ 'property-value', 'blue', [ [1, 58, undefined] ] ] ] ] ] ] ], 'mixed block value with trailing block semicolon 123': [ 'a{display:block;--my-toolbar:{color:red;width:100%;};color:blue}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'display', [ [1, 2, undefined] ] ], [ 'property-value', 'block', [ [1, 10, undefined] ] ] ], [ 'property', [ 'property-name', '--my-toolbar', [ [1, 16, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'color', [ [1, 30, undefined] ] ], [ 'property-value', 'red', [ [1, 36, undefined] ] ] ], [ 'property', [ 'property-name', 'width', [ [1, 40, undefined] ] ], [ 'property-value', '100%', [ [1, 46, undefined] ] ] ] ] ] ], [ 'property', [ 'property-name', 'color', [ [1, 53, undefined] ] ], [ 'property-value', 'blue', [ [1, 59, undefined] ] ] ] ] ] ] ] }) ) .addBatch( tokenizerContext('multiple values', { 'comma - no spaces': [ 'a{background:no-repeat,no-repeat}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 13, undefined] ] ], [ 'property-value', ',', [ [1, 22, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 23, undefined] ] ] ] ] ] ] ], 'comma - one space': [ 'a{background:no-repeat, no-repeat}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 13, undefined] ] ], [ 'property-value', ',', [ [1, 22, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 24, undefined] ] ] ] ] ] ] ], 'comma - two spaces': [ 'a{background:no-repeat , no-repeat}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 13, undefined] ] ], [ 'property-value', ',', [ [1, 23, undefined] ] ], [ 'property-value', 'no-repeat', [ [1, 25, undefined] ] ] ] ] ] ] ], 'comma - inside function': [ 'a{background:rgba(0,0,0,0)}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'background', [ [1, 2, undefined] ] ], [ 'property-value', 'rgba(0,0,0,0)', [ [1, 13, undefined] ] ] ] ] ] ] ], 'forward slash - no spaces': [ 'a{border-radius:5px/4px}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'border-radius', [ [1, 2, undefined] ] ], [ 'property-value', '5px', [ [1, 16, undefined] ] ], [ 'property-value', '/', [ [1, 19, undefined] ] ], [ 'property-value', '4px', [ [1, 20, undefined] ] ] ] ] ] ] ], 'forward slash - one space': [ 'a{border-radius:5px /4px}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'border-radius', [ [1, 2, undefined] ] ], [ 'property-value', '5px', [ [1, 16, undefined] ] ], [ 'property-value', '/', [ [1, 20, undefined] ] ], [ 'property-value', '4px', [ [1, 21, undefined] ] ] ] ] ] ] ], 'forward slash - two spaces': [ 'a{border-radius:5px / 4px}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'border-radius', [ [1, 2, undefined] ] ], [ 'property-value', '5px', [ [1, 16, undefined] ] ], [ 'property-value', '/', [ [1, 20, undefined] ] ], [ 'property-value', '4px', [ [1, 22, undefined] ] ] ] ] ] ] ], 'forward slash - inside function': [ 'a{width:calc(5px/4px)}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'width', [ [1, 2, undefined] ] ], [ 'property-value', 'calc(5px/4px)', [ [1, 8, undefined] ] ] ] ] ] ] ], 'forward slash and closing round brace inside function': [ 'a{width:calc((10rem - 2px) / 2 + 10em)}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'width', [ [1, 2, undefined] ] ], [ 'property-value', 'calc((10rem - 2px) / 2 + 10em)', [ [1, 8, undefined] ] ] ] ] ] ] ], 'quotes inside function': [ 'a{width:expression(this.parentNode.innerText == ")" ? "5px" : "10px")}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'width', [ [1, 2, undefined] ] ], [ 'property-value', 'expression(this.parentNode.innerText == ")" ? "5px" : "10px")', [ [1, 8, undefined] ] ] ] ] ] ] ], 'curly braces inside function': [ 'a{zoom:expression(function (el){el.style.zoom="1"}(this))}', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'zoom', [ [1, 2, undefined] ] ], [ 'property-value', 'expression(function (el){el.style.zoom="1"}(this))', [ [1, 7, undefined] ] ] ] ] ] ] ] }) ) .addBatch( tokenizerContext('broken', { 'missing end brace': [ 'a{display:block', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'display', [ [1, 2, undefined] ] ], [ 'property-value', 'block', [ [1, 10, undefined] ] ] ] ] ] ] ], 'missing closing bracket': [ 'a{width:expression(this.parentNode.innerText == }', [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'width', [ [1, 2, undefined] ] ], [ 'property-value', 'expression(this.parentNode.innerText ==', [ [1, 8, undefined] ] ] ] ] ] ] ], 'missing end brace in the middle': [ 'body{color:red;a{color:blue;}', [ [ 'rule', [ [ 'rule-scope', 'body', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 5, undefined] ] ], [ 'property-value', 'red', [ [1, 11, undefined] ] ] ], [ 'property', [ 'property-name', 'a{color', [ [1, 15, undefined] ] ], [ 'property-value', 'blue', [ [1, 23, undefined] ] ] ] ] ] ] ], 'missing end brace and semicolon in the middle': [ 'body{color:red a{color:blue;}', [ [ 'rule', [ [ 'rule-scope', 'body', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 5, undefined] ] ], [ 'property-value', 'red', [ [1, 11, undefined] ] ], [ 'property-block', [ [ 'property', [ 'property-name', 'acolor', [ [1, 15, undefined] ] ], [ 'property-value', 'blue', [ [1, 23, undefined] ] ] ] ] ] ] ] ] ] ], 'extra end brace in the middle': [ 'body{color:red}}a{color:blue;}', [ [ 'rule', [ [ 'rule-scope', 'body', [ [1, 0, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 5, undefined] ] ], [ 'property-value', 'red', [ [1, 11, undefined] ] ] ] ] ], [ 'rule', [ [ 'rule-scope', '}a', [ [1, 15, undefined] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 18, undefined] ] ], [ 'property-value', 'blue', [ [1, 24, undefined] ] ] ] ] ] ] ], 'unexpected semicolon at root level': [ 'body;{body}', [ [ 'rule', [ [ 'rule-scope', 'body;', [ [1, 0, undefined] ] ] ], [] ] ] ] }) ) .addBatch({ 'warnings': { 'topic': function () { var warnings = []; tokenize('a{display:block', { inputSourceMapTracker: inputSourceMapTracker(), options: {}, source: 'one.css', warnings: warnings }); return warnings; }, 'logs them correctly': function (warnings) { assert.deepEqual(warnings, ['Missing \'}\' at one.css:1:15.']); } }, 'warnings - extra characters': { 'topic': function () { var warnings = []; tokenize('', { inputSourceMapTracker: inputSourceMapTracker(), options: {}, source: 'one.css', warnings: warnings }); return warnings; }, 'logs them correctly': function (warnings) { assert.deepEqual(warnings, ['Invalid character(s) \']]>\' at one.css:1:28. Ignoring.']); } } }) .addBatch({ 'sources - rule with properties': { 'topic': function () { return tokenize('a{color:red}', { inputSourceMapTracker: inputSourceMapTracker(), options: {}, source: 'one.css', warnings: [] }); }, 'sets source correctly': function (tokens) { assert.deepEqual(tokens, [ [ 'rule', [ [ 'rule-scope', 'a', [ [1, 0, 'one.css'] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [1, 2, 'one.css'] ] ], [ 'property-value', 'red', [ [1, 8, 'one.css'] ] ] ] ] ] ]); } } }) .addBatch({ 'input source maps - simple': { 'topic': function () { var sourceMapTracker = inputSourceMapTracker(); sourceMapTracker.track('styles.css', inputMap); return tokenize('div > a {\n color: red;\n}', { source: 'styles.css', inputSourceMapTracker: sourceMapTracker, options: {}, warnings: [] }); }, 'sets positions correctly': function (tokens) { assert.deepEqual(tokens, [ [ 'rule', [ [ 'rule-scope', 'div > a', [ [1, 4, 'styles.less'] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [2, 2, 'styles.less'] ] ], [ 'property-value', 'red', [ [2, 2, 'styles.less'] ] ] ] ] ] ]); } }, 'with fallback for properties': { 'topic': function () { var sourceMapTracker = inputSourceMapTracker(); sourceMapTracker.track('styles.css', inputMap); return tokenize('div > a {\n color: red red;\n}', { source: 'styles.css', inputSourceMapTracker: sourceMapTracker, options: {}, warnings: [] }); }, 'sets positions correctly': function (tokens) { assert.deepEqual(tokens, [ [ 'rule', [ [ 'rule-scope', 'div > a', [ [1, 4, 'styles.less'] ] ] ], [ [ 'property', [ 'property-name', 'color', [ [2, 2, 'styles.less'] ] ], [ 'property-value', 'red', [ [2, 2, 'styles.less'] ] ], [ 'property-value', 'red', [ [2, 2, 'styles.less'] ] ] ] ] ] ]); } } }) .export(module); clean-css-5.3.3/test/utils/ 0000775 0000000 0000000 00000000000 14532047255 0015520 5 ustar 00root root 0000000 0000000 clean-css-5.3.3/test/utils/clone-array-test.js 0000664 0000000 0000000 00000002226 14532047255 0021251 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var cloneArray = require('../../lib/utils/clone-array'); vows.describe(cloneArray) .addBatch({ 'one level': { 'topic': [1, 2, 3], 'not equal': function (topic) { assert.notEqual(topic, cloneArray(topic)); }, 'deep equal': function (topic) { assert.deepEqual(topic, cloneArray(topic)); } }, 'two levels': { 'topic': [[1], [2], [3]], 'not equal': function (topic) { assert.notEqual(topic[0], cloneArray(topic)[0]); assert.notEqual(topic[1], cloneArray(topic)[1]); assert.notEqual(topic[2], cloneArray(topic)[2]); }, 'deep equal': function (topic) { assert.deepEqual(topic, cloneArray(topic)); } }, 'mixed levels': { 'topic': [[1], 2, 3], 'not equal': function (topic) { assert.notEqual(topic[0], cloneArray(topic)[0]); assert.equal(topic[1], cloneArray(topic)[1]); assert.equal(topic[2], cloneArray(topic)[2]); }, 'deep equal': function (topic) { assert.deepEqual(topic, cloneArray(topic)); } } }) .export(module); clean-css-5.3.3/test/utils/natural-compare-test.js 0000664 0000000 0000000 00000003763 14532047255 0022136 0 ustar 00root root 0000000 0000000 var assert = require('assert'); var vows = require('vows'); var naturalCompare = require('../../lib/utils/natural-compare'); vows.describe(naturalCompare) .addBatch({ 'numbers': { 'topic': [2, 3, 1, 5, 4, 11, 22], 'are sorted': function (list) { assert.deepEqual(list.sort(naturalCompare), [1, 2, 3, 4, 5, 11, 22]); } }, 'numbers and strings': { 'topic': ['2', 3, 1, 5, '4', '11', '22'], 'are sorted': function (list) { assert.deepEqual(list.sort(naturalCompare), [1, '2', 3, '4', 5, '11', '22']); } }, 'strings': { 'topic': ['2', '3', '1', '5', '4', '11', '22'], 'are sorted': function (list) { assert.deepEqual(list.sort(naturalCompare), ['1', '2', '3', '4', '5', '11', '22']); } }, 'strings with same prefix': { 'topic': ['x2', 'x3', 'x1', 'x5', 'x4', 'x11', 'x22'], 'are sorted': function (list) { assert.deepEqual(list.sort(naturalCompare), ['x1', 'x2', 'x3', 'x4', 'x5', 'x11', 'x22']); } }, 'strings with different prefixes': { 'topic': ['x2', 'x3', 'x1', 'y5', 'y4', 'y11', 'y22'], 'are sorted': function (list) { assert.deepEqual(list.sort(naturalCompare), ['x1', 'x2', 'x3', 'y4', 'y5', 'y11', 'y22']); } }, 'strings with different prefixes and suffixes of different length': { 'topic': ['x2a1', 'x3', 'x1b2', 'x2a2', 'x3a1', 'x33', 'x1b21'], 'are sorted': function (list) { assert.deepEqual(list.sort(naturalCompare), ['x1b2', 'x1b21', 'x2a1', 'x2a2', 'x3', 'x3a1', 'x33']); } } }) .addBatch({ 'objects': { 'topic': [['a', 1], ['a0', 2], ['a0', 3], ['a1', 5], ['a0', 4], ['a0', 5], ['a0', 1]], 'are sorted': function (list) { var sortedList = list.sort(function (o1, o2) { return naturalCompare(o1[0], o2[0]); }); assert.deepEqual(sortedList, [['a', 1], ['a0', 2], ['a0', 3], ['a0', 4], ['a0', 5], ['a0', 1], ['a1', 5]]); } } }) .export(module); clean-css-5.3.3/test/utils/split-test.js 0000664 0000000 0000000 00000005313 14532047255 0020170 0 ustar 00root root 0000000 0000000 var vows = require('vows'); var assert = require('assert'); var split = require('../../lib/utils/split'); vows.describe(split) .addBatch({ 'empty': { topic: '', split: function (input) { assert.deepEqual(split(input, ','), ['']); } }, 'simple': { topic: 'none', split: function (input) { assert.deepEqual(split(input, ','), ['none']); } }, 'comma separated - level 0': { topic: '#000,#fff,#0f0', split: function (input) { assert.deepEqual(split(input, ','), ['#000', '#fff', '#0f0']); } }, 'comma separated - level 1': { topic: 'rgb(0,0,0),#fff', split: function (input) { assert.deepEqual(split(input, ','), ['rgb(0,0,0)', '#fff']); } }, 'comma separated - level 2': { topic: 'linear-gradient(0,#fff,rgba(0,0,0)),red', split: function (input) { assert.deepEqual(split(input, ','), ['linear-gradient(0,#fff,rgba(0,0,0))', 'red']); } }, 'space separated - level 0': { topic: '#000 #fff #0f0', split: function (input) { assert.deepEqual(split(input, ' '), ['#000', '#fff', '#0f0']); } }, 'space separated - level 1': { topic: 'rgb(0, 0, 0) #fff', split: function (input) { assert.deepEqual(split(input, ' '), ['rgb(0, 0, 0)', '#fff']); } }, 'space separated - level 2': { topic: 'linear-gradient(0, #fff, rgba(0, 0, 0)) red', split: function (input) { assert.deepEqual(split(input, ' '), ['linear-gradient(0, #fff, rgba(0, 0, 0))', 'red']); } }, 'semicolon separated - single': { topic: 'apply(--var);', split: function (input) { assert.deepEqual(split(input, ';'), ['apply(--var)']); } }, 'semicolon separated - double': { topic: 'apply(--var);color:red;', split: function (input) { assert.deepEqual(split(input, ';'), ['apply(--var)', 'color:red']); } }, 'regex separated without matching': { topic: '1rem auto/2rem auto,none', split: function (input) { assert.deepEqual(split(input, /[ \/,]/), ['1rem', 'auto', '2rem', 'auto', 'none']); } }, 'regex separated with matching': { topic: '1rem auto/2rem auto,none', split: function (input) { assert.deepEqual(split(input, /([ \/,])/), ['1rem', ' ', 'auto', '/', '2rem', ' ', 'auto', ',', 'none']); } }, 'regex separated with matching and functions': { topic: '1rem auto/calc(1rem + 1px) auto,none', split: function (input) { assert.deepEqual(split(input, /([ \/,])/), ['1rem', ' ', 'auto', '/', 'calc(1rem + 1px)', ' ', 'auto', ',', 'none']); } } }) .export(module);