├── .gitignore ├── .jshintrc ├── .travis.yml ├── index.js ├── lib ├── declarations.js ├── get-all-font-families.js ├── get-all-font-sizes.js ├── get-property-resets.js ├── get-property-value-count.js ├── get-repeated-values.js ├── get-sorted-specificity.js ├── get-specificity-graph.js ├── get-specificity-values.js ├── get-unique-property-count.js ├── get-vendor-prefixed-properties.js ├── media-queries.js ├── rules.js ├── selector-parser.js ├── selectors.js └── size.js ├── package-lock.json ├── package.json ├── readme.md └── test ├── fixtures ├── basscss.css ├── font-awesome.css ├── font-shorthand.css ├── gridio-national-light.css ├── gridio.css ├── keyframes.css ├── small.css └── stackoverflow.css ├── results ├── basscss.json ├── font-awesome.json ├── gridio-national-light.json ├── gridio.json └── small.json └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | // Settings 3 | "passfail" : false, // Stop on first error. 4 | "maxerr" : 50, // Maximum error before stopping. 5 | 6 | 7 | // Predefined globals whom JSHint will ignore. 8 | "browser" : false, 9 | "node" : true, 10 | 11 | "predef" : [ // Custom globals. 12 | "describe", 13 | "it", 14 | "before", 15 | "after" 16 | ], 17 | 18 | 19 | // Development. 20 | "debug" : false, // Allow debugger statements e.g. browser breakpoints. 21 | "devel" : true, // Allow developments statements e.g. `console.log();`. 22 | 23 | 24 | // The Good Parts. 25 | "bitwise" : false, // Prohibit bitwise operators (&, |, ^, etc.). 26 | "curly" : true, // Require {} for every new block or scope. 27 | "eqeqeq" : true, // Require triple equals i.e. `===`. 28 | "eqnull" : false, // Tolerate use of `== null`. 29 | "evil" : false, // Tolerate use of `eval`. 30 | "expr" : false, // Tolerate `ExpressionStatement` as Programs. 31 | "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` 32 | "latedef" : false, // Prohibit variable use before definition. 33 | "loopfunc" : false, // Allow functions to be defined within loops. 34 | "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. 35 | "regexp" : true, // Prohibit `.` and `[^...]` in regular expressions. 36 | "undef" : true, // Require all non-global variables be declared before they are used. 37 | 38 | 39 | // Personal styling preferences. 40 | "asi" : true, 41 | "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. 42 | "noempty" : true, // Prohibit use of empty blocks. 43 | "nomen" : true, // Prohibit use of initial or trailing underbars in names. 44 | "onevar" : false, // Allow only one `var` statement per function. 45 | "plusplus" : false, // Prohibit use of `++` & `--`. 46 | "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. 47 | "trailing" : true, // Prohibit trailing whitespaces. 48 | "white" : true, // Check against strict whitespace and indentation rules. 49 | "indent" : 2 // Specify indentation spacing 50 | } 51 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 6 4 | - 8 5 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | var postcss = require('postcss') 3 | var safeParser = require('postcss-safe-parser') 4 | var bytes = require('bytes') 5 | var gzipSize = require('gzip-size') 6 | var size = require('./lib/size') 7 | var rules = require('./lib/rules') 8 | var selectors = require('./lib/selectors') 9 | var declarations = require('./lib/declarations') 10 | var mediaQueries = require('./lib/media-queries') 11 | 12 | module.exports = function (src, opts) { 13 | opts = opts || {} 14 | opts = _.defaults(opts, { 15 | safe: true, 16 | mediaQueries: true, 17 | importantDeclarations: false, 18 | specificityGraph: false, 19 | sortedSpecificityGraph: false, 20 | repeatedSelectors: false, 21 | propertyResets: false, 22 | vendorPrefixedProperties: false 23 | }) 24 | 25 | function parse (root, result) { 26 | var stats = {} 27 | 28 | var string = postcss().process(root).css 29 | stats.size = size(string) 30 | stats.gzipSize = gzipSize.sync(string) 31 | stats.humanizedSize = bytes(stats.size, { decimalPlaces: 0 }) 32 | stats.humanizedGzipSize = bytes(stats.gzipSize, { decimalPlaces: 0 }) 33 | 34 | stats.rules = rules(root, opts) 35 | stats.selectors = selectors(root, opts) 36 | stats.declarations = declarations(root, opts) 37 | stats.mediaQueries = mediaQueries(root, opts) 38 | 39 | // Push message to PostCSS when used as a plugin 40 | if (result && result.messages) { 41 | result.messages.push({ 42 | type: 'cssstats', 43 | plugin: 'postcss-cssstats', 44 | stats: stats 45 | }) 46 | } 47 | 48 | stats.toJSON = function () { 49 | // Remove methods when using JSON.stringify 50 | delete stats.selectors.getSpecificityGraph 51 | delete stats.selectors.getRepeatedValues 52 | delete stats.selectors.getSortedSpecificity 53 | delete stats.declarations.getPropertyResets 54 | delete stats.declarations.getUniquePropertyCount 55 | delete stats.declarations.getPropertyValueCount 56 | delete stats.declarations.getVendorPrefixed 57 | delete stats.declarations.getAllFontSizes 58 | delete stats.declarations.getAllFontFamilies 59 | return stats 60 | } 61 | 62 | // Return stats for default usage 63 | return stats 64 | } 65 | 66 | if (typeof src === 'string') { 67 | // Default behavior 68 | var root = postcss().process(src, { parser: safeParser }).root 69 | var result = parse(root, {}) 70 | return result 71 | } else if (typeof src === 'object' || typeof src === 'undefined') { 72 | // Return a PostCSS plugin 73 | return parse 74 | } else { 75 | throw new TypeError('cssstats expects a string or to be used as a PostCSS plugin') 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /lib/declarations.js: -------------------------------------------------------------------------------- 1 | var getPropertyResets = require('./get-property-resets') 2 | var getUniquePropertyCount = require('./get-unique-property-count') 3 | var getPropertyValueCount = require('./get-property-value-count') 4 | var getVendorPrefixedProperties = require('./get-vendor-prefixed-properties') 5 | var getAllFontSizes = require('./get-all-font-sizes') 6 | var getAllFontFamilies = require('./get-all-font-families') 7 | 8 | module.exports = function (root, opts) { 9 | var result = { 10 | total: 0, 11 | unique: 0, 12 | important: [], 13 | properties: {}, 14 | getPropertyResets: getPropertyResets, 15 | getUniquePropertyCount: getUniquePropertyCount, 16 | getPropertyValueCount: getPropertyValueCount, 17 | getVendorPrefixed: getVendorPrefixedProperties, 18 | getAllFontSizes: getAllFontSizes, 19 | getAllFontFamilies: getAllFontFamilies 20 | } 21 | 22 | root.walkRules(function (rule) { 23 | rule.walkDecls(function (declaration) { 24 | var prop = declaration.prop 25 | 26 | result.total++ 27 | 28 | if (declaration.important) { 29 | result.important.push({ 30 | property: declaration.prop, 31 | value: declaration.value 32 | }) 33 | } 34 | 35 | result.properties[prop] = result.properties[prop] || [] 36 | result.properties[prop].push(declaration.value) 37 | }) 38 | }) 39 | 40 | result.unique = Object.keys(result.properties).reduce(function (a, property) { 41 | return a + getUniquePropertyCount.call(result, property) 42 | }, 0) 43 | 44 | if (opts.propertyResets) { 45 | result.resets = result.getPropertyResets() 46 | } 47 | 48 | if (opts.vendorPrefixedProperties) { 49 | result.vendorPrefixes = result.getVendorPrefixed() 50 | } 51 | 52 | if (!opts.importantDeclarations) { 53 | delete result.important 54 | } 55 | 56 | return result 57 | } 58 | -------------------------------------------------------------------------------- /lib/get-all-font-families.js: -------------------------------------------------------------------------------- 1 | var shorthandExpand = require('css-shorthand-expand') 2 | 3 | module.exports = function (properties) { 4 | properties = properties || this.properties 5 | 6 | if (!properties) { 7 | return 0 8 | } 9 | 10 | var families = properties['font-family'] || [] 11 | 12 | if (properties.font) { 13 | families = families.concat(properties.font 14 | .map(function (value) { 15 | try { 16 | return shorthandExpand('font', value)['font-family'] 17 | } catch (e) {} 18 | }) 19 | .filter(function (value) { 20 | return value 21 | }) 22 | ) 23 | } 24 | 25 | return families 26 | } 27 | -------------------------------------------------------------------------------- /lib/get-all-font-sizes.js: -------------------------------------------------------------------------------- 1 | var shorthandExpand = require('css-shorthand-expand') 2 | 3 | module.exports = function (properties) { 4 | properties = properties || this.properties 5 | 6 | if (!properties) { 7 | return 0 8 | } 9 | 10 | var fontSizes = properties['font-size'] || [] 11 | 12 | if (properties.font) { 13 | fontSizes = fontSizes.concat(properties.font 14 | .map(function (value) { 15 | try { 16 | return shorthandExpand('font', value)['font-family'] 17 | } catch (e) {} 18 | }) 19 | .filter(function (value) { 20 | return value 21 | }) 22 | ) 23 | } 24 | 25 | return fontSizes 26 | } 27 | -------------------------------------------------------------------------------- /lib/get-property-resets.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | 3 | module.exports = function (properties) { 4 | properties = properties || this.properties 5 | 6 | var resets = {} 7 | var declarations = [] 8 | var PROP_MATCH_REGEX = /(^margin|^padding)/ 9 | var VALUE_MATCH_REGEX = /^(?:0(?:\w{2,4}|%)? ?)+$/ 10 | 11 | _.forIn(properties, function (values, key) { 12 | values.forEach(function (value) { 13 | declarations.push({ 14 | prop: key, 15 | value: value 16 | }) 17 | }) 18 | }) 19 | 20 | declarations 21 | .filter(function (declaration) { 22 | return declaration.prop.match(PROP_MATCH_REGEX) 23 | }) 24 | .forEach(function (declaration) { 25 | if (declaration.value.match(VALUE_MATCH_REGEX)) { 26 | resets[declaration.prop] |= 0 27 | resets[declaration.prop]++ 28 | } 29 | }) 30 | 31 | return resets 32 | } 33 | -------------------------------------------------------------------------------- /lib/get-property-value-count.js: -------------------------------------------------------------------------------- 1 | module.exports = function (property, value) { 2 | if (!this.properties || !this.properties[property]) { 3 | return 0 4 | } 5 | 6 | return this.properties[property] 7 | .filter(function (val) { 8 | return val === value 9 | }) 10 | .length 11 | } 12 | -------------------------------------------------------------------------------- /lib/get-repeated-values.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | 3 | module.exports = function (values) { 4 | values = values || this.values 5 | 6 | return _.uniq( 7 | _.clone(values) 8 | .sort() 9 | .reduce(function (a, b, i, arr) { 10 | if (b === arr[i - 1] || b === arr[i + 1]) { 11 | return a.concat(b) 12 | } else { 13 | return a 14 | } 15 | }, []) 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /lib/get-sorted-specificity.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | 3 | module.exports = function (selectors, graph) { 4 | selectors = selectors || this.values 5 | graph = graph || this.getSpecificityGraph() 6 | 7 | return _.zipWith( 8 | selectors, 9 | graph, 10 | function (a, b) { 11 | return { 12 | selector: a, 13 | specificity: b 14 | } 15 | }) 16 | .sort(function (a, b) { 17 | return b.specificity - a.specificity 18 | }) 19 | } 20 | -------------------------------------------------------------------------------- /lib/get-specificity-graph.js: -------------------------------------------------------------------------------- 1 | var isBlank = require('is-blank') 2 | var isPresent = require('is-present') 3 | var specificity = require('specificity') 4 | 5 | module.exports = function (selectors) { 6 | selectors = selectors || this.values 7 | 8 | if (isBlank(selectors)) { 9 | return false 10 | } 11 | 12 | return selectors.filter(isPresent).map(graph) 13 | 14 | function graph (selector) { 15 | return specificity.calculate(selector)[0] 16 | .specificity 17 | .split(',') 18 | .map(function (n) { 19 | return parseFloat(n) 20 | }) 21 | .reverse() 22 | .reduce(function (a, b, i, arr) { 23 | b = b < 10 ? b : 9 24 | return a + (b * Math.pow(10, i)) 25 | }) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/get-specificity-values.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | 3 | module.exports = function (selectors, graph) { 4 | selectors = selectors || this.values 5 | graph = graph || this.getSpecificityGraph() 6 | 7 | return _.zipWith( 8 | selectors, 9 | graph, 10 | function (a, b) { 11 | return { 12 | selector: a, 13 | specificity: b 14 | } 15 | }) 16 | } 17 | -------------------------------------------------------------------------------- /lib/get-unique-property-count.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | 3 | module.exports = function (property) { 4 | if (!this.properties || !this.properties[property]) { 5 | return 0 6 | } 7 | 8 | return _.uniq(this.properties[property]).length 9 | } 10 | -------------------------------------------------------------------------------- /lib/get-vendor-prefixed-properties.js: -------------------------------------------------------------------------------- 1 | var isVendorPrefixed = require('is-vendor-prefixed') 2 | 3 | module.exports = function (properties) { 4 | properties = properties || this.properties 5 | 6 | return Object.keys(properties) 7 | .filter(function (property) { 8 | return isVendorPrefixed(property) 9 | }) 10 | .map(function (property) { 11 | var arr = [] 12 | properties[property].forEach(function (value) { 13 | arr.push({ 14 | property: property, 15 | value: value 16 | }) 17 | }) 18 | return arr 19 | }) 20 | .reduce(function (a, b, i) { 21 | return a.concat(b) 22 | }, []) 23 | } 24 | -------------------------------------------------------------------------------- /lib/media-queries.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | var postcss = require('postcss') 3 | var rules = require('./rules') 4 | var selectors = require('./selectors') 5 | var declarations = require('./declarations') 6 | 7 | module.exports = function (root, opts) { 8 | var result = { 9 | total: 0, 10 | unique: 0, 11 | values: [], 12 | contents: [] 13 | } 14 | 15 | root.walkAtRules(function (rule) { 16 | if (rule.name === 'media') { 17 | result.total++ 18 | result.values.push(rule.params) 19 | 20 | if (opts.mediaQueries) { 21 | var qRoot = postcss.parse(rule.nodes) 22 | result.contents.push({ 23 | value: rule.params, 24 | rules: rules(qRoot, opts), 25 | selectors: selectors(qRoot, opts), 26 | declarations: declarations(qRoot, opts) 27 | }) 28 | } else { 29 | delete result.contents 30 | } 31 | } 32 | }) 33 | 34 | result.unique = _.uniq(result.values).length 35 | return result 36 | } 37 | -------------------------------------------------------------------------------- /lib/rules.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | 3 | module.exports = function (root, opts) { 4 | var result = { 5 | total: 0, 6 | size: { 7 | graph: [], 8 | max: 0, 9 | average: 0 10 | }, 11 | selectorByRuleSizes: [] 12 | } 13 | 14 | root.walkRules(function (rule) { 15 | var selector = rule.selector 16 | var declarations = 0 17 | 18 | rule.nodes.forEach(function (node) { 19 | if (node.type === 'decl') { 20 | declarations++ 21 | } 22 | }) 23 | 24 | result.total++ 25 | result.size.graph.push(declarations) 26 | result.selectorByRuleSizes.push({ 27 | selector: selector, 28 | declarations: declarations 29 | }) 30 | }) 31 | 32 | result.selectorByRuleSizes = _.sortBy(result.selectorByRuleSizes, 'declarations').reverse() 33 | 34 | if (result.total > 0) { 35 | result.size.max = _.max(result.size.graph) 36 | result.size.average = _.sum(result.size.graph) / result.size.graph.length 37 | } 38 | 39 | return result 40 | } 41 | -------------------------------------------------------------------------------- /lib/selector-parser.js: -------------------------------------------------------------------------------- 1 | 2 | var Parser = require('css-selector-parser').CssSelectorParser 3 | 4 | var parser = new Parser() 5 | 6 | module.exports = parser 7 | -------------------------------------------------------------------------------- /lib/selectors.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash') 2 | var hasIdSelector = require('has-id-selector') 3 | var hasClassSelector = require('has-class-selector') 4 | var hasPseudoElement = require('has-pseudo-element') 5 | var hasPseudoClass = require('has-pseudo-class') 6 | var hasElementSelector = require('has-element-selector') 7 | var getSpecificityGraph = require('./get-specificity-graph') 8 | var getRepeatedValues = require('./get-repeated-values') 9 | var getSpecificityValues = require('./get-specificity-values') 10 | var getSortedSpecificity = require('./get-sorted-specificity') 11 | 12 | module.exports = function (root, opts) { 13 | var result = { 14 | total: 0, 15 | type: 0, 16 | class: 0, 17 | id: 0, 18 | pseudoClass: 0, 19 | pseudoElement: 0, 20 | values: [], 21 | specificity: { 22 | max: 0, 23 | average: 0 24 | }, 25 | getSpecificityGraph: getSpecificityGraph, 26 | getSpecificityValues: getSpecificityValues, 27 | getSortedSpecificity: getSortedSpecificity, 28 | getRepeatedValues: getRepeatedValues 29 | } 30 | 31 | var graph 32 | 33 | root.walkRules(function (rule) { 34 | rule.selectors.forEach(function (selector) { 35 | result.total++ 36 | result.values.push(selector) 37 | 38 | if (hasElementSelector(selector)) { 39 | result.type++ 40 | } 41 | 42 | if (hasClassSelector(selector)) { 43 | result.class++ 44 | } 45 | 46 | if (hasIdSelector(selector)) { 47 | result.id++ 48 | } 49 | 50 | if (hasPseudoElement(selector)) { 51 | result.pseudoElement++ 52 | } 53 | 54 | if (hasPseudoClass(selector)) { 55 | result.pseudoClass++ 56 | } 57 | }) 58 | }) 59 | 60 | graph = result.getSpecificityGraph() 61 | result.specificity.max = _.max(graph) || 0 62 | result.specificity.average = _.sum(graph) / graph.length || 0 63 | 64 | if (opts.specificityGraph) { 65 | result.specificity.graph = graph 66 | } 67 | 68 | if (opts.sortedSpecificityGraph) { 69 | result.specificity.sortedGraph = result.getSortedSpecificity() 70 | } 71 | 72 | if (opts.repeatedSelectors) { 73 | result.repeated = result.getRepeatedValues() 74 | } 75 | 76 | return result 77 | } 78 | -------------------------------------------------------------------------------- /lib/size.js: -------------------------------------------------------------------------------- 1 | module.exports = function (string) { 2 | return Buffer.byteLength(string, 'utf8') 3 | } 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cssstats", 3 | "version": "3.2.0", 4 | "description": "High-level stats for stylesheets", 5 | "main": "index.js", 6 | "author": "Brent Jackson", 7 | "license": "MIT", 8 | "repository": "cssstats/cssstats-core", 9 | "keywords": [ 10 | "CSS", 11 | "Performance", 12 | "Stats", 13 | "cssstats" 14 | ], 15 | "dependencies": { 16 | "bytes": "^3.0.0", 17 | "css-selector-tokenizer": "^0.7.0", 18 | "css-shorthand-expand": "^1.1.0", 19 | "gzip-size": "^4.1.0", 20 | "has-class-selector": "1.0.0", 21 | "has-element-selector": "^1.0.0", 22 | "has-id-selector": "1.0.0", 23 | "has-pseudo-class": "1.0.1", 24 | "has-pseudo-element": "1.0.0", 25 | "is-blank": "^2.1.0", 26 | "is-css-shorthand": "^1.0.1", 27 | "is-present": "^1.0.0", 28 | "is-vendor-prefixed": "1.0.0", 29 | "lodash": "^4.17.5", 30 | "postcss": "^6.0.21", 31 | "postcss-safe-parser": "^3.0.1", 32 | "specificity": "^0.3.2" 33 | }, 34 | "devDependencies": { 35 | "get-css": "1.2.7-2", 36 | "mocha": "^5.0.5", 37 | "standard": "^11.0.1" 38 | }, 39 | "scripts": { 40 | "test": "npm run lint && rm -rf test/results && mkdir test/results && mocha test", 41 | "lint": "standard --fix" 42 | }, 43 | "standard": { 44 | "global": [ 45 | "before", 46 | "describe", 47 | "it" 48 | ] 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # cssstats [![Build Status](https://travis-ci.org/cssstats/core.svg?branch=master)](https://travis-ci.org/cssstats/core) 2 | 3 | Parses stylesheets and returns an object with statistics. 4 | This is the core module used in [cssstats.com](http://cssstats.com) 5 | 6 | ## Installation 7 | 8 | ```sh 9 | npm i --save cssstats 10 | ``` 11 | 12 | ## Usage 13 | 14 | ### Node 15 | 16 | ```js 17 | var fs = require('fs') 18 | var cssstats = require('cssstats') 19 | 20 | var css = fs.readFileSync('./styles.css', 'utf8') 21 | var stats = cssstats(css) 22 | ``` 23 | 24 | ### PostCSS Plugin 25 | 26 | CSS Stats can be used as a [PostCSS](https://github.com/postcss/postcss) plugin. 27 | The stats will be added to PostCSS's messages array. 28 | 29 | ```js 30 | var fs = require('fs') 31 | var postcss = require('postcss') 32 | var cssstats = require('cssstats') 33 | 34 | var css = fs.readFileSync('./styles.css', 'utf8') 35 | postcss() 36 | .use(cssstats()) 37 | .process(css) 38 | .then(function (result) { 39 | result.messages.forEach(function (message) { 40 | console.log(message) 41 | }) 42 | }) 43 | ``` 44 | 45 | #### Options 46 | 47 | Options may be passed as a second argument. 48 | 49 | ```js 50 | var stats = cssstats(css, { mediaQueries: false }) 51 | ``` 52 | 53 | - `safe` (boolean, default: `true`) - enables [PostCSS safe mode](https://github.com/postcss/postcss#safe-mode) for parsing CSS with syntax errors 54 | - `mediaQueries` (boolean, default `true`) - determines whether or not to generate stats for each media query block 55 | - `importantDeclarations` (boolean, default `false`) - include an array of declarations with `!important` 56 | 57 | The following options add the results of helper methods to the returned object. This is helpful when using `JSON.stringify()`. 58 | 59 | - `specificityGraph` (boolean, default `false`) 60 | - `sortedSpecificityGraph` (boolean, default `false`) 61 | - `repeatedSelectors` (boolean, default `false`) 62 | - `propertyResets` (boolean, default `false`) 63 | - `vendorPrefixedProperties` (boolean, default `false`) 64 | 65 | ### Returned Object 66 | 67 | ```js 68 | // Example 69 | { 70 | size: n, 71 | gzipSize: n, 72 | rules: { 73 | total: n, 74 | size: { 75 | graph: [n], 76 | max: n, 77 | average: n 78 | } 79 | }, 80 | selectors: { 81 | total: n, 82 | id: n, 83 | class: n, 84 | type: n, 85 | pseudoClass: n, 86 | psuedoElement: n, 87 | values: [str], 88 | specificity: { 89 | max: n 90 | average: n 91 | }, 92 | getSpecificityGraph(), 93 | getSpecificityValues(), 94 | getRepeatedValues(), 95 | getSortedSpecificity() 96 | }, 97 | declarations: { 98 | total: n, 99 | unique: n, 100 | important: [obj], 101 | properties: 102 | prop: [str] 103 | }, 104 | getPropertyResets(), 105 | getUniquePropertyCount(), 106 | getPropertyValueCount(), 107 | getVendorPrefixed(), 108 | getAllFontSizes(), 109 | getAllFontFamilies(), 110 | }, 111 | mediaQueries: { 112 | total: n, 113 | unique: n, 114 | values: [str], 115 | contents: [ 116 | { 117 | value: str, 118 | rules: { 119 | total: n, 120 | size: { 121 | graph: [n], 122 | max: n, 123 | average: n 124 | } 125 | }, 126 | selectors: { 127 | total: n, 128 | id: n, 129 | class: n, 130 | type: n, 131 | pseudoClass: n, 132 | pseudoElement: n, 133 | values: [str], 134 | specificity: { 135 | max: n, 136 | average: n 137 | } 138 | }, 139 | declarations: { 140 | total: n, 141 | unique: n, 142 | important: [obj], 143 | vendorPrefix: n, 144 | properties: { 145 | prop: [str] 146 | } 147 | } 148 | } 149 | ] 150 | } 151 | } 152 | ``` 153 | 154 | #### `size` number 155 | The size of the file in bytes 156 | 157 | #### `gzipSize` number 158 | The size of the stylesheet gzipped in bytes 159 | 160 | #### `rules` object 161 | 162 | - `total` number - total number of rules 163 | - `size` object 164 | - `size.graph` array - ruleset sizes (number of declarations per rule) in source order 165 | - `size.max` number - maximum ruleset size 166 | - `size.average` number - average ruleset size 167 | 168 | #### `selectors` object 169 | 170 | - `total` number - total number of selectors 171 | - `type` number - total number of type selectors 172 | - `class` number - total number of class selectors 173 | - `id` number - total number of id selectors 174 | - `pseudoClass` number - total number of pseudo class selectors 175 | - `pseudoElement` number - total number of pseudo element selectors 176 | - `values` array - array of strings for all selectors 177 | - `specificity` object 178 | - `specificity.max` number - maximum specificity as a base 10 number 179 | - `specificity.average` number - average specificity as a base 10 number 180 | - `getSpecificityGraph()` function - returns an array of numbers for each selector’s specificity as a base 10 number 181 | - `getSpecificityValues()` function - returns an array of selectors with base 10 specificity score in order 182 | - `getRepeatedValues()` function - returns an array of strings of repeated selectors 183 | - `getSortedSpecificity()` function - returns an array of selectors with base 10 specificity score, sorted from highest to lowest 184 | 185 | #### `declarations` object 186 | 187 | - `total` number - total number of declarations 188 | - `unique` number - total unique declarations 189 | - `properties` object - object with each unique property and an array of that property’s values 190 | - `getPropertyResets()` function - returns an object with the number of times margin or padding is reset for each property 191 | - `getUniquePropertyCount(property)` function - returns the number of unique values for the given property 192 | - `getPropertyValueCount(property, value)` function - returns the number of times a declaration occurs for the given property and value 193 | - `getVendorPrefixed()` function - returns an array of declarations with vendor prefixed properties 194 | - `getAllFontSizes()` function - returns an array of font sizes from both `font-size` and `font` shorthand declarations 195 | - `getAllFontFamilies()` function - returns an array of font families from both `font-family` and `font` shorthand declarations 196 | - `important` array (optional) - `!important` declaration objects with `property` and `value` 197 | 198 | #### `mediaQueries` object 199 | 200 | - `total` number - total number of media queries 201 | - `unique` number - total unique media queries 202 | - `values` array - array of values for each media query 203 | - `contents` array - array of media query blocks with full stats object for each 204 | 205 | 206 | See the `/test/results` folder for example JSON results. 207 | 208 | ### Usage examples 209 | 210 | ```js 211 | var cssstats = require('cssstats') 212 | var stats = cssstats(css) 213 | ``` 214 | 215 | #### Generate a [specificity graph](http://csswizardry.com/2014/10/the-specificity-graph/) 216 | 217 | ```js 218 | var specificityGraph = stats.selectors.getSpecificityGraph() 219 | ``` 220 | 221 | #### Sort selectors by highest specificity 222 | 223 | ```js 224 | var sortedSelectors = stats.selectors.getSortedSpecificity() 225 | ``` 226 | 227 | #### Get total number of unique colors 228 | 229 | ```js 230 | var uniqueColorsCount = stats.declarations.getUniquePropertyCount('color') 231 | ``` 232 | 233 | #### `display: none` count 234 | 235 | ```js 236 | var displayNoneCount = stats.declarations.getPropertyValueCount('display', 'none') 237 | ``` 238 | 239 | ## License 240 | 241 | MIT 242 | 243 | ## Contributing 244 | 245 | 1. Fork it 246 | 2. Create your feature branch (`git checkout -b my-new-feature`) 247 | 3. Commit your changes (`git commit -am 'Add some feature'`) 248 | 4. Push to the branch (`git push origin my-new-feature`) 249 | 5. Create new Pull Request 250 | -------------------------------------------------------------------------------- /test/fixtures/basscss.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Basscss v4.1.4 4 | 5 | Low-level CSS toolkit 6 | http://basscss.com 7 | 8 | */ 9 | 10 | /* 11 | Basscss Base 12 | */ 13 | 14 | 15 | 16 | body, 17 | button { 18 | margin: 0; 19 | } 20 | 21 | button, 22 | input, 23 | select, 24 | textarea { 25 | font-family: inherit; 26 | font-size: 100%; 27 | } 28 | 29 | img { 30 | max-width: 100%; 31 | } 32 | 33 | svg { 34 | max-height: 100%; 35 | } 36 | 37 | body { 38 | font-family: 'Helvetica Neue', Helvetica, sans-serif; 39 | line-height: 1.5; 40 | font-size: 100%; 41 | } 42 | 43 | h1, 44 | h2, 45 | h3, 46 | h4, 47 | h5, 48 | h6 { 49 | font-family: 'Helvetica Neue', Helvetica, sans-serif; 50 | font-weight: bold; 51 | line-height: 1.25; 52 | margin-top: 1em; 53 | margin-bottom: .5em; 54 | } 55 | 56 | p, 57 | dl, 58 | ol, 59 | ul { 60 | font-size: 1rem; 61 | margin-top: 0; 62 | margin-bottom: 1rem; 63 | } 64 | 65 | ol, 66 | ul { 67 | padding-left: 2rem; 68 | } 69 | 70 | pre, 71 | code, 72 | samp { 73 | font-family: 'Source Code Pro', Consolas, monospace; 74 | font-size: inherit; 75 | } 76 | 77 | pre { 78 | margin-top: 0; 79 | margin-bottom: 1rem; 80 | overflow-x: scroll; 81 | } 82 | 83 | hr { 84 | margin-top: 2rem; 85 | margin-bottom: 2rem; 86 | } 87 | 88 | blockquote { 89 | margin-top: 2rem; 90 | margin-bottom: 2rem; 91 | margin-left: 0; 92 | padding-left: 1rem; 93 | padding-right: 1rem; 94 | } 95 | 96 | blockquote, 97 | blockquote p { 98 | font-size: 1.25rem; 99 | font-style: italic; 100 | } 101 | 102 | h1, 103 | .h1 { 104 | font-size: 2rem; 105 | } 106 | 107 | h2, 108 | .h2 { 109 | font-size: 1.5rem; 110 | } 111 | 112 | h3, 113 | .h3 { 114 | font-size: 1.25rem; 115 | } 116 | 117 | h4, 118 | .h4 { 119 | font-size: 1rem; 120 | } 121 | 122 | h5, 123 | .h5 { 124 | font-size: .875rem; 125 | } 126 | 127 | h6, 128 | .h6 { 129 | font-size: .75rem; 130 | } 131 | 132 | .list-reset { 133 | list-style: none; 134 | padding-left: 0; 135 | } 136 | 137 | input, 138 | select, 139 | textarea, 140 | fieldset { 141 | margin-top: 0; 142 | margin-bottom: .5rem; 143 | } 144 | 145 | input[type=text], 146 | input[type=datetime], 147 | input[type=datetime-local], 148 | input[type=email], 149 | input[type=month], 150 | input[type=number], 151 | input[type=password], 152 | input[type=search], 153 | input[type=tel], 154 | input[type=time], 155 | input[type=url], 156 | input[type=week] { 157 | -moz-box-sizing: border-box; 158 | box-sizing: border-box; 159 | height: 2.25em; 160 | padding: .25em 1rem; 161 | -webkit-appearance: none; 162 | } 163 | 164 | select { 165 | -moz-box-sizing: border-box; 166 | box-sizing: border-box; 167 | line-height: 1.75; 168 | padding: .25em 1rem; 169 | } 170 | 171 | select:not([multiple]) { 172 | height: 2.25em; 173 | } 174 | 175 | textarea { 176 | -moz-box-sizing: border-box; 177 | box-sizing: border-box; 178 | line-height: 1.75; 179 | padding: .25em 1rem; 180 | } 181 | 182 | .fieldset-reset { 183 | padding: 0; 184 | margin-left: 0; 185 | margin-right: 0; 186 | border: 0; 187 | } 188 | 189 | .fieldset-reset legend { 190 | padding: 0; 191 | } 192 | 193 | button, 194 | .button { 195 | font-weight: bold; 196 | text-decoration: none; 197 | cursor: pointer; 198 | display: inline-block; 199 | -moz-box-sizing: border-box; 200 | box-sizing: border-box; 201 | line-height: 1.125; 202 | padding: .5em 1rem; 203 | margin: 0; 204 | height: auto; 205 | border: 1px solid transparent; 206 | -webkit-appearance: none; 207 | } 208 | 209 | ::-moz-focus-inner { 210 | border: 0; 211 | padding: 0; 212 | } 213 | 214 | .button:hover { 215 | text-decoration: none; 216 | } 217 | 218 | table { 219 | border-collapse: collapse; 220 | border-spacing: 0; 221 | max-width: 100%; 222 | width: 100%; 223 | } 224 | 225 | th { 226 | text-align: left; 227 | font-weight: bold; 228 | } 229 | 230 | th, 231 | td { 232 | padding: .25em 1rem; 233 | line-height: inherit; 234 | } 235 | 236 | th { 237 | vertical-align: bottom; 238 | } 239 | 240 | td { 241 | vertical-align: top; 242 | } 243 | 244 | /* 245 | Basscss Utilities 246 | */ 247 | 248 | 249 | 250 | .inline { 251 | display: inline; 252 | } 253 | 254 | .block { 255 | display: block; 256 | } 257 | 258 | .inline-block { 259 | display: inline-block; 260 | } 261 | 262 | .overflow-hidden { 263 | overflow: hidden; 264 | } 265 | 266 | .overflow-scroll { 267 | overflow: scroll; 268 | } 269 | 270 | .clearfix:before, 271 | .clearfix:after { 272 | content: " "; 273 | display: table; 274 | } 275 | 276 | .clearfix:after { 277 | clear: both; 278 | } 279 | 280 | .left { 281 | float: left; 282 | } 283 | 284 | .right { 285 | float: right; 286 | } 287 | 288 | .fit { 289 | max-width: 100%; 290 | } 291 | 292 | .half-width { 293 | width: 50%; 294 | } 295 | 296 | .full-width { 297 | width: 100%; 298 | } 299 | 300 | .bold { 301 | font-weight: bold; 302 | } 303 | 304 | .regular { 305 | font-weight: normal; 306 | } 307 | 308 | .italic { 309 | font-style: italic; 310 | } 311 | 312 | .caps { 313 | text-transform: uppercase; 314 | letter-spacing: .2em; 315 | } 316 | 317 | .left-align { 318 | text-align: left; 319 | } 320 | 321 | .center { 322 | text-align: center; 323 | } 324 | 325 | .right-align { 326 | text-align: right; 327 | } 328 | 329 | .justify { 330 | text-align: justify; 331 | } 332 | 333 | .nowrap { 334 | white-space: nowrap; 335 | } 336 | 337 | .m0 { 338 | margin: 0; 339 | } 340 | 341 | .mt0 { 342 | margin-top: 0; 343 | } 344 | 345 | .mr0 { 346 | margin-right: 0; 347 | } 348 | 349 | .mb0 { 350 | margin-bottom: 0; 351 | } 352 | 353 | .ml0 { 354 | margin-left: 0; 355 | } 356 | 357 | .m1 { 358 | margin: .5rem; 359 | } 360 | 361 | .mt1 { 362 | margin-top: .5rem; 363 | } 364 | 365 | .mr1 { 366 | margin-right: .5rem; 367 | } 368 | 369 | .mb1 { 370 | margin-bottom: .5rem; 371 | } 372 | 373 | .ml1 { 374 | margin-left: .5rem; 375 | } 376 | 377 | .m2 { 378 | margin: 1rem; 379 | } 380 | 381 | .mt2 { 382 | margin-top: 1rem; 383 | } 384 | 385 | .mr2 { 386 | margin-right: 1rem; 387 | } 388 | 389 | .mb2 { 390 | margin-bottom: 1rem; 391 | } 392 | 393 | .ml2 { 394 | margin-left: 1rem; 395 | } 396 | 397 | .m3 { 398 | margin: 2rem; 399 | } 400 | 401 | .mt3 { 402 | margin-top: 2rem; 403 | } 404 | 405 | .mr3 { 406 | margin-right: 2rem; 407 | } 408 | 409 | .mb3 { 410 | margin-bottom: 2rem; 411 | } 412 | 413 | .ml3 { 414 | margin-left: 2rem; 415 | } 416 | 417 | .m4 { 418 | margin: 4rem; 419 | } 420 | 421 | .mt4 { 422 | margin-top: 4rem; 423 | } 424 | 425 | .mr4 { 426 | margin-right: 4rem; 427 | } 428 | 429 | .mb4 { 430 | margin-bottom: 4rem; 431 | } 432 | 433 | .ml4 { 434 | margin-left: 4rem; 435 | } 436 | 437 | .mxn1 { 438 | margin-left: -.5rem; 439 | margin-right: -.5rem; 440 | } 441 | 442 | .mxn2 { 443 | margin-left: -1rem; 444 | margin-right: -1rem; 445 | } 446 | 447 | .mxn3 { 448 | margin-left: -2rem; 449 | margin-right: -2rem; 450 | } 451 | 452 | .mxn4 { 453 | margin-left: -4rem; 454 | margin-right: -4rem; 455 | } 456 | 457 | .mx-auto { 458 | margin-left: auto; 459 | margin-right: auto; 460 | } 461 | 462 | .p1 { 463 | padding: .5rem; 464 | } 465 | 466 | .py1 { 467 | padding-top: .5rem; 468 | padding-bottom: .5rem; 469 | } 470 | 471 | .px1 { 472 | padding-left: .5rem; 473 | padding-right: .5rem; 474 | } 475 | 476 | .p2 { 477 | padding: 1rem; 478 | } 479 | 480 | .py2 { 481 | padding-top: 1rem; 482 | padding-bottom: 1rem; 483 | } 484 | 485 | .px2 { 486 | padding-left: 1rem; 487 | padding-right: 1rem; 488 | } 489 | 490 | .p3 { 491 | padding: 2rem; 492 | } 493 | 494 | .py3 { 495 | padding-top: 2rem; 496 | padding-bottom: 2rem; 497 | } 498 | 499 | .px3 { 500 | padding-left: 2rem; 501 | padding-right: 2rem; 502 | } 503 | 504 | .p4 { 505 | padding: 4rem; 506 | } 507 | 508 | .py4 { 509 | padding-top: 4rem; 510 | padding-bottom: 4rem; 511 | } 512 | 513 | .px4 { 514 | padding-left: 4rem; 515 | padding-right: 4rem; 516 | } 517 | 518 | .sm-show, 519 | .md-show, 520 | .lg-show { 521 | display: none !important; 522 | } 523 | 524 | @media (min-width: 40em) { 525 | .sm-show { 526 | display: block !important; 527 | } 528 | } 529 | 530 | @media (min-width: 52em) { 531 | .md-show { 532 | display: block !important; 533 | } 534 | } 535 | 536 | @media (min-width: 64em) { 537 | .lg-show { 538 | display: block !important; 539 | } 540 | } 541 | 542 | @media (min-width: 40em) { 543 | .sm-hide { 544 | display: none !important; 545 | } 546 | } 547 | 548 | @media (min-width: 52em) { 549 | .md-hide { 550 | display: none !important; 551 | } 552 | } 553 | 554 | @media (min-width: 64em) { 555 | .lg-hide { 556 | display: none !important; 557 | } 558 | } 559 | 560 | .display-none { 561 | display: none !important; 562 | } 563 | 564 | .hide { 565 | position: absolute !important; 566 | height: 1px; 567 | width: 1px; 568 | overflow: hidden; 569 | clip: rect(1px, 1px, 1px, 1px); 570 | } 571 | 572 | /* 573 | Basscss Positions 574 | */ 575 | 576 | .relative { 577 | position: relative; 578 | } 579 | 580 | .absolute { 581 | position: absolute; 582 | } 583 | 584 | .fixed { 585 | position: fixed; 586 | } 587 | 588 | .top-0 { 589 | top: 0; 590 | } 591 | 592 | .right-0 { 593 | right: 0; 594 | } 595 | 596 | .bottom-0 { 597 | bottom: 0; 598 | } 599 | 600 | .left-0 { 601 | left: 0; 602 | } 603 | 604 | .z1 { 605 | z-index: 1; 606 | } 607 | 608 | .z2 { 609 | z-index: 2; 610 | } 611 | 612 | .z3 { 613 | z-index: 3; 614 | } 615 | 616 | .z4 { 617 | z-index: 4; 618 | } 619 | 620 | .absolute-center { 621 | top: 0; 622 | right: 0; 623 | bottom: 0; 624 | left: 0; 625 | margin: auto; 626 | display: table; 627 | } 628 | 629 | /* 630 | Basscss UI Utilities 631 | */ 632 | 633 | .button-small { 634 | padding: .25em .5rem; 635 | } 636 | 637 | .button-big { 638 | line-height: 1.625; 639 | } 640 | 641 | .button-narrow { 642 | padding-left: .5rem; 643 | padding-right: .5rem; 644 | } 645 | 646 | .x-group-item { 647 | margin-left: -1px; 648 | } 649 | 650 | .x-group-item:first-of-type { 651 | margin-left: 0; 652 | } 653 | 654 | .y-group-item { 655 | margin-top: -1px; 656 | } 657 | 658 | .y-group-item:first-of-type { 659 | margin-top: 0; 660 | } 661 | 662 | /* Extension for 2px border items like .button-blue-outline */ 663 | 664 | .x-group-item-2 { 665 | margin-left: -2px; 666 | } 667 | 668 | .x-group-item-2:first-of-type { 669 | margin-left: 0; 670 | } 671 | 672 | .y-group-item-2 { 673 | margin-top: -2px; 674 | } 675 | 676 | .y-group-item-2:first-of-type { 677 | margin-top: 0; 678 | } 679 | 680 | .x-group-item:focus, 681 | .x-group-item-2:focus, 682 | .y-group-item:focus, 683 | .y-group-item-2:focus { 684 | position: relative; 685 | z-index: 1; 686 | } 687 | 688 | .disclosure-group .disclosure-show { 689 | display: none; 690 | } 691 | 692 | .disclosure-group.is-active .disclosure-show { 693 | display: block !important; 694 | } 695 | 696 | 697 | 698 | /* 699 | Basscss Grid 700 | */ 701 | 702 | 703 | 704 | .container { 705 | max-width: 64em; 706 | margin-left: auto; 707 | margin-right: auto; 708 | } 709 | 710 | .col { 711 | float: left; 712 | -moz-box-sizing: border-box; 713 | box-sizing: border-box; 714 | } 715 | 716 | .col-right { 717 | float: right; 718 | -moz-box-sizing: border-box; 719 | box-sizing: border-box; 720 | } 721 | 722 | .col-1 { 723 | width: 8.333333333333332%; 724 | } 725 | 726 | .col-2 { 727 | width: 16.666666666666664%; 728 | } 729 | 730 | .col-3 { 731 | width: 25%; 732 | } 733 | 734 | .col-4 { 735 | width: 33.33333333333333%; 736 | } 737 | 738 | .col-5 { 739 | width: 41.66666666666667%; 740 | } 741 | 742 | .col-6 { 743 | width: 50%; 744 | } 745 | 746 | .col-7 { 747 | width: 58.333333333333336%; 748 | } 749 | 750 | .col-8 { 751 | width: 66.66666666666666%; 752 | } 753 | 754 | .col-9 { 755 | width: 75%; 756 | } 757 | 758 | .col-10 { 759 | width: 83.33333333333334%; 760 | } 761 | 762 | .col-11 { 763 | width: 91.66666666666666%; 764 | } 765 | 766 | .col-12 { 767 | width: 100%; 768 | } 769 | 770 | @media (min-width: 40em) { 771 | .sm-col { 772 | float: left; 773 | -moz-box-sizing: border-box; 774 | box-sizing: border-box; 775 | } 776 | 777 | .sm-col-right { 778 | float: right; 779 | -moz-box-sizing: border-box; 780 | box-sizing: border-box; 781 | } 782 | 783 | .sm-col-1 { 784 | width: 8.333333333333332%; 785 | } 786 | 787 | .sm-col-2 { 788 | width: 16.666666666666664%; 789 | } 790 | 791 | .sm-col-3 { 792 | width: 25%; 793 | } 794 | 795 | .sm-col-4 { 796 | width: 33.33333333333333%; 797 | } 798 | 799 | .sm-col-5 { 800 | width: 41.66666666666667%; 801 | } 802 | 803 | .sm-col-6 { 804 | width: 50%; 805 | } 806 | 807 | .sm-col-7 { 808 | width: 58.333333333333336%; 809 | } 810 | 811 | .sm-col-8 { 812 | width: 66.66666666666666%; 813 | } 814 | 815 | .sm-col-9 { 816 | width: 75%; 817 | } 818 | 819 | .sm-col-10 { 820 | width: 83.33333333333334%; 821 | } 822 | 823 | .sm-col-11 { 824 | width: 91.66666666666666%; 825 | } 826 | 827 | .sm-col-12 { 828 | width: 100%; 829 | } 830 | } 831 | 832 | @media (min-width: 52em) { 833 | .md-col { 834 | float: left; 835 | -moz-box-sizing: border-box; 836 | box-sizing: border-box; 837 | } 838 | 839 | .md-col-right { 840 | float: right; 841 | -moz-box-sizing: border-box; 842 | box-sizing: border-box; 843 | } 844 | 845 | .md-col-1 { 846 | width: 8.333333333333332%; 847 | } 848 | 849 | .md-col-2 { 850 | width: 16.666666666666664%; 851 | } 852 | 853 | .md-col-3 { 854 | width: 25%; 855 | } 856 | 857 | .md-col-4 { 858 | width: 33.33333333333333%; 859 | } 860 | 861 | .md-col-5 { 862 | width: 41.66666666666667%; 863 | } 864 | 865 | .md-col-6 { 866 | width: 50%; 867 | } 868 | 869 | .md-col-7 { 870 | width: 58.333333333333336%; 871 | } 872 | 873 | .md-col-8 { 874 | width: 66.66666666666666%; 875 | } 876 | 877 | .md-col-9 { 878 | width: 75%; 879 | } 880 | 881 | .md-col-10 { 882 | width: 83.33333333333334%; 883 | } 884 | 885 | .md-col-11 { 886 | width: 91.66666666666666%; 887 | } 888 | 889 | .md-col-12 { 890 | width: 100%; 891 | } 892 | } 893 | 894 | @media (min-width: 64em) { 895 | .lg-col { 896 | float: left; 897 | -moz-box-sizing: border-box; 898 | box-sizing: border-box; 899 | } 900 | 901 | .lg-col-right { 902 | float: right; 903 | -moz-box-sizing: border-box; 904 | box-sizing: border-box; 905 | } 906 | 907 | .lg-col-1 { 908 | width: 8.333333333333332%; 909 | } 910 | 911 | .lg-col-2 { 912 | width: 16.666666666666664%; 913 | } 914 | 915 | .lg-col-3 { 916 | width: 25%; 917 | } 918 | 919 | .lg-col-4 { 920 | width: 33.33333333333333%; 921 | } 922 | 923 | .lg-col-5 { 924 | width: 41.66666666666667%; 925 | } 926 | 927 | .lg-col-6 { 928 | width: 50%; 929 | } 930 | 931 | .lg-col-7 { 932 | width: 58.333333333333336%; 933 | } 934 | 935 | .lg-col-8 { 936 | width: 66.66666666666666%; 937 | } 938 | 939 | .lg-col-9 { 940 | width: 75%; 941 | } 942 | 943 | .lg-col-10 { 944 | width: 83.33333333333334%; 945 | } 946 | 947 | .lg-col-11 { 948 | width: 91.66666666666666%; 949 | } 950 | 951 | .lg-col-12 { 952 | width: 100%; 953 | } 954 | } 955 | 956 | /* 957 | 958 | Table Object 959 | http://jxnblk.github.io/table-object 960 | 961 | */ 962 | 963 | .table { 964 | display: table; 965 | width: 100%; 966 | } 967 | 968 | .table-cell { 969 | display: table-cell; 970 | vertical-align: middle; 971 | } 972 | 973 | .table-fixed { 974 | table-layout: fixed; 975 | } 976 | 977 | @media (min-width: 40em) { 978 | .sm-table { 979 | display: table; 980 | width: 100%; 981 | } 982 | 983 | .sm-table-cell { 984 | display: table-cell; 985 | vertical-align: middle; 986 | } 987 | } 988 | 989 | @media (min-width: 52em) { 990 | .md-table { 991 | display: table; 992 | width: 100%; 993 | } 994 | 995 | .md-table-cell { 996 | display: table-cell; 997 | vertical-align: middle; 998 | } 999 | } 1000 | 1001 | @media (min-width: 64em) { 1002 | .lg-table { 1003 | display: table; 1004 | width: 100%; 1005 | } 1006 | 1007 | .lg-table-cell { 1008 | display: table-cell; 1009 | vertical-align: middle; 1010 | } 1011 | } 1012 | 1013 | /* 1014 | * Basscss Color Basic 1015 | */ 1016 | 1017 | /* Base Element Themes */ 1018 | 1019 | body { 1020 | color: #333; 1021 | background-color: white; 1022 | } 1023 | 1024 | a { 1025 | color: #0076df; 1026 | text-decoration: none; 1027 | } 1028 | 1029 | a:hover { 1030 | text-decoration: underline; 1031 | } 1032 | 1033 | pre, 1034 | code { 1035 | background-color: #eee; 1036 | border-radius: 3px; 1037 | } 1038 | 1039 | hr { 1040 | border: 0; 1041 | border-bottom-style: solid; 1042 | border-bottom-width: 1px; 1043 | border-bottom-color: #ccc; 1044 | } 1045 | 1046 | .field-light { 1047 | background-color: white; 1048 | -webkit-transition: box-shadow .2s ease; 1049 | transition: box-shadow .2s ease; 1050 | border-style: solid; 1051 | border-width: 1px; 1052 | border-color: #ccc; 1053 | border-radius: 3px; 1054 | } 1055 | 1056 | .field-light:focus { 1057 | outline: none; 1058 | border-color: #0076df; 1059 | box-shadow: 0 0 2px rgba(0, 118, 223, .5); 1060 | } 1061 | 1062 | .field-light:disabled { 1063 | color: #777; 1064 | background-color: rgba(0, 0, 0, .125); 1065 | } 1066 | 1067 | .field-light:read-only:not(select) { 1068 | background-color: rgba(0, 0, 0, .125); 1069 | } 1070 | 1071 | .field-light:invalid { 1072 | border-color: #f95020; 1073 | } 1074 | 1075 | .field-light.is-success { 1076 | border-color: #00cf26; 1077 | } 1078 | 1079 | .field-light.is-warning { 1080 | border-color: #efcc00; 1081 | } 1082 | 1083 | .field-light.is-error { 1084 | border-color: #f95020; 1085 | } 1086 | 1087 | .radio-light, 1088 | .checkbox-light { 1089 | -webkit-transition: box-shadow .2s ease; 1090 | transition: box-shadow .2s ease; 1091 | } 1092 | 1093 | .radio-light { 1094 | border-radius: 50%; 1095 | } 1096 | 1097 | .radio-light:focus, 1098 | .checkbox-light:focus { 1099 | outline: none; 1100 | box-shadow: 0 0 2px rgba(0, 118, 223, .5); 1101 | } 1102 | 1103 | .field-dark { 1104 | color: white; 1105 | background-color: rgba(0, 0, 0, .25); 1106 | border: 1px solid rgba(0, 0, 0, .0625); 1107 | border-radius: 3px; 1108 | } 1109 | 1110 | .field-dark::-webkit-input-placeholder { 1111 | color: rgba(255, 255, 255, .75); 1112 | } 1113 | 1114 | .field-dark::-moz-placeholder { 1115 | color: rgba(255, 255, 255, .75); 1116 | } 1117 | 1118 | .field-dark:-ms-input-placeholder { 1119 | color: rgba(255, 255, 255, .75); 1120 | } 1121 | 1122 | .field-dark::placeholder { 1123 | color: rgba(255, 255, 255, .75); 1124 | } 1125 | 1126 | .field-dark:focus { 1127 | outline: 0; 1128 | border: 1px solid rgba(255, 255, 255, .5); 1129 | } 1130 | 1131 | .field-dark:read-only:not(select) { 1132 | background-color: rgba(255, 255, 255, .25); 1133 | } 1134 | 1135 | .field-dark:invalid { 1136 | border-color: #f95020; 1137 | } 1138 | 1139 | .field-dark.is-success { 1140 | border-color: #00cf26; 1141 | } 1142 | 1143 | .field-dark.is-warning { 1144 | border-color: #efcc00; 1145 | } 1146 | 1147 | .field-dark.is-error { 1148 | border-color: #f95020; 1149 | } 1150 | 1151 | .table-light th, 1152 | .table-light td { 1153 | border-bottom-style: solid; 1154 | border-bottom-width: 1px; 1155 | border-bottom-color: #ccc; 1156 | } 1157 | 1158 | .button-blue { 1159 | color: white; 1160 | background-color: #0076df; 1161 | border-radius: 3px; 1162 | -webkit-transition-duration: .1s; 1163 | transition-duration: .1s; 1164 | -webkit-transition-timing-function: ease-out; 1165 | transition-timing-function: ease-out; 1166 | -webkit-transition-property: box-shadow, background-color; 1167 | transition-property: box-shadow, background-color; 1168 | } 1169 | 1170 | .button-blue:hover { 1171 | opacity: .875; 1172 | } 1173 | 1174 | .button-blue:active, 1175 | .button-blue.is-active { 1176 | box-shadow: inset 0 0 0 32px rgba(0, 0, 0, .125), inset 0 2px 3px 0 rgba(0, 0, 0, .25); 1177 | } 1178 | 1179 | .button-blue:focus { 1180 | outline: none; 1181 | box-shadow: 0 0 0 2px rgba(255, 255, 255, .5), 0 0 1px 4px rgba(0, 118, 223, .5); 1182 | } 1183 | 1184 | .button-blue:disabled, 1185 | .button-blue.is-disabled { 1186 | opacity: .5; 1187 | } 1188 | 1189 | .button-blue-outline { 1190 | line-height: 1; 1191 | color: #0076df; 1192 | background-color: transparent; 1193 | border-radius: 3px; 1194 | border: 2px solid #0076df; 1195 | -webkit-transition-duration: .1s; 1196 | transition-duration: .1s; 1197 | -webkit-transition-timing-function: ease-out; 1198 | transition-timing-function: ease-out; 1199 | -webkit-transition-property: box-shadow, background-color; 1200 | transition-property: box-shadow, background-color; 1201 | } 1202 | 1203 | .button-blue-outline:hover, 1204 | .button-blue-outline.is-active { 1205 | color: white; 1206 | background-color: #0076df; 1207 | } 1208 | 1209 | .button-blue-outline:active { 1210 | box-shadow: inset 0 3px 3px 0 rgba(0, 0, 0, .25); 1211 | } 1212 | 1213 | .button-blue-outline:focus { 1214 | outline: none; 1215 | box-shadow: 0 0 0 2px rgba(255, 255, 255, .5), 0 0 1px 4px rgba(0, 118, 223, .5); 1216 | } 1217 | 1218 | .button-blue-outline:disabled, 1219 | .button-blue-outline.is-disabled { 1220 | color: #0076df; 1221 | background-color: transparent; 1222 | opacity: .5; 1223 | } 1224 | 1225 | .button-gray { 1226 | color: white; 1227 | background-color: #777; 1228 | border-radius: 3px; 1229 | -webkit-transition-duration: .1s; 1230 | transition-duration: .1s; 1231 | -webkit-transition-timing-function: ease-out; 1232 | transition-timing-function: ease-out; 1233 | -webkit-transition-property: box-shadow, background-color; 1234 | transition-property: box-shadow, background-color; 1235 | } 1236 | 1237 | .button-gray:hover { 1238 | opacity: .875; 1239 | } 1240 | 1241 | .button-gray:active, 1242 | .button-gray:is-active { 1243 | box-shadow: inset 0 0 0 32px rgba(0, 0, 0, .125), inset 0 2px 3px 0 rgba(0, 0, 0, .25); 1244 | } 1245 | 1246 | .button-gray:focus { 1247 | outline: none; 1248 | box-shadow: 0 0 0 2px white, 0 0 1px 4px rgba(0, 118, 223, .5); 1249 | } 1250 | 1251 | .button-gray:disabled, 1252 | .button-gray.is-disabled { 1253 | opacity: .5; 1254 | } 1255 | 1256 | .button-red { 1257 | color: white; 1258 | background-color: #f95020; 1259 | border-radius: 3px; 1260 | -webkit-transition-duration: .1s; 1261 | transition-duration: .1s; 1262 | -webkit-transition-timing-function: ease-out; 1263 | transition-timing-function: ease-out; 1264 | -webkit-transition-property: box-shadow, background-color; 1265 | transition-property: box-shadow, background-color; 1266 | } 1267 | 1268 | .button-red:hover { 1269 | opacity: .875; 1270 | } 1271 | 1272 | .button-red:active, 1273 | .button-red.is-active { 1274 | box-shadow: inset 0 0 0 32px rgba(0, 0, 0, .125), inset 0 2px 3px 0 rgba(0, 0, 0, .25); 1275 | } 1276 | 1277 | .button-red:focus { 1278 | outline: none; 1279 | box-shadow: 0 0 0 2px rgba(255, 255, 255, .5), 0 0 1px 4px rgba(249, 80, 32, .5); 1280 | } 1281 | 1282 | .button-red:disabled, 1283 | .button-red.is-disabled { 1284 | opacity: .5; 1285 | } 1286 | 1287 | 1288 | 1289 | .button-nav-light:hover { 1290 | background-color: rgba(0, 0, 0, .0625); 1291 | } 1292 | 1293 | .button-nav-light:active, 1294 | .button-nav-light.is-active { 1295 | color: #333; 1296 | } 1297 | 1298 | .button-nav-dark { 1299 | color: white; 1300 | } 1301 | 1302 | .button-nav-dark:hover { 1303 | background-color: rgba(0, 0, 0, .125); 1304 | } 1305 | 1306 | .button-nav-dark:active, 1307 | .button-nav-dark.is-active { 1308 | background-color: rgba(0, 0, 0, .125); 1309 | } 1310 | 1311 | .button-nav-tab { 1312 | margin-bottom: -1px; 1313 | border-radius: 3px 3px 0 0; 1314 | border-bottom: 1px solid #ccc; 1315 | } 1316 | 1317 | .button-nav-tab:hover { 1318 | background-color: rgba(0, 0, 0, .0625); 1319 | } 1320 | 1321 | .button-nav-tab.is-active { 1322 | background-color: white; 1323 | border-bottom: 1px solid white; 1324 | border-top: 1px solid #ccc; 1325 | border-left: 1px solid #ccc; 1326 | border-right: 1px solid #ccc; 1327 | } 1328 | 1329 | .dark-gray { 1330 | color: #333; 1331 | } 1332 | 1333 | .white { 1334 | color: white; 1335 | } 1336 | 1337 | .blue { 1338 | color: #0076df; 1339 | } 1340 | 1341 | .mid-gray { 1342 | color: #777; 1343 | } 1344 | 1345 | .light-gray { 1346 | color: #ccc; 1347 | } 1348 | 1349 | .lighter-gray { 1350 | color: #eee; 1351 | } 1352 | 1353 | .red { 1354 | color: #f95020; 1355 | } 1356 | 1357 | .green { 1358 | color: #00cf26; 1359 | } 1360 | 1361 | .yellow { 1362 | color: #efcc00; 1363 | } 1364 | 1365 | .bg-dark-gray { 1366 | background-color: #333; 1367 | } 1368 | 1369 | .bg-white { 1370 | background-color: white; 1371 | } 1372 | 1373 | .bg-blue { 1374 | background-color: #0076df; 1375 | } 1376 | 1377 | .bg-mid-gray { 1378 | background-color: #777; 1379 | } 1380 | 1381 | .bg-light-gray { 1382 | background-color: #ccc; 1383 | } 1384 | 1385 | .bg-lighter-gray { 1386 | background-color: #eee; 1387 | } 1388 | 1389 | .bg-red { 1390 | background-color: #f95020; 1391 | } 1392 | 1393 | .bg-green { 1394 | background-color: #00cf26; 1395 | } 1396 | 1397 | .bg-yellow { 1398 | background-color: #efcc00; 1399 | } 1400 | 1401 | .bg-darken-1 { 1402 | background-color: rgba(0, 0, 0, .0625); 1403 | } 1404 | 1405 | .bg-darken-2 { 1406 | background-color: rgba(0, 0, 0, .125); 1407 | } 1408 | 1409 | .bg-darken-3 { 1410 | background-color: rgba(0, 0, 0, .25); 1411 | } 1412 | 1413 | .bg-darken-4 { 1414 | background-color: rgba(0, 0, 0, .5); 1415 | } 1416 | 1417 | .border { 1418 | border-style: solid; 1419 | border-width: 1px; 1420 | border-color: #ccc; 1421 | } 1422 | 1423 | .border-top { 1424 | border-top-style: solid; 1425 | border-top-width: 1px; 1426 | border-top-color: #ccc; 1427 | } 1428 | 1429 | .border-right { 1430 | border-right-style: solid; 1431 | border-right-width: 1px; 1432 | border-right-color: #ccc; 1433 | } 1434 | 1435 | .border-bottom { 1436 | border-bottom-style: solid; 1437 | border-bottom-width: 1px; 1438 | border-bottom-color: #ccc; 1439 | } 1440 | 1441 | .border-left { 1442 | border-left-style: solid; 1443 | border-left-width: 1px; 1444 | border-left-color: #ccc; 1445 | } 1446 | 1447 | .rounded { 1448 | border-radius: 3px; 1449 | } 1450 | 1451 | .circle { 1452 | border-radius: 50%; 1453 | } 1454 | 1455 | .rounded-top { 1456 | border-radius: 3px 3px 0 0; 1457 | } 1458 | 1459 | .rounded-right { 1460 | border-radius: 0 3px 3px 0; 1461 | } 1462 | 1463 | .rounded-bottom { 1464 | border-radius: 0 0 3px 3px; 1465 | } 1466 | 1467 | .rounded-left { 1468 | border-radius: 3px 0 0 3px; 1469 | } 1470 | 1471 | .not-rounded { 1472 | border-radius: 0; 1473 | } 1474 | 1475 | /* Defaults */ 1476 | 1477 | -------------------------------------------------------------------------------- /test/fixtures/font-awesome.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.2.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"} -------------------------------------------------------------------------------- /test/fixtures/font-shorthand.css: -------------------------------------------------------------------------------- 1 | .a { 2 | font-size: 10px; 3 | } 4 | 5 | .b { 6 | font: italic bold 20px/1.5 Times, serif; 7 | } 8 | -------------------------------------------------------------------------------- /test/fixtures/gridio.css: -------------------------------------------------------------------------------- 1 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | } 35 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 36 | display: block; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 39 | display: block; 40 | -webkit-backface-visibility: hidden; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 43 | display: block; 44 | -webkit-transform: translateZ(0); 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 47 | position: absolute; 48 | } 49 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 50 | -webkit-transition: -webkit-transform 2s; 51 | -moz-transition: -moz-transform 2s; 52 | -ms-transition: -ms-transform 2s; 53 | -o-transition: -o-transform 2s; 54 | transition: transform 2s; 55 | } 56 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 57 | -webkit-transform: translateY(-100%); 58 | -moz-transform: translateY(-100%); 59 | -ms-transform: translateY(-100%); 60 | -o-transform: translateY(-100%); 61 | transform: translateY(-100%); 62 | } 63 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 64 | -webkit-transform: translateY(-100%); 65 | -moz-transform: translateY(-100%); 66 | -ms-transform: translateY(-100%); 67 | -o-transform: translateY(-100%); 68 | transform: translateY(-100%); 69 | } 70 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 71 | -webkit-transition: -webkit-transform 2s; 72 | -moz-transition: -moz-transform 2s; 73 | -ms-transition: -ms-transform 2s; 74 | -o-transition: -o-transform 2s; 75 | transition: transform 2s; 76 | -webkit-transform: translateY(0); 77 | -moz-transform: translateY(0); 78 | -ms-transform: translateY(0); 79 | -o-transform: translateY(0); 80 | transform: translateY(0); 81 | } 82 | 83 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 84 | font-family: "Helvetica Neue", sans-serif; 85 | line-height: 1.1em; 86 | } 87 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 88 | text-align: center; 89 | } 90 | -------------------------------------------------------------------------------- /test/fixtures/keyframes.css: -------------------------------------------------------------------------------- 1 | .a { 2 | color: red; 3 | } 4 | 5 | @keyframes 'loading-fade' { 6 | 10% { color: blue; } 7 | 20% { color: navy; } 8 | 30% { color: blue; } 9 | } 10 | 11 | .b { 12 | color: green; 13 | background-color: gray; 14 | } 15 | -------------------------------------------------------------------------------- /test/fixtures/small.css: -------------------------------------------------------------------------------- 1 | .red, #foo { color: red !important } 2 | 3 | .red { color: red } 4 | 5 | @media (min-width: 30em) { 6 | .sm-tomato { color: tomato; background-color: hotpink; -ms-border-radius: 0 } 7 | } 8 | 9 | .sm-tomato::after { content: 'hello' } 10 | 11 | .sm-tomato:first-child:last-child { opacity: .8; border-bottom: none; } 12 | 13 | .box { margin: 10px; padding: 5px; } 14 | .box:first-child { margin: 0px 0; } 15 | .box:last-child { margin-bottom: 0px; } 16 | 17 | @keyframes grow { 18 | 0% { 19 | opacity: 0; 20 | 21 | -webkit-transform: translateY(-20px) translate3d(0, 0, 0); 22 | -ms-transform: translateY(-20px) translate3d(0, 0, 0); 23 | transform: translateY(-20px) translate3d(0, 0, 0) !important; 24 | } 25 | 26 | 100% { 27 | opacity: 1; 28 | 29 | -webkit-transform: translateY(0) translate3d(0, 0, 0); 30 | -ms-transform: translateY(0) translate3d(0, 0, 0); 31 | transform: translateY(0) translate3d(0, 0, 0); 32 | } 33 | } 34 | 35 | header { padding: 0; } 36 | .georgia { font: 1.5em Georgia; } 37 | 38 | -------------------------------------------------------------------------------- /test/results/basscss.json: -------------------------------------------------------------------------------- 1 | { 2 | "size": 18858, 3 | "gzipSize": 3546, 4 | "humanizedSize": "18KB", 5 | "humanizedGzipSize": "3KB", 6 | "rules": { 7 | "total": 289, 8 | "size": { 9 | "graph": [ 10 | 1, 11 | 2, 12 | 1, 13 | 1, 14 | 3, 15 | 5, 16 | 3, 17 | 1, 18 | 2, 19 | 3, 20 | 2, 21 | 5, 22 | 2, 23 | 1, 24 | 1, 25 | 1, 26 | 1, 27 | 1, 28 | 1, 29 | 2, 30 | 2, 31 | 5, 32 | 4, 33 | 1, 34 | 4, 35 | 4, 36 | 1, 37 | 12, 38 | 2, 39 | 1, 40 | 4, 41 | 2, 42 | 2, 43 | 1, 44 | 1, 45 | 1, 46 | 1, 47 | 1, 48 | 1, 49 | 1, 50 | 2, 51 | 1, 52 | 1, 53 | 1, 54 | 1, 55 | 1, 56 | 1, 57 | 1, 58 | 1, 59 | 1, 60 | 2, 61 | 1, 62 | 1, 63 | 1, 64 | 1, 65 | 1, 66 | 1, 67 | 1, 68 | 1, 69 | 1, 70 | 1, 71 | 1, 72 | 1, 73 | 1, 74 | 1, 75 | 1, 76 | 1, 77 | 1, 78 | 1, 79 | 1, 80 | 1, 81 | 1, 82 | 1, 83 | 1, 84 | 1, 85 | 1, 86 | 1, 87 | 1, 88 | 1, 89 | 1, 90 | 1, 91 | 2, 92 | 2, 93 | 2, 94 | 2, 95 | 2, 96 | 1, 97 | 2, 98 | 2, 99 | 1, 100 | 2, 101 | 2, 102 | 1, 103 | 2, 104 | 2, 105 | 1, 106 | 2, 107 | 2, 108 | 1, 109 | 1, 110 | 1, 111 | 1, 112 | 1, 113 | 1, 114 | 1, 115 | 1, 116 | 5, 117 | 1, 118 | 1, 119 | 1, 120 | 1, 121 | 1, 122 | 1, 123 | 1, 124 | 1, 125 | 1, 126 | 1, 127 | 1, 128 | 6, 129 | 1, 130 | 1, 131 | 2, 132 | 1, 133 | 1, 134 | 1, 135 | 1, 136 | 1, 137 | 1, 138 | 1, 139 | 1, 140 | 2, 141 | 1, 142 | 1, 143 | 3, 144 | 3, 145 | 3, 146 | 1, 147 | 1, 148 | 1, 149 | 1, 150 | 1, 151 | 1, 152 | 1, 153 | 1, 154 | 1, 155 | 1, 156 | 1, 157 | 1, 158 | 3, 159 | 3, 160 | 1, 161 | 1, 162 | 1, 163 | 1, 164 | 1, 165 | 1, 166 | 1, 167 | 1, 168 | 1, 169 | 1, 170 | 1, 171 | 1, 172 | 3, 173 | 3, 174 | 1, 175 | 1, 176 | 1, 177 | 1, 178 | 1, 179 | 1, 180 | 1, 181 | 1, 182 | 1, 183 | 1, 184 | 1, 185 | 1, 186 | 3, 187 | 3, 188 | 1, 189 | 1, 190 | 1, 191 | 1, 192 | 1, 193 | 1, 194 | 1, 195 | 1, 196 | 1, 197 | 1, 198 | 1, 199 | 1, 200 | 2, 201 | 2, 202 | 1, 203 | 2, 204 | 2, 205 | 2, 206 | 2, 207 | 2, 208 | 2, 209 | 2, 210 | 2, 211 | 1, 212 | 2, 213 | 4, 214 | 7, 215 | 3, 216 | 2, 217 | 1, 218 | 1, 219 | 1, 220 | 1, 221 | 1, 222 | 2, 223 | 1, 224 | 2, 225 | 4, 226 | 1, 227 | 1, 228 | 1, 229 | 1, 230 | 2, 231 | 1, 232 | 1, 233 | 1, 234 | 1, 235 | 1, 236 | 3, 237 | 9, 238 | 1, 239 | 1, 240 | 2, 241 | 1, 242 | 11, 243 | 2, 244 | 1, 245 | 2, 246 | 3, 247 | 9, 248 | 1, 249 | 1, 250 | 2, 251 | 1, 252 | 9, 253 | 1, 254 | 1, 255 | 2, 256 | 1, 257 | 1, 258 | 1, 259 | 1, 260 | 1, 261 | 1, 262 | 3, 263 | 1, 264 | 5, 265 | 1, 266 | 1, 267 | 1, 268 | 1, 269 | 1, 270 | 1, 271 | 1, 272 | 1, 273 | 1, 274 | 1, 275 | 1, 276 | 1, 277 | 1, 278 | 1, 279 | 1, 280 | 1, 281 | 1, 282 | 1, 283 | 1, 284 | 1, 285 | 1, 286 | 1, 287 | 3, 288 | 3, 289 | 3, 290 | 3, 291 | 3, 292 | 1, 293 | 1, 294 | 1, 295 | 1, 296 | 1, 297 | 1, 298 | 1 299 | ], 300 | "max": 12, 301 | "average": 1.6297577854671281 302 | }, 303 | "selectorByRuleSizes": [ 304 | { 305 | "selector": "button,\n.button", 306 | "declarations": 12 307 | }, 308 | { 309 | "selector": ".button-blue-outline", 310 | "declarations": 11 311 | }, 312 | { 313 | "selector": ".button-red", 314 | "declarations": 9 315 | }, 316 | { 317 | "selector": ".button-gray", 318 | "declarations": 9 319 | }, 320 | { 321 | "selector": ".button-blue", 322 | "declarations": 9 323 | }, 324 | { 325 | "selector": ".field-light", 326 | "declarations": 7 327 | }, 328 | { 329 | "selector": ".absolute-center", 330 | "declarations": 6 331 | }, 332 | { 333 | "selector": ".button-nav-tab.is-active", 334 | "declarations": 5 335 | }, 336 | { 337 | "selector": ".hide", 338 | "declarations": 5 339 | }, 340 | { 341 | "selector": "input[type=text],\ninput[type=datetime],\ninput[type=datetime-local],\ninput[type=email],\ninput[type=month],\ninput[type=number],\ninput[type=password],\ninput[type=search],\ninput[type=tel],\ninput[type=time],\ninput[type=url],\ninput[type=week]", 342 | "declarations": 5 343 | }, 344 | { 345 | "selector": "blockquote", 346 | "declarations": 5 347 | }, 348 | { 349 | "selector": "h1,\nh2,\nh3,\nh4,\nh5,\nh6", 350 | "declarations": 5 351 | }, 352 | { 353 | "selector": ".field-dark", 354 | "declarations": 4 355 | }, 356 | { 357 | "selector": "hr", 358 | "declarations": 4 359 | }, 360 | { 361 | "selector": "table", 362 | "declarations": 4 363 | }, 364 | { 365 | "selector": ".fieldset-reset", 366 | "declarations": 4 367 | }, 368 | { 369 | "selector": "textarea", 370 | "declarations": 4 371 | }, 372 | { 373 | "selector": "select", 374 | "declarations": 4 375 | }, 376 | { 377 | "selector": ".border-left", 378 | "declarations": 3 379 | }, 380 | { 381 | "selector": ".border-bottom", 382 | "declarations": 3 383 | }, 384 | { 385 | "selector": ".border-right", 386 | "declarations": 3 387 | }, 388 | { 389 | "selector": ".border-top", 390 | "declarations": 3 391 | }, 392 | { 393 | "selector": ".border", 394 | "declarations": 3 395 | }, 396 | { 397 | "selector": ".button-nav-tab", 398 | "declarations": 3 399 | }, 400 | { 401 | "selector": ".button-blue-outline:disabled,\n.button-blue-outline.is-disabled", 402 | "declarations": 3 403 | }, 404 | { 405 | "selector": ".table-light th,\n.table-light td", 406 | "declarations": 3 407 | }, 408 | { 409 | "selector": ".field-light:focus", 410 | "declarations": 3 411 | }, 412 | { 413 | "selector": ".lg-col-right", 414 | "declarations": 3 415 | }, 416 | { 417 | "selector": ".lg-col", 418 | "declarations": 3 419 | }, 420 | { 421 | "selector": ".md-col-right", 422 | "declarations": 3 423 | }, 424 | { 425 | "selector": ".md-col", 426 | "declarations": 3 427 | }, 428 | { 429 | "selector": ".sm-col-right", 430 | "declarations": 3 431 | }, 432 | { 433 | "selector": ".sm-col", 434 | "declarations": 3 435 | }, 436 | { 437 | "selector": ".col-right", 438 | "declarations": 3 439 | }, 440 | { 441 | "selector": ".col", 442 | "declarations": 3 443 | }, 444 | { 445 | "selector": ".container", 446 | "declarations": 3 447 | }, 448 | { 449 | "selector": "pre", 450 | "declarations": 3 451 | }, 452 | { 453 | "selector": "p,\ndl,\nol,\nul", 454 | "declarations": 3 455 | }, 456 | { 457 | "selector": "body", 458 | "declarations": 3 459 | }, 460 | { 461 | "selector": ".button-red:focus", 462 | "declarations": 2 463 | }, 464 | { 465 | "selector": ".button-gray:focus", 466 | "declarations": 2 467 | }, 468 | { 469 | "selector": ".button-blue-outline:focus", 470 | "declarations": 2 471 | }, 472 | { 473 | "selector": ".button-blue-outline:hover,\n.button-blue-outline.is-active", 474 | "declarations": 2 475 | }, 476 | { 477 | "selector": ".button-blue:focus", 478 | "declarations": 2 479 | }, 480 | { 481 | "selector": ".field-dark:focus", 482 | "declarations": 2 483 | }, 484 | { 485 | "selector": ".radio-light:focus,\n.checkbox-light:focus", 486 | "declarations": 2 487 | }, 488 | { 489 | "selector": ".radio-light,\n.checkbox-light", 490 | "declarations": 2 491 | }, 492 | { 493 | "selector": ".field-light:disabled", 494 | "declarations": 2 495 | }, 496 | { 497 | "selector": "pre,\ncode", 498 | "declarations": 2 499 | }, 500 | { 501 | "selector": "a", 502 | "declarations": 2 503 | }, 504 | { 505 | "selector": "body", 506 | "declarations": 2 507 | }, 508 | { 509 | "selector": ".lg-table-cell", 510 | "declarations": 2 511 | }, 512 | { 513 | "selector": ".lg-table", 514 | "declarations": 2 515 | }, 516 | { 517 | "selector": ".md-table-cell", 518 | "declarations": 2 519 | }, 520 | { 521 | "selector": ".md-table", 522 | "declarations": 2 523 | }, 524 | { 525 | "selector": ".sm-table-cell", 526 | "declarations": 2 527 | }, 528 | { 529 | "selector": ".sm-table", 530 | "declarations": 2 531 | }, 532 | { 533 | "selector": ".table-cell", 534 | "declarations": 2 535 | }, 536 | { 537 | "selector": ".table", 538 | "declarations": 2 539 | }, 540 | { 541 | "selector": ".x-group-item:focus,\n.x-group-item-2:focus,\n.y-group-item:focus,\n.y-group-item-2:focus", 542 | "declarations": 2 543 | }, 544 | { 545 | "selector": ".button-narrow", 546 | "declarations": 2 547 | }, 548 | { 549 | "selector": ".px4", 550 | "declarations": 2 551 | }, 552 | { 553 | "selector": ".py4", 554 | "declarations": 2 555 | }, 556 | { 557 | "selector": ".px3", 558 | "declarations": 2 559 | }, 560 | { 561 | "selector": ".py3", 562 | "declarations": 2 563 | }, 564 | { 565 | "selector": ".px2", 566 | "declarations": 2 567 | }, 568 | { 569 | "selector": ".py2", 570 | "declarations": 2 571 | }, 572 | { 573 | "selector": ".px1", 574 | "declarations": 2 575 | }, 576 | { 577 | "selector": ".py1", 578 | "declarations": 2 579 | }, 580 | { 581 | "selector": ".mx-auto", 582 | "declarations": 2 583 | }, 584 | { 585 | "selector": ".mxn4", 586 | "declarations": 2 587 | }, 588 | { 589 | "selector": ".mxn3", 590 | "declarations": 2 591 | }, 592 | { 593 | "selector": ".mxn2", 594 | "declarations": 2 595 | }, 596 | { 597 | "selector": ".mxn1", 598 | "declarations": 2 599 | }, 600 | { 601 | "selector": ".caps", 602 | "declarations": 2 603 | }, 604 | { 605 | "selector": ".clearfix:before,\n.clearfix:after", 606 | "declarations": 2 607 | }, 608 | { 609 | "selector": "th,\ntd", 610 | "declarations": 2 611 | }, 612 | { 613 | "selector": "th", 614 | "declarations": 2 615 | }, 616 | { 617 | "selector": "::-moz-focus-inner", 618 | "declarations": 2 619 | }, 620 | { 621 | "selector": "input,\nselect,\ntextarea,\nfieldset", 622 | "declarations": 2 623 | }, 624 | { 625 | "selector": ".list-reset", 626 | "declarations": 2 627 | }, 628 | { 629 | "selector": "blockquote,\nblockquote p", 630 | "declarations": 2 631 | }, 632 | { 633 | "selector": "hr", 634 | "declarations": 2 635 | }, 636 | { 637 | "selector": "pre,\ncode,\nsamp", 638 | "declarations": 2 639 | }, 640 | { 641 | "selector": "button,\ninput,\nselect,\ntextarea", 642 | "declarations": 2 643 | }, 644 | { 645 | "selector": ".not-rounded", 646 | "declarations": 1 647 | }, 648 | { 649 | "selector": ".rounded-left", 650 | "declarations": 1 651 | }, 652 | { 653 | "selector": ".rounded-bottom", 654 | "declarations": 1 655 | }, 656 | { 657 | "selector": ".rounded-right", 658 | "declarations": 1 659 | }, 660 | { 661 | "selector": ".rounded-top", 662 | "declarations": 1 663 | }, 664 | { 665 | "selector": ".circle", 666 | "declarations": 1 667 | }, 668 | { 669 | "selector": ".rounded", 670 | "declarations": 1 671 | }, 672 | { 673 | "selector": ".bg-darken-4", 674 | "declarations": 1 675 | }, 676 | { 677 | "selector": ".bg-darken-3", 678 | "declarations": 1 679 | }, 680 | { 681 | "selector": ".bg-darken-2", 682 | "declarations": 1 683 | }, 684 | { 685 | "selector": ".bg-darken-1", 686 | "declarations": 1 687 | }, 688 | { 689 | "selector": ".bg-yellow", 690 | "declarations": 1 691 | }, 692 | { 693 | "selector": ".bg-green", 694 | "declarations": 1 695 | }, 696 | { 697 | "selector": ".bg-red", 698 | "declarations": 1 699 | }, 700 | { 701 | "selector": ".bg-lighter-gray", 702 | "declarations": 1 703 | }, 704 | { 705 | "selector": ".bg-light-gray", 706 | "declarations": 1 707 | }, 708 | { 709 | "selector": ".bg-mid-gray", 710 | "declarations": 1 711 | }, 712 | { 713 | "selector": ".bg-blue", 714 | "declarations": 1 715 | }, 716 | { 717 | "selector": ".bg-white", 718 | "declarations": 1 719 | }, 720 | { 721 | "selector": ".bg-dark-gray", 722 | "declarations": 1 723 | }, 724 | { 725 | "selector": ".yellow", 726 | "declarations": 1 727 | }, 728 | { 729 | "selector": ".green", 730 | "declarations": 1 731 | }, 732 | { 733 | "selector": ".red", 734 | "declarations": 1 735 | }, 736 | { 737 | "selector": ".lighter-gray", 738 | "declarations": 1 739 | }, 740 | { 741 | "selector": ".light-gray", 742 | "declarations": 1 743 | }, 744 | { 745 | "selector": ".mid-gray", 746 | "declarations": 1 747 | }, 748 | { 749 | "selector": ".blue", 750 | "declarations": 1 751 | }, 752 | { 753 | "selector": ".white", 754 | "declarations": 1 755 | }, 756 | { 757 | "selector": ".dark-gray", 758 | "declarations": 1 759 | }, 760 | { 761 | "selector": ".button-nav-tab:hover", 762 | "declarations": 1 763 | }, 764 | { 765 | "selector": ".button-nav-dark:active,\n.button-nav-dark.is-active", 766 | "declarations": 1 767 | }, 768 | { 769 | "selector": ".button-nav-dark:hover", 770 | "declarations": 1 771 | }, 772 | { 773 | "selector": ".button-nav-dark", 774 | "declarations": 1 775 | }, 776 | { 777 | "selector": ".button-nav-light:active,\n.button-nav-light.is-active", 778 | "declarations": 1 779 | }, 780 | { 781 | "selector": ".button-nav-light:hover", 782 | "declarations": 1 783 | }, 784 | { 785 | "selector": ".button-red:disabled,\n.button-red.is-disabled", 786 | "declarations": 1 787 | }, 788 | { 789 | "selector": ".button-red:active,\n.button-red.is-active", 790 | "declarations": 1 791 | }, 792 | { 793 | "selector": ".button-red:hover", 794 | "declarations": 1 795 | }, 796 | { 797 | "selector": ".button-gray:disabled,\n.button-gray.is-disabled", 798 | "declarations": 1 799 | }, 800 | { 801 | "selector": ".button-gray:active,\n.button-gray:is-active", 802 | "declarations": 1 803 | }, 804 | { 805 | "selector": ".button-gray:hover", 806 | "declarations": 1 807 | }, 808 | { 809 | "selector": ".button-blue-outline:active", 810 | "declarations": 1 811 | }, 812 | { 813 | "selector": ".button-blue:disabled,\n.button-blue.is-disabled", 814 | "declarations": 1 815 | }, 816 | { 817 | "selector": ".button-blue:active,\n.button-blue.is-active", 818 | "declarations": 1 819 | }, 820 | { 821 | "selector": ".button-blue:hover", 822 | "declarations": 1 823 | }, 824 | { 825 | "selector": ".field-dark.is-error", 826 | "declarations": 1 827 | }, 828 | { 829 | "selector": ".field-dark.is-warning", 830 | "declarations": 1 831 | }, 832 | { 833 | "selector": ".field-dark.is-success", 834 | "declarations": 1 835 | }, 836 | { 837 | "selector": ".field-dark:invalid", 838 | "declarations": 1 839 | }, 840 | { 841 | "selector": ".field-dark:read-only:not(select)", 842 | "declarations": 1 843 | }, 844 | { 845 | "selector": ".field-dark::placeholder", 846 | "declarations": 1 847 | }, 848 | { 849 | "selector": ".field-dark:-ms-input-placeholder", 850 | "declarations": 1 851 | }, 852 | { 853 | "selector": ".field-dark::-moz-placeholder", 854 | "declarations": 1 855 | }, 856 | { 857 | "selector": ".field-dark::-webkit-input-placeholder", 858 | "declarations": 1 859 | }, 860 | { 861 | "selector": ".radio-light", 862 | "declarations": 1 863 | }, 864 | { 865 | "selector": ".field-light.is-error", 866 | "declarations": 1 867 | }, 868 | { 869 | "selector": ".field-light.is-warning", 870 | "declarations": 1 871 | }, 872 | { 873 | "selector": ".field-light.is-success", 874 | "declarations": 1 875 | }, 876 | { 877 | "selector": ".field-light:invalid", 878 | "declarations": 1 879 | }, 880 | { 881 | "selector": ".field-light:read-only:not(select)", 882 | "declarations": 1 883 | }, 884 | { 885 | "selector": "a:hover", 886 | "declarations": 1 887 | }, 888 | { 889 | "selector": ".table-fixed", 890 | "declarations": 1 891 | }, 892 | { 893 | "selector": ".lg-col-12", 894 | "declarations": 1 895 | }, 896 | { 897 | "selector": ".lg-col-11", 898 | "declarations": 1 899 | }, 900 | { 901 | "selector": ".lg-col-10", 902 | "declarations": 1 903 | }, 904 | { 905 | "selector": ".lg-col-9", 906 | "declarations": 1 907 | }, 908 | { 909 | "selector": ".lg-col-8", 910 | "declarations": 1 911 | }, 912 | { 913 | "selector": ".lg-col-7", 914 | "declarations": 1 915 | }, 916 | { 917 | "selector": ".lg-col-6", 918 | "declarations": 1 919 | }, 920 | { 921 | "selector": ".lg-col-5", 922 | "declarations": 1 923 | }, 924 | { 925 | "selector": ".lg-col-4", 926 | "declarations": 1 927 | }, 928 | { 929 | "selector": ".lg-col-3", 930 | "declarations": 1 931 | }, 932 | { 933 | "selector": ".lg-col-2", 934 | "declarations": 1 935 | }, 936 | { 937 | "selector": ".lg-col-1", 938 | "declarations": 1 939 | }, 940 | { 941 | "selector": ".md-col-12", 942 | "declarations": 1 943 | }, 944 | { 945 | "selector": ".md-col-11", 946 | "declarations": 1 947 | }, 948 | { 949 | "selector": ".md-col-10", 950 | "declarations": 1 951 | }, 952 | { 953 | "selector": ".md-col-9", 954 | "declarations": 1 955 | }, 956 | { 957 | "selector": ".md-col-8", 958 | "declarations": 1 959 | }, 960 | { 961 | "selector": ".md-col-7", 962 | "declarations": 1 963 | }, 964 | { 965 | "selector": ".md-col-6", 966 | "declarations": 1 967 | }, 968 | { 969 | "selector": ".md-col-5", 970 | "declarations": 1 971 | }, 972 | { 973 | "selector": ".md-col-4", 974 | "declarations": 1 975 | }, 976 | { 977 | "selector": ".md-col-3", 978 | "declarations": 1 979 | }, 980 | { 981 | "selector": ".md-col-2", 982 | "declarations": 1 983 | }, 984 | { 985 | "selector": ".md-col-1", 986 | "declarations": 1 987 | }, 988 | { 989 | "selector": ".sm-col-12", 990 | "declarations": 1 991 | }, 992 | { 993 | "selector": ".sm-col-11", 994 | "declarations": 1 995 | }, 996 | { 997 | "selector": ".sm-col-10", 998 | "declarations": 1 999 | }, 1000 | { 1001 | "selector": ".sm-col-9", 1002 | "declarations": 1 1003 | }, 1004 | { 1005 | "selector": ".sm-col-8", 1006 | "declarations": 1 1007 | }, 1008 | { 1009 | "selector": ".sm-col-7", 1010 | "declarations": 1 1011 | }, 1012 | { 1013 | "selector": ".sm-col-6", 1014 | "declarations": 1 1015 | }, 1016 | { 1017 | "selector": ".sm-col-5", 1018 | "declarations": 1 1019 | }, 1020 | { 1021 | "selector": ".sm-col-4", 1022 | "declarations": 1 1023 | }, 1024 | { 1025 | "selector": ".sm-col-3", 1026 | "declarations": 1 1027 | }, 1028 | { 1029 | "selector": ".sm-col-2", 1030 | "declarations": 1 1031 | }, 1032 | { 1033 | "selector": ".sm-col-1", 1034 | "declarations": 1 1035 | }, 1036 | { 1037 | "selector": ".col-12", 1038 | "declarations": 1 1039 | }, 1040 | { 1041 | "selector": ".col-11", 1042 | "declarations": 1 1043 | }, 1044 | { 1045 | "selector": ".col-10", 1046 | "declarations": 1 1047 | }, 1048 | { 1049 | "selector": ".col-9", 1050 | "declarations": 1 1051 | }, 1052 | { 1053 | "selector": ".col-8", 1054 | "declarations": 1 1055 | }, 1056 | { 1057 | "selector": ".col-7", 1058 | "declarations": 1 1059 | }, 1060 | { 1061 | "selector": ".col-6", 1062 | "declarations": 1 1063 | }, 1064 | { 1065 | "selector": ".col-5", 1066 | "declarations": 1 1067 | }, 1068 | { 1069 | "selector": ".col-4", 1070 | "declarations": 1 1071 | }, 1072 | { 1073 | "selector": ".col-3", 1074 | "declarations": 1 1075 | }, 1076 | { 1077 | "selector": ".col-2", 1078 | "declarations": 1 1079 | }, 1080 | { 1081 | "selector": ".col-1", 1082 | "declarations": 1 1083 | }, 1084 | { 1085 | "selector": ".disclosure-group.is-active .disclosure-show", 1086 | "declarations": 1 1087 | }, 1088 | { 1089 | "selector": ".disclosure-group .disclosure-show", 1090 | "declarations": 1 1091 | }, 1092 | { 1093 | "selector": ".y-group-item-2:first-of-type", 1094 | "declarations": 1 1095 | }, 1096 | { 1097 | "selector": ".y-group-item-2", 1098 | "declarations": 1 1099 | }, 1100 | { 1101 | "selector": ".x-group-item-2:first-of-type", 1102 | "declarations": 1 1103 | }, 1104 | { 1105 | "selector": ".x-group-item-2", 1106 | "declarations": 1 1107 | }, 1108 | { 1109 | "selector": ".y-group-item:first-of-type", 1110 | "declarations": 1 1111 | }, 1112 | { 1113 | "selector": ".y-group-item", 1114 | "declarations": 1 1115 | }, 1116 | { 1117 | "selector": ".x-group-item:first-of-type", 1118 | "declarations": 1 1119 | }, 1120 | { 1121 | "selector": ".x-group-item", 1122 | "declarations": 1 1123 | }, 1124 | { 1125 | "selector": ".button-big", 1126 | "declarations": 1 1127 | }, 1128 | { 1129 | "selector": ".button-small", 1130 | "declarations": 1 1131 | }, 1132 | { 1133 | "selector": ".z4", 1134 | "declarations": 1 1135 | }, 1136 | { 1137 | "selector": ".z3", 1138 | "declarations": 1 1139 | }, 1140 | { 1141 | "selector": ".z2", 1142 | "declarations": 1 1143 | }, 1144 | { 1145 | "selector": ".z1", 1146 | "declarations": 1 1147 | }, 1148 | { 1149 | "selector": ".left-0", 1150 | "declarations": 1 1151 | }, 1152 | { 1153 | "selector": ".bottom-0", 1154 | "declarations": 1 1155 | }, 1156 | { 1157 | "selector": ".right-0", 1158 | "declarations": 1 1159 | }, 1160 | { 1161 | "selector": ".top-0", 1162 | "declarations": 1 1163 | }, 1164 | { 1165 | "selector": ".fixed", 1166 | "declarations": 1 1167 | }, 1168 | { 1169 | "selector": ".absolute", 1170 | "declarations": 1 1171 | }, 1172 | { 1173 | "selector": ".relative", 1174 | "declarations": 1 1175 | }, 1176 | { 1177 | "selector": ".display-none", 1178 | "declarations": 1 1179 | }, 1180 | { 1181 | "selector": ".lg-hide", 1182 | "declarations": 1 1183 | }, 1184 | { 1185 | "selector": ".md-hide", 1186 | "declarations": 1 1187 | }, 1188 | { 1189 | "selector": ".sm-hide", 1190 | "declarations": 1 1191 | }, 1192 | { 1193 | "selector": ".lg-show", 1194 | "declarations": 1 1195 | }, 1196 | { 1197 | "selector": ".md-show", 1198 | "declarations": 1 1199 | }, 1200 | { 1201 | "selector": ".sm-show", 1202 | "declarations": 1 1203 | }, 1204 | { 1205 | "selector": ".sm-show,\n.md-show,\n.lg-show", 1206 | "declarations": 1 1207 | }, 1208 | { 1209 | "selector": ".p4", 1210 | "declarations": 1 1211 | }, 1212 | { 1213 | "selector": ".p3", 1214 | "declarations": 1 1215 | }, 1216 | { 1217 | "selector": ".p2", 1218 | "declarations": 1 1219 | }, 1220 | { 1221 | "selector": ".p1", 1222 | "declarations": 1 1223 | }, 1224 | { 1225 | "selector": ".ml4", 1226 | "declarations": 1 1227 | }, 1228 | { 1229 | "selector": ".mb4", 1230 | "declarations": 1 1231 | }, 1232 | { 1233 | "selector": ".mr4", 1234 | "declarations": 1 1235 | }, 1236 | { 1237 | "selector": ".mt4", 1238 | "declarations": 1 1239 | }, 1240 | { 1241 | "selector": ".m4", 1242 | "declarations": 1 1243 | }, 1244 | { 1245 | "selector": ".ml3", 1246 | "declarations": 1 1247 | }, 1248 | { 1249 | "selector": ".mb3", 1250 | "declarations": 1 1251 | }, 1252 | { 1253 | "selector": ".mr3", 1254 | "declarations": 1 1255 | }, 1256 | { 1257 | "selector": ".mt3", 1258 | "declarations": 1 1259 | }, 1260 | { 1261 | "selector": ".m3", 1262 | "declarations": 1 1263 | }, 1264 | { 1265 | "selector": ".ml2", 1266 | "declarations": 1 1267 | }, 1268 | { 1269 | "selector": ".mb2", 1270 | "declarations": 1 1271 | }, 1272 | { 1273 | "selector": ".mr2", 1274 | "declarations": 1 1275 | }, 1276 | { 1277 | "selector": ".mt2", 1278 | "declarations": 1 1279 | }, 1280 | { 1281 | "selector": ".m2", 1282 | "declarations": 1 1283 | }, 1284 | { 1285 | "selector": ".ml1", 1286 | "declarations": 1 1287 | }, 1288 | { 1289 | "selector": ".mb1", 1290 | "declarations": 1 1291 | }, 1292 | { 1293 | "selector": ".mr1", 1294 | "declarations": 1 1295 | }, 1296 | { 1297 | "selector": ".mt1", 1298 | "declarations": 1 1299 | }, 1300 | { 1301 | "selector": ".m1", 1302 | "declarations": 1 1303 | }, 1304 | { 1305 | "selector": ".ml0", 1306 | "declarations": 1 1307 | }, 1308 | { 1309 | "selector": ".mb0", 1310 | "declarations": 1 1311 | }, 1312 | { 1313 | "selector": ".mr0", 1314 | "declarations": 1 1315 | }, 1316 | { 1317 | "selector": ".mt0", 1318 | "declarations": 1 1319 | }, 1320 | { 1321 | "selector": ".m0", 1322 | "declarations": 1 1323 | }, 1324 | { 1325 | "selector": ".nowrap", 1326 | "declarations": 1 1327 | }, 1328 | { 1329 | "selector": ".justify", 1330 | "declarations": 1 1331 | }, 1332 | { 1333 | "selector": ".right-align", 1334 | "declarations": 1 1335 | }, 1336 | { 1337 | "selector": ".center", 1338 | "declarations": 1 1339 | }, 1340 | { 1341 | "selector": ".left-align", 1342 | "declarations": 1 1343 | }, 1344 | { 1345 | "selector": ".italic", 1346 | "declarations": 1 1347 | }, 1348 | { 1349 | "selector": ".regular", 1350 | "declarations": 1 1351 | }, 1352 | { 1353 | "selector": ".bold", 1354 | "declarations": 1 1355 | }, 1356 | { 1357 | "selector": ".full-width", 1358 | "declarations": 1 1359 | }, 1360 | { 1361 | "selector": ".half-width", 1362 | "declarations": 1 1363 | }, 1364 | { 1365 | "selector": ".fit", 1366 | "declarations": 1 1367 | }, 1368 | { 1369 | "selector": ".right", 1370 | "declarations": 1 1371 | }, 1372 | { 1373 | "selector": ".left", 1374 | "declarations": 1 1375 | }, 1376 | { 1377 | "selector": ".clearfix:after", 1378 | "declarations": 1 1379 | }, 1380 | { 1381 | "selector": ".overflow-scroll", 1382 | "declarations": 1 1383 | }, 1384 | { 1385 | "selector": ".overflow-hidden", 1386 | "declarations": 1 1387 | }, 1388 | { 1389 | "selector": ".inline-block", 1390 | "declarations": 1 1391 | }, 1392 | { 1393 | "selector": ".block", 1394 | "declarations": 1 1395 | }, 1396 | { 1397 | "selector": ".inline", 1398 | "declarations": 1 1399 | }, 1400 | { 1401 | "selector": "td", 1402 | "declarations": 1 1403 | }, 1404 | { 1405 | "selector": "th", 1406 | "declarations": 1 1407 | }, 1408 | { 1409 | "selector": ".button:hover", 1410 | "declarations": 1 1411 | }, 1412 | { 1413 | "selector": ".fieldset-reset legend", 1414 | "declarations": 1 1415 | }, 1416 | { 1417 | "selector": "select:not([multiple])", 1418 | "declarations": 1 1419 | }, 1420 | { 1421 | "selector": "h6,\n.h6", 1422 | "declarations": 1 1423 | }, 1424 | { 1425 | "selector": "h5,\n.h5", 1426 | "declarations": 1 1427 | }, 1428 | { 1429 | "selector": "h4,\n.h4", 1430 | "declarations": 1 1431 | }, 1432 | { 1433 | "selector": "h3,\n.h3", 1434 | "declarations": 1 1435 | }, 1436 | { 1437 | "selector": "h2,\n.h2", 1438 | "declarations": 1 1439 | }, 1440 | { 1441 | "selector": "h1,\n.h1", 1442 | "declarations": 1 1443 | }, 1444 | { 1445 | "selector": "ol,\nul", 1446 | "declarations": 1 1447 | }, 1448 | { 1449 | "selector": "svg", 1450 | "declarations": 1 1451 | }, 1452 | { 1453 | "selector": "img", 1454 | "declarations": 1 1455 | }, 1456 | { 1457 | "selector": "body,\nbutton", 1458 | "declarations": 1 1459 | } 1460 | ] 1461 | }, 1462 | "selectors": { 1463 | "total": 347, 1464 | "type": 70, 1465 | "class": 279, 1466 | "id": 0, 1467 | "pseudoClass": 41, 1468 | "pseudoElement": 3, 1469 | "values": [ 1470 | "body", 1471 | "button", 1472 | "button", 1473 | "input", 1474 | "select", 1475 | "textarea", 1476 | "img", 1477 | "svg", 1478 | "body", 1479 | "h1", 1480 | "h2", 1481 | "h3", 1482 | "h4", 1483 | "h5", 1484 | "h6", 1485 | "p", 1486 | "dl", 1487 | "ol", 1488 | "ul", 1489 | "ol", 1490 | "ul", 1491 | "pre", 1492 | "code", 1493 | "samp", 1494 | "pre", 1495 | "hr", 1496 | "blockquote", 1497 | "blockquote", 1498 | "blockquote p", 1499 | "h1", 1500 | ".h1", 1501 | "h2", 1502 | ".h2", 1503 | "h3", 1504 | ".h3", 1505 | "h4", 1506 | ".h4", 1507 | "h5", 1508 | ".h5", 1509 | "h6", 1510 | ".h6", 1511 | ".list-reset", 1512 | "input", 1513 | "select", 1514 | "textarea", 1515 | "fieldset", 1516 | "input[type=text]", 1517 | "input[type=datetime]", 1518 | "input[type=datetime-local]", 1519 | "input[type=email]", 1520 | "input[type=month]", 1521 | "input[type=number]", 1522 | "input[type=password]", 1523 | "input[type=search]", 1524 | "input[type=tel]", 1525 | "input[type=time]", 1526 | "input[type=url]", 1527 | "input[type=week]", 1528 | "select", 1529 | "select:not([multiple])", 1530 | "textarea", 1531 | ".fieldset-reset", 1532 | ".fieldset-reset legend", 1533 | "button", 1534 | ".button", 1535 | "::-moz-focus-inner", 1536 | ".button:hover", 1537 | "table", 1538 | "th", 1539 | "th", 1540 | "td", 1541 | "th", 1542 | "td", 1543 | ".inline", 1544 | ".block", 1545 | ".inline-block", 1546 | ".overflow-hidden", 1547 | ".overflow-scroll", 1548 | ".clearfix:before", 1549 | ".clearfix:after", 1550 | ".clearfix:after", 1551 | ".left", 1552 | ".right", 1553 | ".fit", 1554 | ".half-width", 1555 | ".full-width", 1556 | ".bold", 1557 | ".regular", 1558 | ".italic", 1559 | ".caps", 1560 | ".left-align", 1561 | ".center", 1562 | ".right-align", 1563 | ".justify", 1564 | ".nowrap", 1565 | ".m0", 1566 | ".mt0", 1567 | ".mr0", 1568 | ".mb0", 1569 | ".ml0", 1570 | ".m1", 1571 | ".mt1", 1572 | ".mr1", 1573 | ".mb1", 1574 | ".ml1", 1575 | ".m2", 1576 | ".mt2", 1577 | ".mr2", 1578 | ".mb2", 1579 | ".ml2", 1580 | ".m3", 1581 | ".mt3", 1582 | ".mr3", 1583 | ".mb3", 1584 | ".ml3", 1585 | ".m4", 1586 | ".mt4", 1587 | ".mr4", 1588 | ".mb4", 1589 | ".ml4", 1590 | ".mxn1", 1591 | ".mxn2", 1592 | ".mxn3", 1593 | ".mxn4", 1594 | ".mx-auto", 1595 | ".p1", 1596 | ".py1", 1597 | ".px1", 1598 | ".p2", 1599 | ".py2", 1600 | ".px2", 1601 | ".p3", 1602 | ".py3", 1603 | ".px3", 1604 | ".p4", 1605 | ".py4", 1606 | ".px4", 1607 | ".sm-show", 1608 | ".md-show", 1609 | ".lg-show", 1610 | ".sm-show", 1611 | ".md-show", 1612 | ".lg-show", 1613 | ".sm-hide", 1614 | ".md-hide", 1615 | ".lg-hide", 1616 | ".display-none", 1617 | ".hide", 1618 | ".relative", 1619 | ".absolute", 1620 | ".fixed", 1621 | ".top-0", 1622 | ".right-0", 1623 | ".bottom-0", 1624 | ".left-0", 1625 | ".z1", 1626 | ".z2", 1627 | ".z3", 1628 | ".z4", 1629 | ".absolute-center", 1630 | ".button-small", 1631 | ".button-big", 1632 | ".button-narrow", 1633 | ".x-group-item", 1634 | ".x-group-item:first-of-type", 1635 | ".y-group-item", 1636 | ".y-group-item:first-of-type", 1637 | ".x-group-item-2", 1638 | ".x-group-item-2:first-of-type", 1639 | ".y-group-item-2", 1640 | ".y-group-item-2:first-of-type", 1641 | ".x-group-item:focus", 1642 | ".x-group-item-2:focus", 1643 | ".y-group-item:focus", 1644 | ".y-group-item-2:focus", 1645 | ".disclosure-group .disclosure-show", 1646 | ".disclosure-group.is-active .disclosure-show", 1647 | ".container", 1648 | ".col", 1649 | ".col-right", 1650 | ".col-1", 1651 | ".col-2", 1652 | ".col-3", 1653 | ".col-4", 1654 | ".col-5", 1655 | ".col-6", 1656 | ".col-7", 1657 | ".col-8", 1658 | ".col-9", 1659 | ".col-10", 1660 | ".col-11", 1661 | ".col-12", 1662 | ".sm-col", 1663 | ".sm-col-right", 1664 | ".sm-col-1", 1665 | ".sm-col-2", 1666 | ".sm-col-3", 1667 | ".sm-col-4", 1668 | ".sm-col-5", 1669 | ".sm-col-6", 1670 | ".sm-col-7", 1671 | ".sm-col-8", 1672 | ".sm-col-9", 1673 | ".sm-col-10", 1674 | ".sm-col-11", 1675 | ".sm-col-12", 1676 | ".md-col", 1677 | ".md-col-right", 1678 | ".md-col-1", 1679 | ".md-col-2", 1680 | ".md-col-3", 1681 | ".md-col-4", 1682 | ".md-col-5", 1683 | ".md-col-6", 1684 | ".md-col-7", 1685 | ".md-col-8", 1686 | ".md-col-9", 1687 | ".md-col-10", 1688 | ".md-col-11", 1689 | ".md-col-12", 1690 | ".lg-col", 1691 | ".lg-col-right", 1692 | ".lg-col-1", 1693 | ".lg-col-2", 1694 | ".lg-col-3", 1695 | ".lg-col-4", 1696 | ".lg-col-5", 1697 | ".lg-col-6", 1698 | ".lg-col-7", 1699 | ".lg-col-8", 1700 | ".lg-col-9", 1701 | ".lg-col-10", 1702 | ".lg-col-11", 1703 | ".lg-col-12", 1704 | ".table", 1705 | ".table-cell", 1706 | ".table-fixed", 1707 | ".sm-table", 1708 | ".sm-table-cell", 1709 | ".md-table", 1710 | ".md-table-cell", 1711 | ".lg-table", 1712 | ".lg-table-cell", 1713 | "body", 1714 | "a", 1715 | "a:hover", 1716 | "pre", 1717 | "code", 1718 | "hr", 1719 | ".field-light", 1720 | ".field-light:focus", 1721 | ".field-light:disabled", 1722 | ".field-light:read-only:not(select)", 1723 | ".field-light:invalid", 1724 | ".field-light.is-success", 1725 | ".field-light.is-warning", 1726 | ".field-light.is-error", 1727 | ".radio-light", 1728 | ".checkbox-light", 1729 | ".radio-light", 1730 | ".radio-light:focus", 1731 | ".checkbox-light:focus", 1732 | ".field-dark", 1733 | ".field-dark::-webkit-input-placeholder", 1734 | ".field-dark::-moz-placeholder", 1735 | ".field-dark:-ms-input-placeholder", 1736 | ".field-dark::placeholder", 1737 | ".field-dark:focus", 1738 | ".field-dark:read-only:not(select)", 1739 | ".field-dark:invalid", 1740 | ".field-dark.is-success", 1741 | ".field-dark.is-warning", 1742 | ".field-dark.is-error", 1743 | ".table-light th", 1744 | ".table-light td", 1745 | ".button-blue", 1746 | ".button-blue:hover", 1747 | ".button-blue:active", 1748 | ".button-blue.is-active", 1749 | ".button-blue:focus", 1750 | ".button-blue:disabled", 1751 | ".button-blue.is-disabled", 1752 | ".button-blue-outline", 1753 | ".button-blue-outline:hover", 1754 | ".button-blue-outline.is-active", 1755 | ".button-blue-outline:active", 1756 | ".button-blue-outline:focus", 1757 | ".button-blue-outline:disabled", 1758 | ".button-blue-outline.is-disabled", 1759 | ".button-gray", 1760 | ".button-gray:hover", 1761 | ".button-gray:active", 1762 | ".button-gray:is-active", 1763 | ".button-gray:focus", 1764 | ".button-gray:disabled", 1765 | ".button-gray.is-disabled", 1766 | ".button-red", 1767 | ".button-red:hover", 1768 | ".button-red:active", 1769 | ".button-red.is-active", 1770 | ".button-red:focus", 1771 | ".button-red:disabled", 1772 | ".button-red.is-disabled", 1773 | ".button-nav-light:hover", 1774 | ".button-nav-light:active", 1775 | ".button-nav-light.is-active", 1776 | ".button-nav-dark", 1777 | ".button-nav-dark:hover", 1778 | ".button-nav-dark:active", 1779 | ".button-nav-dark.is-active", 1780 | ".button-nav-tab", 1781 | ".button-nav-tab:hover", 1782 | ".button-nav-tab.is-active", 1783 | ".dark-gray", 1784 | ".white", 1785 | ".blue", 1786 | ".mid-gray", 1787 | ".light-gray", 1788 | ".lighter-gray", 1789 | ".red", 1790 | ".green", 1791 | ".yellow", 1792 | ".bg-dark-gray", 1793 | ".bg-white", 1794 | ".bg-blue", 1795 | ".bg-mid-gray", 1796 | ".bg-light-gray", 1797 | ".bg-lighter-gray", 1798 | ".bg-red", 1799 | ".bg-green", 1800 | ".bg-yellow", 1801 | ".bg-darken-1", 1802 | ".bg-darken-2", 1803 | ".bg-darken-3", 1804 | ".bg-darken-4", 1805 | ".border", 1806 | ".border-top", 1807 | ".border-right", 1808 | ".border-bottom", 1809 | ".border-left", 1810 | ".rounded", 1811 | ".circle", 1812 | ".rounded-top", 1813 | ".rounded-right", 1814 | ".rounded-bottom", 1815 | ".rounded-left", 1816 | ".not-rounded" 1817 | ], 1818 | "specificity": { 1819 | "max": 30, 1820 | "average": 10.403458213256485 1821 | } 1822 | }, 1823 | "declarations": { 1824 | "total": 471, 1825 | "unique": 232, 1826 | "properties": { 1827 | "margin": [ 1828 | "0", 1829 | "0", 1830 | "0", 1831 | ".5rem", 1832 | "1rem", 1833 | "2rem", 1834 | "4rem", 1835 | "auto" 1836 | ], 1837 | "font-family": [ 1838 | "inherit", 1839 | "'Helvetica Neue', Helvetica, sans-serif", 1840 | "'Helvetica Neue', Helvetica, sans-serif", 1841 | "'Source Code Pro', Consolas, monospace" 1842 | ], 1843 | "font-size": [ 1844 | "100%", 1845 | "100%", 1846 | "1rem", 1847 | "inherit", 1848 | "1.25rem", 1849 | "2rem", 1850 | "1.5rem", 1851 | "1.25rem", 1852 | "1rem", 1853 | ".875rem", 1854 | ".75rem" 1855 | ], 1856 | "max-width": [ 1857 | "100%", 1858 | "100%", 1859 | "100%", 1860 | "64em" 1861 | ], 1862 | "max-height": [ 1863 | "100%" 1864 | ], 1865 | "line-height": [ 1866 | "1.5", 1867 | "1.25", 1868 | "1.75", 1869 | "1.75", 1870 | "1.125", 1871 | "inherit", 1872 | "1.625", 1873 | "1" 1874 | ], 1875 | "font-weight": [ 1876 | "bold", 1877 | "bold", 1878 | "bold", 1879 | "bold", 1880 | "normal" 1881 | ], 1882 | "margin-top": [ 1883 | "1em", 1884 | "0", 1885 | "0", 1886 | "2rem", 1887 | "2rem", 1888 | "0", 1889 | "0", 1890 | ".5rem", 1891 | "1rem", 1892 | "2rem", 1893 | "4rem", 1894 | "-1px", 1895 | "0", 1896 | "-2px", 1897 | "0" 1898 | ], 1899 | "margin-bottom": [ 1900 | ".5em", 1901 | "1rem", 1902 | "1rem", 1903 | "2rem", 1904 | "2rem", 1905 | ".5rem", 1906 | "0", 1907 | ".5rem", 1908 | "1rem", 1909 | "2rem", 1910 | "4rem", 1911 | "-1px" 1912 | ], 1913 | "padding-left": [ 1914 | "2rem", 1915 | "1rem", 1916 | "0", 1917 | ".5rem", 1918 | "1rem", 1919 | "2rem", 1920 | "4rem", 1921 | ".5rem" 1922 | ], 1923 | "overflow-x": [ 1924 | "scroll" 1925 | ], 1926 | "margin-left": [ 1927 | "0", 1928 | "0", 1929 | "0", 1930 | ".5rem", 1931 | "1rem", 1932 | "2rem", 1933 | "4rem", 1934 | "-.5rem", 1935 | "-1rem", 1936 | "-2rem", 1937 | "-4rem", 1938 | "auto", 1939 | "-1px", 1940 | "0", 1941 | "-2px", 1942 | "0", 1943 | "auto" 1944 | ], 1945 | "padding-right": [ 1946 | "1rem", 1947 | ".5rem", 1948 | "1rem", 1949 | "2rem", 1950 | "4rem", 1951 | ".5rem" 1952 | ], 1953 | "font-style": [ 1954 | "italic", 1955 | "italic" 1956 | ], 1957 | "list-style": [ 1958 | "none" 1959 | ], 1960 | "-moz-box-sizing": [ 1961 | "border-box", 1962 | "border-box", 1963 | "border-box", 1964 | "border-box", 1965 | "border-box", 1966 | "border-box", 1967 | "border-box", 1968 | "border-box", 1969 | "border-box", 1970 | "border-box", 1971 | "border-box", 1972 | "border-box" 1973 | ], 1974 | "box-sizing": [ 1975 | "border-box", 1976 | "border-box", 1977 | "border-box", 1978 | "border-box", 1979 | "border-box", 1980 | "border-box", 1981 | "border-box", 1982 | "border-box", 1983 | "border-box", 1984 | "border-box", 1985 | "border-box", 1986 | "border-box" 1987 | ], 1988 | "height": [ 1989 | "2.25em", 1990 | "2.25em", 1991 | "auto", 1992 | "1px" 1993 | ], 1994 | "padding": [ 1995 | ".25em 1rem", 1996 | ".25em 1rem", 1997 | ".25em 1rem", 1998 | "0", 1999 | "0", 2000 | ".5em 1rem", 2001 | "0", 2002 | ".25em 1rem", 2003 | ".5rem", 2004 | "1rem", 2005 | "2rem", 2006 | "4rem", 2007 | ".25em .5rem" 2008 | ], 2009 | "-webkit-appearance": [ 2010 | "none", 2011 | "none" 2012 | ], 2013 | "margin-right": [ 2014 | "0", 2015 | "0", 2016 | ".5rem", 2017 | "1rem", 2018 | "2rem", 2019 | "4rem", 2020 | "-.5rem", 2021 | "-1rem", 2022 | "-2rem", 2023 | "-4rem", 2024 | "auto", 2025 | "auto" 2026 | ], 2027 | "border": [ 2028 | "0", 2029 | "1px solid transparent", 2030 | "0", 2031 | "0", 2032 | "1px solid rgba(0, 0, 0, .0625)", 2033 | "1px solid rgba(255, 255, 255, .5)", 2034 | "2px solid #0076df" 2035 | ], 2036 | "text-decoration": [ 2037 | "none", 2038 | "none", 2039 | "none", 2040 | "underline" 2041 | ], 2042 | "cursor": [ 2043 | "pointer" 2044 | ], 2045 | "display": [ 2046 | "inline-block", 2047 | "inline", 2048 | "block", 2049 | "inline-block", 2050 | "table", 2051 | "none", 2052 | "block", 2053 | "block", 2054 | "block", 2055 | "none", 2056 | "none", 2057 | "none", 2058 | "none", 2059 | "table", 2060 | "none", 2061 | "block", 2062 | "table", 2063 | "table-cell", 2064 | "table", 2065 | "table-cell", 2066 | "table", 2067 | "table-cell", 2068 | "table", 2069 | "table-cell" 2070 | ], 2071 | "border-collapse": [ 2072 | "collapse" 2073 | ], 2074 | "border-spacing": [ 2075 | "0" 2076 | ], 2077 | "width": [ 2078 | "100%", 2079 | "50%", 2080 | "100%", 2081 | "1px", 2082 | "8.333333333333332%", 2083 | "16.666666666666664%", 2084 | "25%", 2085 | "33.33333333333333%", 2086 | "41.66666666666667%", 2087 | "50%", 2088 | "58.333333333333336%", 2089 | "66.66666666666666%", 2090 | "75%", 2091 | "83.33333333333334%", 2092 | "91.66666666666666%", 2093 | "100%", 2094 | "8.333333333333332%", 2095 | "16.666666666666664%", 2096 | "25%", 2097 | "33.33333333333333%", 2098 | "41.66666666666667%", 2099 | "50%", 2100 | "58.333333333333336%", 2101 | "66.66666666666666%", 2102 | "75%", 2103 | "83.33333333333334%", 2104 | "91.66666666666666%", 2105 | "100%", 2106 | "8.333333333333332%", 2107 | "16.666666666666664%", 2108 | "25%", 2109 | "33.33333333333333%", 2110 | "41.66666666666667%", 2111 | "50%", 2112 | "58.333333333333336%", 2113 | "66.66666666666666%", 2114 | "75%", 2115 | "83.33333333333334%", 2116 | "91.66666666666666%", 2117 | "100%", 2118 | "8.333333333333332%", 2119 | "16.666666666666664%", 2120 | "25%", 2121 | "33.33333333333333%", 2122 | "41.66666666666667%", 2123 | "50%", 2124 | "58.333333333333336%", 2125 | "66.66666666666666%", 2126 | "75%", 2127 | "83.33333333333334%", 2128 | "91.66666666666666%", 2129 | "100%", 2130 | "100%", 2131 | "100%", 2132 | "100%", 2133 | "100%" 2134 | ], 2135 | "text-align": [ 2136 | "left", 2137 | "left", 2138 | "center", 2139 | "right", 2140 | "justify" 2141 | ], 2142 | "vertical-align": [ 2143 | "bottom", 2144 | "top", 2145 | "middle", 2146 | "middle", 2147 | "middle", 2148 | "middle" 2149 | ], 2150 | "overflow": [ 2151 | "hidden", 2152 | "scroll", 2153 | "hidden" 2154 | ], 2155 | "content": [ 2156 | "\" \"" 2157 | ], 2158 | "clear": [ 2159 | "both" 2160 | ], 2161 | "float": [ 2162 | "left", 2163 | "right", 2164 | "left", 2165 | "right", 2166 | "left", 2167 | "right", 2168 | "left", 2169 | "right", 2170 | "left", 2171 | "right" 2172 | ], 2173 | "text-transform": [ 2174 | "uppercase" 2175 | ], 2176 | "letter-spacing": [ 2177 | ".2em" 2178 | ], 2179 | "white-space": [ 2180 | "nowrap" 2181 | ], 2182 | "padding-top": [ 2183 | ".5rem", 2184 | "1rem", 2185 | "2rem", 2186 | "4rem" 2187 | ], 2188 | "padding-bottom": [ 2189 | ".5rem", 2190 | "1rem", 2191 | "2rem", 2192 | "4rem" 2193 | ], 2194 | "position": [ 2195 | "absolute", 2196 | "relative", 2197 | "absolute", 2198 | "fixed", 2199 | "relative" 2200 | ], 2201 | "clip": [ 2202 | "rect(1px, 1px, 1px, 1px)" 2203 | ], 2204 | "top": [ 2205 | "0", 2206 | "0" 2207 | ], 2208 | "right": [ 2209 | "0", 2210 | "0" 2211 | ], 2212 | "bottom": [ 2213 | "0", 2214 | "0" 2215 | ], 2216 | "left": [ 2217 | "0", 2218 | "0" 2219 | ], 2220 | "z-index": [ 2221 | "1", 2222 | "2", 2223 | "3", 2224 | "4", 2225 | "1" 2226 | ], 2227 | "table-layout": [ 2228 | "fixed" 2229 | ], 2230 | "color": [ 2231 | "#333", 2232 | "#0076df", 2233 | "#777", 2234 | "white", 2235 | "rgba(255, 255, 255, .75)", 2236 | "rgba(255, 255, 255, .75)", 2237 | "rgba(255, 255, 255, .75)", 2238 | "rgba(255, 255, 255, .75)", 2239 | "white", 2240 | "#0076df", 2241 | "white", 2242 | "#0076df", 2243 | "white", 2244 | "white", 2245 | "#333", 2246 | "white", 2247 | "#333", 2248 | "white", 2249 | "#0076df", 2250 | "#777", 2251 | "#ccc", 2252 | "#eee", 2253 | "#f95020", 2254 | "#00cf26", 2255 | "#efcc00" 2256 | ], 2257 | "background-color": [ 2258 | "white", 2259 | "#eee", 2260 | "white", 2261 | "rgba(0, 0, 0, .125)", 2262 | "rgba(0, 0, 0, .125)", 2263 | "rgba(0, 0, 0, .25)", 2264 | "rgba(255, 255, 255, .25)", 2265 | "#0076df", 2266 | "transparent", 2267 | "#0076df", 2268 | "transparent", 2269 | "#777", 2270 | "#f95020", 2271 | "rgba(0, 0, 0, .0625)", 2272 | "rgba(0, 0, 0, .125)", 2273 | "rgba(0, 0, 0, .125)", 2274 | "rgba(0, 0, 0, .0625)", 2275 | "white", 2276 | "#333", 2277 | "white", 2278 | "#0076df", 2279 | "#777", 2280 | "#ccc", 2281 | "#eee", 2282 | "#f95020", 2283 | "#00cf26", 2284 | "#efcc00", 2285 | "rgba(0, 0, 0, .0625)", 2286 | "rgba(0, 0, 0, .125)", 2287 | "rgba(0, 0, 0, .25)", 2288 | "rgba(0, 0, 0, .5)" 2289 | ], 2290 | "border-radius": [ 2291 | "3px", 2292 | "3px", 2293 | "50%", 2294 | "3px", 2295 | "3px", 2296 | "3px", 2297 | "3px", 2298 | "3px", 2299 | "3px 3px 0 0", 2300 | "3px", 2301 | "50%", 2302 | "3px 3px 0 0", 2303 | "0 3px 3px 0", 2304 | "0 0 3px 3px", 2305 | "3px 0 0 3px", 2306 | "0" 2307 | ], 2308 | "border-bottom-style": [ 2309 | "solid", 2310 | "solid", 2311 | "solid" 2312 | ], 2313 | "border-bottom-width": [ 2314 | "1px", 2315 | "1px", 2316 | "1px" 2317 | ], 2318 | "border-bottom-color": [ 2319 | "#ccc", 2320 | "#ccc", 2321 | "#ccc" 2322 | ], 2323 | "-webkit-transition": [ 2324 | "box-shadow .2s ease", 2325 | "box-shadow .2s ease" 2326 | ], 2327 | "transition": [ 2328 | "box-shadow .2s ease", 2329 | "box-shadow .2s ease" 2330 | ], 2331 | "border-style": [ 2332 | "solid", 2333 | "solid" 2334 | ], 2335 | "border-width": [ 2336 | "1px", 2337 | "1px" 2338 | ], 2339 | "border-color": [ 2340 | "#ccc", 2341 | "#0076df", 2342 | "#f95020", 2343 | "#00cf26", 2344 | "#efcc00", 2345 | "#f95020", 2346 | "#f95020", 2347 | "#00cf26", 2348 | "#efcc00", 2349 | "#f95020", 2350 | "#ccc" 2351 | ], 2352 | "outline": [ 2353 | "none", 2354 | "none", 2355 | "0", 2356 | "none", 2357 | "none", 2358 | "none", 2359 | "none" 2360 | ], 2361 | "box-shadow": [ 2362 | "0 0 2px rgba(0, 118, 223, .5)", 2363 | "0 0 2px rgba(0, 118, 223, .5)", 2364 | "inset 0 0 0 32px rgba(0, 0, 0, .125), inset 0 2px 3px 0 rgba(0, 0, 0, .25)", 2365 | "0 0 0 2px rgba(255, 255, 255, .5), 0 0 1px 4px rgba(0, 118, 223, .5)", 2366 | "inset 0 3px 3px 0 rgba(0, 0, 0, .25)", 2367 | "0 0 0 2px rgba(255, 255, 255, .5), 0 0 1px 4px rgba(0, 118, 223, .5)", 2368 | "inset 0 0 0 32px rgba(0, 0, 0, .125), inset 0 2px 3px 0 rgba(0, 0, 0, .25)", 2369 | "0 0 0 2px white, 0 0 1px 4px rgba(0, 118, 223, .5)", 2370 | "inset 0 0 0 32px rgba(0, 0, 0, .125), inset 0 2px 3px 0 rgba(0, 0, 0, .25)", 2371 | "0 0 0 2px rgba(255, 255, 255, .5), 0 0 1px 4px rgba(249, 80, 32, .5)" 2372 | ], 2373 | "-webkit-transition-duration": [ 2374 | ".1s", 2375 | ".1s", 2376 | ".1s", 2377 | ".1s" 2378 | ], 2379 | "transition-duration": [ 2380 | ".1s", 2381 | ".1s", 2382 | ".1s", 2383 | ".1s" 2384 | ], 2385 | "-webkit-transition-timing-function": [ 2386 | "ease-out", 2387 | "ease-out", 2388 | "ease-out", 2389 | "ease-out" 2390 | ], 2391 | "transition-timing-function": [ 2392 | "ease-out", 2393 | "ease-out", 2394 | "ease-out", 2395 | "ease-out" 2396 | ], 2397 | "-webkit-transition-property": [ 2398 | "box-shadow, background-color", 2399 | "box-shadow, background-color", 2400 | "box-shadow, background-color", 2401 | "box-shadow, background-color" 2402 | ], 2403 | "transition-property": [ 2404 | "box-shadow, background-color", 2405 | "box-shadow, background-color", 2406 | "box-shadow, background-color", 2407 | "box-shadow, background-color" 2408 | ], 2409 | "opacity": [ 2410 | ".875", 2411 | ".5", 2412 | ".5", 2413 | ".875", 2414 | ".5", 2415 | ".875", 2416 | ".5" 2417 | ], 2418 | "border-bottom": [ 2419 | "1px solid #ccc", 2420 | "1px solid white" 2421 | ], 2422 | "border-top": [ 2423 | "1px solid #ccc" 2424 | ], 2425 | "border-left": [ 2426 | "1px solid #ccc" 2427 | ], 2428 | "border-right": [ 2429 | "1px solid #ccc" 2430 | ], 2431 | "border-top-style": [ 2432 | "solid" 2433 | ], 2434 | "border-top-width": [ 2435 | "1px" 2436 | ], 2437 | "border-top-color": [ 2438 | "#ccc" 2439 | ], 2440 | "border-right-style": [ 2441 | "solid" 2442 | ], 2443 | "border-right-width": [ 2444 | "1px" 2445 | ], 2446 | "border-right-color": [ 2447 | "#ccc" 2448 | ], 2449 | "border-left-style": [ 2450 | "solid" 2451 | ], 2452 | "border-left-width": [ 2453 | "1px" 2454 | ], 2455 | "border-left-color": [ 2456 | "#ccc" 2457 | ] 2458 | } 2459 | }, 2460 | "mediaQueries": { 2461 | "total": 12, 2462 | "unique": 3, 2463 | "values": [ 2464 | "(min-width: 40em)", 2465 | "(min-width: 52em)", 2466 | "(min-width: 64em)", 2467 | "(min-width: 40em)", 2468 | "(min-width: 52em)", 2469 | "(min-width: 64em)", 2470 | "(min-width: 40em)", 2471 | "(min-width: 52em)", 2472 | "(min-width: 64em)", 2473 | "(min-width: 40em)", 2474 | "(min-width: 52em)", 2475 | "(min-width: 64em)" 2476 | ], 2477 | "contents": [ 2478 | { 2479 | "value": "(min-width: 40em)", 2480 | "rules": { 2481 | "total": 1, 2482 | "size": { 2483 | "graph": [ 2484 | 1 2485 | ], 2486 | "max": 1, 2487 | "average": 1 2488 | }, 2489 | "selectorByRuleSizes": [ 2490 | { 2491 | "selector": ".sm-show", 2492 | "declarations": 1 2493 | } 2494 | ] 2495 | }, 2496 | "selectors": { 2497 | "total": 1, 2498 | "type": 0, 2499 | "class": 1, 2500 | "id": 0, 2501 | "pseudoClass": 0, 2502 | "pseudoElement": 0, 2503 | "values": [ 2504 | ".sm-show" 2505 | ], 2506 | "specificity": { 2507 | "max": 10, 2508 | "average": 10 2509 | } 2510 | }, 2511 | "declarations": { 2512 | "total": 1, 2513 | "unique": 1, 2514 | "properties": { 2515 | "display": [ 2516 | "block" 2517 | ] 2518 | } 2519 | } 2520 | }, 2521 | { 2522 | "value": "(min-width: 52em)", 2523 | "rules": { 2524 | "total": 1, 2525 | "size": { 2526 | "graph": [ 2527 | 1 2528 | ], 2529 | "max": 1, 2530 | "average": 1 2531 | }, 2532 | "selectorByRuleSizes": [ 2533 | { 2534 | "selector": ".md-show", 2535 | "declarations": 1 2536 | } 2537 | ] 2538 | }, 2539 | "selectors": { 2540 | "total": 1, 2541 | "type": 0, 2542 | "class": 1, 2543 | "id": 0, 2544 | "pseudoClass": 0, 2545 | "pseudoElement": 0, 2546 | "values": [ 2547 | ".md-show" 2548 | ], 2549 | "specificity": { 2550 | "max": 10, 2551 | "average": 10 2552 | } 2553 | }, 2554 | "declarations": { 2555 | "total": 1, 2556 | "unique": 1, 2557 | "properties": { 2558 | "display": [ 2559 | "block" 2560 | ] 2561 | } 2562 | } 2563 | }, 2564 | { 2565 | "value": "(min-width: 64em)", 2566 | "rules": { 2567 | "total": 1, 2568 | "size": { 2569 | "graph": [ 2570 | 1 2571 | ], 2572 | "max": 1, 2573 | "average": 1 2574 | }, 2575 | "selectorByRuleSizes": [ 2576 | { 2577 | "selector": ".lg-show", 2578 | "declarations": 1 2579 | } 2580 | ] 2581 | }, 2582 | "selectors": { 2583 | "total": 1, 2584 | "type": 0, 2585 | "class": 1, 2586 | "id": 0, 2587 | "pseudoClass": 0, 2588 | "pseudoElement": 0, 2589 | "values": [ 2590 | ".lg-show" 2591 | ], 2592 | "specificity": { 2593 | "max": 10, 2594 | "average": 10 2595 | } 2596 | }, 2597 | "declarations": { 2598 | "total": 1, 2599 | "unique": 1, 2600 | "properties": { 2601 | "display": [ 2602 | "block" 2603 | ] 2604 | } 2605 | } 2606 | }, 2607 | { 2608 | "value": "(min-width: 40em)", 2609 | "rules": { 2610 | "total": 1, 2611 | "size": { 2612 | "graph": [ 2613 | 1 2614 | ], 2615 | "max": 1, 2616 | "average": 1 2617 | }, 2618 | "selectorByRuleSizes": [ 2619 | { 2620 | "selector": ".sm-hide", 2621 | "declarations": 1 2622 | } 2623 | ] 2624 | }, 2625 | "selectors": { 2626 | "total": 1, 2627 | "type": 0, 2628 | "class": 1, 2629 | "id": 0, 2630 | "pseudoClass": 0, 2631 | "pseudoElement": 0, 2632 | "values": [ 2633 | ".sm-hide" 2634 | ], 2635 | "specificity": { 2636 | "max": 10, 2637 | "average": 10 2638 | } 2639 | }, 2640 | "declarations": { 2641 | "total": 1, 2642 | "unique": 1, 2643 | "properties": { 2644 | "display": [ 2645 | "none" 2646 | ] 2647 | } 2648 | } 2649 | }, 2650 | { 2651 | "value": "(min-width: 52em)", 2652 | "rules": { 2653 | "total": 1, 2654 | "size": { 2655 | "graph": [ 2656 | 1 2657 | ], 2658 | "max": 1, 2659 | "average": 1 2660 | }, 2661 | "selectorByRuleSizes": [ 2662 | { 2663 | "selector": ".md-hide", 2664 | "declarations": 1 2665 | } 2666 | ] 2667 | }, 2668 | "selectors": { 2669 | "total": 1, 2670 | "type": 0, 2671 | "class": 1, 2672 | "id": 0, 2673 | "pseudoClass": 0, 2674 | "pseudoElement": 0, 2675 | "values": [ 2676 | ".md-hide" 2677 | ], 2678 | "specificity": { 2679 | "max": 10, 2680 | "average": 10 2681 | } 2682 | }, 2683 | "declarations": { 2684 | "total": 1, 2685 | "unique": 1, 2686 | "properties": { 2687 | "display": [ 2688 | "none" 2689 | ] 2690 | } 2691 | } 2692 | }, 2693 | { 2694 | "value": "(min-width: 64em)", 2695 | "rules": { 2696 | "total": 1, 2697 | "size": { 2698 | "graph": [ 2699 | 1 2700 | ], 2701 | "max": 1, 2702 | "average": 1 2703 | }, 2704 | "selectorByRuleSizes": [ 2705 | { 2706 | "selector": ".lg-hide", 2707 | "declarations": 1 2708 | } 2709 | ] 2710 | }, 2711 | "selectors": { 2712 | "total": 1, 2713 | "type": 0, 2714 | "class": 1, 2715 | "id": 0, 2716 | "pseudoClass": 0, 2717 | "pseudoElement": 0, 2718 | "values": [ 2719 | ".lg-hide" 2720 | ], 2721 | "specificity": { 2722 | "max": 10, 2723 | "average": 10 2724 | } 2725 | }, 2726 | "declarations": { 2727 | "total": 1, 2728 | "unique": 1, 2729 | "properties": { 2730 | "display": [ 2731 | "none" 2732 | ] 2733 | } 2734 | } 2735 | }, 2736 | { 2737 | "value": "(min-width: 40em)", 2738 | "rules": { 2739 | "total": 14, 2740 | "size": { 2741 | "graph": [ 2742 | 3, 2743 | 3, 2744 | 1, 2745 | 1, 2746 | 1, 2747 | 1, 2748 | 1, 2749 | 1, 2750 | 1, 2751 | 1, 2752 | 1, 2753 | 1, 2754 | 1, 2755 | 1 2756 | ], 2757 | "max": 3, 2758 | "average": 1.2857142857142858 2759 | }, 2760 | "selectorByRuleSizes": [ 2761 | { 2762 | "selector": ",.sm-col-right", 2763 | "declarations": 3 2764 | }, 2765 | { 2766 | "selector": ".sm-col", 2767 | "declarations": 3 2768 | }, 2769 | { 2770 | "selector": ",.sm-col-12", 2771 | "declarations": 1 2772 | }, 2773 | { 2774 | "selector": ",.sm-col-11", 2775 | "declarations": 1 2776 | }, 2777 | { 2778 | "selector": ",.sm-col-10", 2779 | "declarations": 1 2780 | }, 2781 | { 2782 | "selector": ",.sm-col-9", 2783 | "declarations": 1 2784 | }, 2785 | { 2786 | "selector": ",.sm-col-8", 2787 | "declarations": 1 2788 | }, 2789 | { 2790 | "selector": ",.sm-col-7", 2791 | "declarations": 1 2792 | }, 2793 | { 2794 | "selector": ",.sm-col-6", 2795 | "declarations": 1 2796 | }, 2797 | { 2798 | "selector": ",.sm-col-5", 2799 | "declarations": 1 2800 | }, 2801 | { 2802 | "selector": ",.sm-col-4", 2803 | "declarations": 1 2804 | }, 2805 | { 2806 | "selector": ",.sm-col-3", 2807 | "declarations": 1 2808 | }, 2809 | { 2810 | "selector": ",.sm-col-2", 2811 | "declarations": 1 2812 | }, 2813 | { 2814 | "selector": ",.sm-col-1", 2815 | "declarations": 1 2816 | } 2817 | ] 2818 | }, 2819 | "selectors": { 2820 | "total": 14, 2821 | "type": 0, 2822 | "class": 14, 2823 | "id": 0, 2824 | "pseudoClass": 0, 2825 | "pseudoElement": 0, 2826 | "values": [ 2827 | ".sm-col", 2828 | ".sm-col-right", 2829 | ".sm-col-1", 2830 | ".sm-col-2", 2831 | ".sm-col-3", 2832 | ".sm-col-4", 2833 | ".sm-col-5", 2834 | ".sm-col-6", 2835 | ".sm-col-7", 2836 | ".sm-col-8", 2837 | ".sm-col-9", 2838 | ".sm-col-10", 2839 | ".sm-col-11", 2840 | ".sm-col-12" 2841 | ], 2842 | "specificity": { 2843 | "max": 10, 2844 | "average": 10 2845 | } 2846 | }, 2847 | "declarations": { 2848 | "total": 18, 2849 | "unique": 16, 2850 | "properties": { 2851 | "float": [ 2852 | "left", 2853 | "right" 2854 | ], 2855 | "-moz-box-sizing": [ 2856 | "border-box", 2857 | "border-box" 2858 | ], 2859 | "box-sizing": [ 2860 | "border-box", 2861 | "border-box" 2862 | ], 2863 | "width": [ 2864 | "8.333333333333332%", 2865 | "16.666666666666664%", 2866 | "25%", 2867 | "33.33333333333333%", 2868 | "41.66666666666667%", 2869 | "50%", 2870 | "58.333333333333336%", 2871 | "66.66666666666666%", 2872 | "75%", 2873 | "83.33333333333334%", 2874 | "91.66666666666666%", 2875 | "100%" 2876 | ] 2877 | } 2878 | } 2879 | }, 2880 | { 2881 | "value": "(min-width: 52em)", 2882 | "rules": { 2883 | "total": 14, 2884 | "size": { 2885 | "graph": [ 2886 | 3, 2887 | 3, 2888 | 1, 2889 | 1, 2890 | 1, 2891 | 1, 2892 | 1, 2893 | 1, 2894 | 1, 2895 | 1, 2896 | 1, 2897 | 1, 2898 | 1, 2899 | 1 2900 | ], 2901 | "max": 3, 2902 | "average": 1.2857142857142858 2903 | }, 2904 | "selectorByRuleSizes": [ 2905 | { 2906 | "selector": ",.md-col-right", 2907 | "declarations": 3 2908 | }, 2909 | { 2910 | "selector": ".md-col", 2911 | "declarations": 3 2912 | }, 2913 | { 2914 | "selector": ",.md-col-12", 2915 | "declarations": 1 2916 | }, 2917 | { 2918 | "selector": ",.md-col-11", 2919 | "declarations": 1 2920 | }, 2921 | { 2922 | "selector": ",.md-col-10", 2923 | "declarations": 1 2924 | }, 2925 | { 2926 | "selector": ",.md-col-9", 2927 | "declarations": 1 2928 | }, 2929 | { 2930 | "selector": ",.md-col-8", 2931 | "declarations": 1 2932 | }, 2933 | { 2934 | "selector": ",.md-col-7", 2935 | "declarations": 1 2936 | }, 2937 | { 2938 | "selector": ",.md-col-6", 2939 | "declarations": 1 2940 | }, 2941 | { 2942 | "selector": ",.md-col-5", 2943 | "declarations": 1 2944 | }, 2945 | { 2946 | "selector": ",.md-col-4", 2947 | "declarations": 1 2948 | }, 2949 | { 2950 | "selector": ",.md-col-3", 2951 | "declarations": 1 2952 | }, 2953 | { 2954 | "selector": ",.md-col-2", 2955 | "declarations": 1 2956 | }, 2957 | { 2958 | "selector": ",.md-col-1", 2959 | "declarations": 1 2960 | } 2961 | ] 2962 | }, 2963 | "selectors": { 2964 | "total": 14, 2965 | "type": 0, 2966 | "class": 14, 2967 | "id": 0, 2968 | "pseudoClass": 0, 2969 | "pseudoElement": 0, 2970 | "values": [ 2971 | ".md-col", 2972 | ".md-col-right", 2973 | ".md-col-1", 2974 | ".md-col-2", 2975 | ".md-col-3", 2976 | ".md-col-4", 2977 | ".md-col-5", 2978 | ".md-col-6", 2979 | ".md-col-7", 2980 | ".md-col-8", 2981 | ".md-col-9", 2982 | ".md-col-10", 2983 | ".md-col-11", 2984 | ".md-col-12" 2985 | ], 2986 | "specificity": { 2987 | "max": 10, 2988 | "average": 10 2989 | } 2990 | }, 2991 | "declarations": { 2992 | "total": 18, 2993 | "unique": 16, 2994 | "properties": { 2995 | "float": [ 2996 | "left", 2997 | "right" 2998 | ], 2999 | "-moz-box-sizing": [ 3000 | "border-box", 3001 | "border-box" 3002 | ], 3003 | "box-sizing": [ 3004 | "border-box", 3005 | "border-box" 3006 | ], 3007 | "width": [ 3008 | "8.333333333333332%", 3009 | "16.666666666666664%", 3010 | "25%", 3011 | "33.33333333333333%", 3012 | "41.66666666666667%", 3013 | "50%", 3014 | "58.333333333333336%", 3015 | "66.66666666666666%", 3016 | "75%", 3017 | "83.33333333333334%", 3018 | "91.66666666666666%", 3019 | "100%" 3020 | ] 3021 | } 3022 | } 3023 | }, 3024 | { 3025 | "value": "(min-width: 64em)", 3026 | "rules": { 3027 | "total": 14, 3028 | "size": { 3029 | "graph": [ 3030 | 3, 3031 | 3, 3032 | 1, 3033 | 1, 3034 | 1, 3035 | 1, 3036 | 1, 3037 | 1, 3038 | 1, 3039 | 1, 3040 | 1, 3041 | 1, 3042 | 1, 3043 | 1 3044 | ], 3045 | "max": 3, 3046 | "average": 1.2857142857142858 3047 | }, 3048 | "selectorByRuleSizes": [ 3049 | { 3050 | "selector": ",.lg-col-right", 3051 | "declarations": 3 3052 | }, 3053 | { 3054 | "selector": ".lg-col", 3055 | "declarations": 3 3056 | }, 3057 | { 3058 | "selector": ",.lg-col-12", 3059 | "declarations": 1 3060 | }, 3061 | { 3062 | "selector": ",.lg-col-11", 3063 | "declarations": 1 3064 | }, 3065 | { 3066 | "selector": ",.lg-col-10", 3067 | "declarations": 1 3068 | }, 3069 | { 3070 | "selector": ",.lg-col-9", 3071 | "declarations": 1 3072 | }, 3073 | { 3074 | "selector": ",.lg-col-8", 3075 | "declarations": 1 3076 | }, 3077 | { 3078 | "selector": ",.lg-col-7", 3079 | "declarations": 1 3080 | }, 3081 | { 3082 | "selector": ",.lg-col-6", 3083 | "declarations": 1 3084 | }, 3085 | { 3086 | "selector": ",.lg-col-5", 3087 | "declarations": 1 3088 | }, 3089 | { 3090 | "selector": ",.lg-col-4", 3091 | "declarations": 1 3092 | }, 3093 | { 3094 | "selector": ",.lg-col-3", 3095 | "declarations": 1 3096 | }, 3097 | { 3098 | "selector": ",.lg-col-2", 3099 | "declarations": 1 3100 | }, 3101 | { 3102 | "selector": ",.lg-col-1", 3103 | "declarations": 1 3104 | } 3105 | ] 3106 | }, 3107 | "selectors": { 3108 | "total": 14, 3109 | "type": 0, 3110 | "class": 14, 3111 | "id": 0, 3112 | "pseudoClass": 0, 3113 | "pseudoElement": 0, 3114 | "values": [ 3115 | ".lg-col", 3116 | ".lg-col-right", 3117 | ".lg-col-1", 3118 | ".lg-col-2", 3119 | ".lg-col-3", 3120 | ".lg-col-4", 3121 | ".lg-col-5", 3122 | ".lg-col-6", 3123 | ".lg-col-7", 3124 | ".lg-col-8", 3125 | ".lg-col-9", 3126 | ".lg-col-10", 3127 | ".lg-col-11", 3128 | ".lg-col-12" 3129 | ], 3130 | "specificity": { 3131 | "max": 10, 3132 | "average": 10 3133 | } 3134 | }, 3135 | "declarations": { 3136 | "total": 18, 3137 | "unique": 16, 3138 | "properties": { 3139 | "float": [ 3140 | "left", 3141 | "right" 3142 | ], 3143 | "-moz-box-sizing": [ 3144 | "border-box", 3145 | "border-box" 3146 | ], 3147 | "box-sizing": [ 3148 | "border-box", 3149 | "border-box" 3150 | ], 3151 | "width": [ 3152 | "8.333333333333332%", 3153 | "16.666666666666664%", 3154 | "25%", 3155 | "33.33333333333333%", 3156 | "41.66666666666667%", 3157 | "50%", 3158 | "58.333333333333336%", 3159 | "66.66666666666666%", 3160 | "75%", 3161 | "83.33333333333334%", 3162 | "91.66666666666666%", 3163 | "100%" 3164 | ] 3165 | } 3166 | } 3167 | }, 3168 | { 3169 | "value": "(min-width: 40em)", 3170 | "rules": { 3171 | "total": 2, 3172 | "size": { 3173 | "graph": [ 3174 | 2, 3175 | 2 3176 | ], 3177 | "max": 2, 3178 | "average": 2 3179 | }, 3180 | "selectorByRuleSizes": [ 3181 | { 3182 | "selector": ",.sm-table-cell", 3183 | "declarations": 2 3184 | }, 3185 | { 3186 | "selector": ".sm-table", 3187 | "declarations": 2 3188 | } 3189 | ] 3190 | }, 3191 | "selectors": { 3192 | "total": 2, 3193 | "type": 0, 3194 | "class": 2, 3195 | "id": 0, 3196 | "pseudoClass": 0, 3197 | "pseudoElement": 0, 3198 | "values": [ 3199 | ".sm-table", 3200 | ".sm-table-cell" 3201 | ], 3202 | "specificity": { 3203 | "max": 10, 3204 | "average": 10 3205 | } 3206 | }, 3207 | "declarations": { 3208 | "total": 4, 3209 | "unique": 4, 3210 | "properties": { 3211 | "display": [ 3212 | "table", 3213 | "table-cell" 3214 | ], 3215 | "width": [ 3216 | "100%" 3217 | ], 3218 | "vertical-align": [ 3219 | "middle" 3220 | ] 3221 | } 3222 | } 3223 | }, 3224 | { 3225 | "value": "(min-width: 52em)", 3226 | "rules": { 3227 | "total": 2, 3228 | "size": { 3229 | "graph": [ 3230 | 2, 3231 | 2 3232 | ], 3233 | "max": 2, 3234 | "average": 2 3235 | }, 3236 | "selectorByRuleSizes": [ 3237 | { 3238 | "selector": ",.md-table-cell", 3239 | "declarations": 2 3240 | }, 3241 | { 3242 | "selector": ".md-table", 3243 | "declarations": 2 3244 | } 3245 | ] 3246 | }, 3247 | "selectors": { 3248 | "total": 2, 3249 | "type": 0, 3250 | "class": 2, 3251 | "id": 0, 3252 | "pseudoClass": 0, 3253 | "pseudoElement": 0, 3254 | "values": [ 3255 | ".md-table", 3256 | ".md-table-cell" 3257 | ], 3258 | "specificity": { 3259 | "max": 10, 3260 | "average": 10 3261 | } 3262 | }, 3263 | "declarations": { 3264 | "total": 4, 3265 | "unique": 4, 3266 | "properties": { 3267 | "display": [ 3268 | "table", 3269 | "table-cell" 3270 | ], 3271 | "width": [ 3272 | "100%" 3273 | ], 3274 | "vertical-align": [ 3275 | "middle" 3276 | ] 3277 | } 3278 | } 3279 | }, 3280 | { 3281 | "value": "(min-width: 64em)", 3282 | "rules": { 3283 | "total": 2, 3284 | "size": { 3285 | "graph": [ 3286 | 2, 3287 | 2 3288 | ], 3289 | "max": 2, 3290 | "average": 2 3291 | }, 3292 | "selectorByRuleSizes": [ 3293 | { 3294 | "selector": ",.lg-table-cell", 3295 | "declarations": 2 3296 | }, 3297 | { 3298 | "selector": ".lg-table", 3299 | "declarations": 2 3300 | } 3301 | ] 3302 | }, 3303 | "selectors": { 3304 | "total": 2, 3305 | "type": 0, 3306 | "class": 2, 3307 | "id": 0, 3308 | "pseudoClass": 0, 3309 | "pseudoElement": 0, 3310 | "values": [ 3311 | ".lg-table", 3312 | ".lg-table-cell" 3313 | ], 3314 | "specificity": { 3315 | "max": 10, 3316 | "average": 10 3317 | } 3318 | }, 3319 | "declarations": { 3320 | "total": 4, 3321 | "unique": 4, 3322 | "properties": { 3323 | "display": [ 3324 | "table", 3325 | "table-cell" 3326 | ], 3327 | "width": [ 3328 | "100%" 3329 | ], 3330 | "vertical-align": [ 3331 | "middle" 3332 | ] 3333 | } 3334 | } 3335 | } 3336 | ] 3337 | } 3338 | } -------------------------------------------------------------------------------- /test/results/gridio-national-light.json: -------------------------------------------------------------------------------- 1 | { 2 | "size": 112017, 3 | "gzipSize": 84764, 4 | "humanizedSize": "109KB", 5 | "humanizedGzipSize": "83KB", 6 | "rules": { 7 | "total": 0, 8 | "size": { 9 | "graph": [], 10 | "max": 0, 11 | "average": 0 12 | }, 13 | "selectorByRuleSizes": [] 14 | }, 15 | "selectors": { 16 | "total": 0, 17 | "type": 0, 18 | "class": 0, 19 | "id": 0, 20 | "pseudoClass": 0, 21 | "pseudoElement": 0, 22 | "values": [], 23 | "specificity": { 24 | "max": 0, 25 | "average": 0 26 | } 27 | }, 28 | "declarations": { 29 | "total": 0, 30 | "unique": 0, 31 | "properties": {} 32 | }, 33 | "mediaQueries": { 34 | "total": 0, 35 | "unique": 0, 36 | "values": [], 37 | "contents": [] 38 | } 39 | } -------------------------------------------------------------------------------- /test/results/gridio.json: -------------------------------------------------------------------------------- 1 | { 2 | "size": 3562, 3 | "gzipSize": 529, 4 | "humanizedSize": "3KB", 5 | "humanizedGzipSize": "529B", 6 | "rules": { 7 | "total": 14, 8 | "size": { 9 | "graph": [ 10 | 6, 11 | 6, 12 | 6, 13 | 8, 14 | 1, 15 | 2, 16 | 2, 17 | 1, 18 | 5, 19 | 5, 20 | 5, 21 | 10, 22 | 2, 23 | 1 24 | ], 25 | "max": 10, 26 | "average": 4.285714285714286 27 | }, 28 | "selectorByRuleSizes": [ 29 | { 30 | "selector": ".odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner", 31 | "declarations": 10 32 | }, 33 | { 34 | "selector": ".odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner", 35 | "declarations": 8 36 | }, 37 | { 38 | "selector": ".odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer", 39 | "declarations": 6 40 | }, 41 | { 42 | "selector": ".odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit", 43 | "declarations": 6 44 | }, 45 | { 46 | "selector": ".odometer.odometer-auto-theme, .odometer.odometer-theme-default", 47 | "declarations": 6 48 | }, 49 | { 50 | "selector": ".odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner", 51 | "declarations": 5 52 | }, 53 | { 54 | "selector": ".odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner", 55 | "declarations": 5 56 | }, 57 | { 58 | "selector": ".odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner", 59 | "declarations": 5 60 | }, 61 | { 62 | "selector": ".odometer.odometer-auto-theme, .odometer.odometer-theme-default", 63 | "declarations": 2 64 | }, 65 | { 66 | "selector": ".odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value", 67 | "declarations": 2 68 | }, 69 | { 70 | "selector": ".odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner", 71 | "declarations": 2 72 | }, 73 | { 74 | "selector": ".odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value", 75 | "declarations": 1 76 | }, 77 | { 78 | "selector": ".odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value", 79 | "declarations": 1 80 | }, 81 | { 82 | "selector": ".odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon", 83 | "declarations": 1 84 | } 85 | ] 86 | }, 87 | "selectors": { 88 | "total": 28, 89 | "type": 0, 90 | "class": 28, 91 | "id": 0, 92 | "pseudoClass": 0, 93 | "pseudoElement": 0, 94 | "values": [ 95 | ".odometer.odometer-auto-theme", 96 | ".odometer.odometer-theme-default", 97 | ".odometer.odometer-auto-theme .odometer-digit", 98 | ".odometer.odometer-theme-default .odometer-digit", 99 | ".odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer", 100 | ".odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer", 101 | ".odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner", 102 | ".odometer.odometer-theme-default .odometer-digit .odometer-digit-inner", 103 | ".odometer.odometer-auto-theme .odometer-digit .odometer-ribbon", 104 | ".odometer.odometer-theme-default .odometer-digit .odometer-ribbon", 105 | ".odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner", 106 | ".odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner", 107 | ".odometer.odometer-auto-theme .odometer-digit .odometer-value", 108 | ".odometer.odometer-theme-default .odometer-digit .odometer-value", 109 | ".odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value", 110 | ".odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value", 111 | ".odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner", 112 | ".odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner", 113 | ".odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner", 114 | ".odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner", 115 | ".odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner", 116 | ".odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner", 117 | ".odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner", 118 | ".odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner", 119 | ".odometer.odometer-auto-theme", 120 | ".odometer.odometer-theme-default", 121 | ".odometer.odometer-auto-theme .odometer-value", 122 | ".odometer.odometer-theme-default .odometer-value" 123 | ], 124 | "specificity": { 125 | "max": 50, 126 | "average": 37.857142857142854 127 | } 128 | }, 129 | "declarations": { 130 | "total": 60, 131 | "unique": 35, 132 | "properties": { 133 | "display": [ 134 | "inline-block", 135 | "inline", 136 | "inline-block", 137 | "inline", 138 | "inline-block", 139 | "inline", 140 | "block", 141 | "block", 142 | "block", 143 | "block" 144 | ], 145 | "vertical-align": [ 146 | "middle", 147 | "auto", 148 | "middle", 149 | "auto", 150 | "middle", 151 | "auto" 152 | ], 153 | "zoom": [ 154 | "1", 155 | "1", 156 | "1" 157 | ], 158 | "position": [ 159 | "relative", 160 | "relative", 161 | "absolute", 162 | "absolute" 163 | ], 164 | "visibility": [ 165 | "hidden" 166 | ], 167 | "text-align": [ 168 | "left", 169 | "center" 170 | ], 171 | "top": [ 172 | "0" 173 | ], 174 | "left": [ 175 | "0" 176 | ], 177 | "right": [ 178 | "0" 179 | ], 180 | "bottom": [ 181 | "0" 182 | ], 183 | "overflow": [ 184 | "hidden" 185 | ], 186 | "-webkit-backface-visibility": [ 187 | "hidden" 188 | ], 189 | "-webkit-transform": [ 190 | "translateZ(0)", 191 | "translateY(-100%)", 192 | "translateY(-100%)", 193 | "translateY(0)" 194 | ], 195 | "-webkit-transition": [ 196 | "-webkit-transform 2s", 197 | "-webkit-transform 2s" 198 | ], 199 | "-moz-transition": [ 200 | "-moz-transform 2s", 201 | "-moz-transform 2s" 202 | ], 203 | "-ms-transition": [ 204 | "-ms-transform 2s", 205 | "-ms-transform 2s" 206 | ], 207 | "-o-transition": [ 208 | "-o-transform 2s", 209 | "-o-transform 2s" 210 | ], 211 | "transition": [ 212 | "transform 2s", 213 | "transform 2s" 214 | ], 215 | "-moz-transform": [ 216 | "translateY(-100%)", 217 | "translateY(-100%)", 218 | "translateY(0)" 219 | ], 220 | "-ms-transform": [ 221 | "translateY(-100%)", 222 | "translateY(-100%)", 223 | "translateY(0)" 224 | ], 225 | "-o-transform": [ 226 | "translateY(-100%)", 227 | "translateY(-100%)", 228 | "translateY(0)" 229 | ], 230 | "transform": [ 231 | "translateY(-100%)", 232 | "translateY(-100%)", 233 | "translateY(0)" 234 | ], 235 | "font-family": [ 236 | "\"Helvetica Neue\", sans-serif" 237 | ], 238 | "line-height": [ 239 | "1.1em" 240 | ] 241 | } 242 | }, 243 | "mediaQueries": { 244 | "total": 0, 245 | "unique": 0, 246 | "values": [], 247 | "contents": [] 248 | } 249 | } -------------------------------------------------------------------------------- /test/results/small.json: -------------------------------------------------------------------------------- 1 | { 2 | "size": 885, 3 | "gzipSize": 367, 4 | "humanizedSize": "885B", 5 | "humanizedGzipSize": "367B", 6 | "rules": { 7 | "total": 12, 8 | "size": { 9 | "graph": [ 10 | 1, 11 | 1, 12 | 3, 13 | 1, 14 | 2, 15 | 2, 16 | 1, 17 | 1, 18 | 4, 19 | 4, 20 | 1, 21 | 1 22 | ], 23 | "max": 4, 24 | "average": 1.8333333333333333 25 | }, 26 | "selectorByRuleSizes": [ 27 | { 28 | "selector": "100%", 29 | "declarations": 4 30 | }, 31 | { 32 | "selector": "0%", 33 | "declarations": 4 34 | }, 35 | { 36 | "selector": ".sm-tomato", 37 | "declarations": 3 38 | }, 39 | { 40 | "selector": ".box", 41 | "declarations": 2 42 | }, 43 | { 44 | "selector": ".sm-tomato:first-child:last-child", 45 | "declarations": 2 46 | }, 47 | { 48 | "selector": ".georgia", 49 | "declarations": 1 50 | }, 51 | { 52 | "selector": "header", 53 | "declarations": 1 54 | }, 55 | { 56 | "selector": ".box:last-child", 57 | "declarations": 1 58 | }, 59 | { 60 | "selector": ".box:first-child", 61 | "declarations": 1 62 | }, 63 | { 64 | "selector": ".sm-tomato::after", 65 | "declarations": 1 66 | }, 67 | { 68 | "selector": ".red", 69 | "declarations": 1 70 | }, 71 | { 72 | "selector": ".red, #foo", 73 | "declarations": 1 74 | } 75 | ] 76 | }, 77 | "selectors": { 78 | "total": 13, 79 | "type": 1, 80 | "class": 9, 81 | "id": 1, 82 | "pseudoClass": 3, 83 | "pseudoElement": 1, 84 | "values": [ 85 | ".red", 86 | "#foo", 87 | ".red", 88 | ".sm-tomato", 89 | ".sm-tomato::after", 90 | ".sm-tomato:first-child:last-child", 91 | ".box", 92 | ".box:first-child", 93 | ".box:last-child", 94 | "0%", 95 | "100%", 96 | "header", 97 | ".georgia" 98 | ], 99 | "specificity": { 100 | "max": 100, 101 | "average": 18 102 | } 103 | }, 104 | "declarations": { 105 | "total": 22, 106 | "unique": 21, 107 | "properties": { 108 | "color": [ 109 | "red", 110 | "red", 111 | "tomato" 112 | ], 113 | "background-color": [ 114 | "hotpink" 115 | ], 116 | "-ms-border-radius": [ 117 | "0" 118 | ], 119 | "content": [ 120 | "'hello'" 121 | ], 122 | "opacity": [ 123 | ".8", 124 | "0", 125 | "1" 126 | ], 127 | "border-bottom": [ 128 | "none" 129 | ], 130 | "margin": [ 131 | "10px", 132 | "0px 0" 133 | ], 134 | "padding": [ 135 | "5px", 136 | "0" 137 | ], 138 | "margin-bottom": [ 139 | "0px" 140 | ], 141 | "-webkit-transform": [ 142 | "translateY(-20px) translate3d(0, 0, 0)", 143 | "translateY(0) translate3d(0, 0, 0)" 144 | ], 145 | "-ms-transform": [ 146 | "translateY(-20px) translate3d(0, 0, 0)", 147 | "translateY(0) translate3d(0, 0, 0)" 148 | ], 149 | "transform": [ 150 | "translateY(-20px) translate3d(0, 0, 0)", 151 | "translateY(0) translate3d(0, 0, 0)" 152 | ], 153 | "font": [ 154 | "1.5em Georgia" 155 | ] 156 | } 157 | }, 158 | "mediaQueries": { 159 | "total": 1, 160 | "unique": 1, 161 | "values": [ 162 | "(min-width: 30em)" 163 | ], 164 | "contents": [ 165 | { 166 | "value": "(min-width: 30em)", 167 | "rules": { 168 | "total": 1, 169 | "size": { 170 | "graph": [ 171 | 3 172 | ], 173 | "max": 3, 174 | "average": 3 175 | }, 176 | "selectorByRuleSizes": [ 177 | { 178 | "selector": ".sm-tomato", 179 | "declarations": 3 180 | } 181 | ] 182 | }, 183 | "selectors": { 184 | "total": 1, 185 | "type": 0, 186 | "class": 1, 187 | "id": 0, 188 | "pseudoClass": 0, 189 | "pseudoElement": 0, 190 | "values": [ 191 | ".sm-tomato" 192 | ], 193 | "specificity": { 194 | "max": 10, 195 | "average": 10 196 | } 197 | }, 198 | "declarations": { 199 | "total": 3, 200 | "unique": 3, 201 | "properties": { 202 | "color": [ 203 | "tomato" 204 | ], 205 | "background-color": [ 206 | "hotpink" 207 | ], 208 | "-ms-border-radius": [ 209 | "0" 210 | ] 211 | } 212 | } 213 | } 214 | ] 215 | } 216 | } -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | 2 | var fs = require('fs') 3 | var assert = require('assert') 4 | var postcss = require('postcss') 5 | var cssstats = require('..') 6 | 7 | describe('css-statistics', function () { 8 | var stats 9 | var options = { 10 | importantDeclarations: true 11 | } 12 | 13 | before(function () { 14 | stats = cssstats(fixture('small'), options) 15 | }) 16 | 17 | describe('PostCSS plugin', function () { 18 | it('should be handled correctly', function (done) { 19 | postcss() 20 | .use(cssstats(options)) 21 | .process(fixture('small')) 22 | .then(function (result) { 23 | var pluginStats = result.messages[0].stats 24 | assert.deepEqual(pluginStats.selectors, stats.selectors) 25 | done() 26 | }) 27 | }) 28 | }) 29 | 30 | describe('size stats', function () { 31 | it('should calculate the correct file size', function () { 32 | assert.equal(stats.size, 885) 33 | }) 34 | 35 | it('should calculate the correct gzipped file size', function () { 36 | assert.equal(stats.gzipSize, 367) 37 | }) 38 | }) 39 | 40 | describe('rules', function () { 41 | it('should count the total number of rules', function () { 42 | assert.equal(stats.rules.total, 12) 43 | }) 44 | 45 | it('should correctly calculate max rule size', function () { 46 | assert.equal(stats.rules.size.max, 4) 47 | }) 48 | 49 | it('should correctly calculate average rule size', function () { 50 | assert.equal(stats.rules.size.average, 1.8333333333333333) 51 | }) 52 | 53 | it('should return a rule size graph', function () { 54 | assert.deepEqual(stats.rules.size.graph, [ 1, 1, 3, 1, 2, 2, 1, 1, 4, 4, 1, 1 ]) 55 | }) 56 | 57 | it('should return a selectorByRuleSizes array', function () { 58 | assert.deepEqual(stats.rules.selectorByRuleSizes, [ 59 | { selector: '100%', declarations: 4 }, 60 | { selector: '0%', declarations: 4 }, 61 | { selector: '.sm-tomato', declarations: 3 }, 62 | { selector: '.box', declarations: 2 }, 63 | { selector: '.sm-tomato:first-child:last-child', declarations: 2 }, 64 | { selector: '.georgia', declarations: 1 }, 65 | { selector: 'header', declarations: 1 }, 66 | { selector: '.box:last-child', declarations: 1 }, 67 | { selector: '.box:first-child', declarations: 1 }, 68 | { selector: '.sm-tomato::after', declarations: 1 }, 69 | { selector: '.red', declarations: 1 }, 70 | { selector: '.red, #foo', declarations: 1 } 71 | ]) 72 | }) 73 | }) 74 | 75 | describe('selectors', function () { 76 | it('should correctly count total selectors', function () { 77 | assert.equal(stats.selectors.total, 13) 78 | }) 79 | 80 | it('should correctly count the number of id selectors', function () { 81 | assert.equal(stats.selectors.id, 1) 82 | }) 83 | 84 | it('should correctly count the number of type selectors', function () { 85 | assert.equal(stats.selectors.type, 1) 86 | }) 87 | 88 | it('should correctly count the number of class selectors', function () { 89 | assert.equal(stats.selectors.class, 9) 90 | }) 91 | 92 | it('should correctly count the number of pseudo class selectors', function () { 93 | assert.equal(stats.selectors.pseudoClass, 3) 94 | }) 95 | 96 | it('should correctly count the number of pseudo element selectors', function () { 97 | assert.equal(stats.selectors.pseudoElement, 1) 98 | }) 99 | 100 | it('should return an array of selectors', function () { 101 | assert.equal(stats.selectors.values.length > 0, true) 102 | }) 103 | 104 | it('should correctly calculate max specificity', function () { 105 | assert.equal(stats.selectors.specificity.max, 100) 106 | }) 107 | 108 | it('should correctly calculate average specificity', function () { 109 | assert.equal(stats.selectors.specificity.average, 18) 110 | }) 111 | }) 112 | 113 | describe('declarations', function () { 114 | it('should correctly count total declarations', function () { 115 | assert.equal(stats.declarations.total, 22) 116 | }) 117 | 118 | it('should correctly count unique declarations', function () { 119 | assert.equal(stats.declarations.unique, 21) 120 | }) 121 | 122 | it('should correctly count important values', function () { 123 | assert.equal(stats.declarations.important.length, 2) 124 | }) 125 | 126 | it('should return a properties object', function () { 127 | assert.equal(Object.keys(stats.declarations.properties).length > 0, true) 128 | }) 129 | }) 130 | 131 | describe('keyframes', function () { 132 | var keyframeStats 133 | 134 | before(function () { 135 | keyframeStats = cssstats(fixture('keyframes')) 136 | }) 137 | 138 | it('should correctly get statistics for CSS in, and after, a keyframe', function () { 139 | assert.equal(keyframeStats.declarations.properties.color.length, 5) 140 | }) 141 | }) 142 | 143 | describe('selector methods', function () { 144 | it('should generate a specificity graph', function () { 145 | assert.equal(stats.selectors.getSpecificityGraph().length > 0, true) 146 | }) 147 | 148 | it('should return specificity values for each selector in order', function () { 149 | assert.deepEqual(stats.selectors.getSpecificityValues(), [ { selector: '.red', specificity: 10 }, { selector: '#foo', specificity: 100 }, { selector: '.red', specificity: 10 }, { selector: '.sm-tomato', specificity: 10 }, { selector: '.sm-tomato::after', specificity: 11 }, { selector: '.sm-tomato:first-child:last-child', specificity: 30 }, { selector: '.box', specificity: 10 }, { selector: '.box:first-child', specificity: 20 }, { selector: '.box:last-child', specificity: 20 }, { selector: '0%', specificity: 1 }, { selector: '100%', specificity: 1 }, { selector: 'header', specificity: 1 }, { selector: '.georgia', specificity: 10 } ]) 150 | }) 151 | 152 | it('should return a sorted specificity array', function () { 153 | assert.deepEqual(stats.selectors.getSortedSpecificity(), [ { selector: '#foo', specificity: 100 }, { selector: '.sm-tomato:first-child:last-child', specificity: 30 }, { selector: '.box:first-child', specificity: 20 }, { selector: '.box:last-child', specificity: 20 }, { selector: '.sm-tomato::after', specificity: 11 }, { selector: '.box', specificity: 10 }, { selector: '.sm-tomato', specificity: 10 }, { selector: '.red', specificity: 10 }, { selector: '.red', specificity: 10 }, { selector: '.georgia', specificity: 10 }, { selector: '0%', specificity: 1 }, { selector: '100%', specificity: 1 }, { selector: 'header', specificity: 1 } ]) 154 | }) 155 | 156 | it('should return repeated selectors', function () { 157 | assert.deepEqual(stats.selectors.getRepeatedValues(), [ '.red' ]) 158 | }) 159 | }) 160 | 161 | describe('declaration methods', function () { 162 | it('should correctly count the number of declarations that reset properties', function () { 163 | assert.deepEqual(stats.declarations.getPropertyResets(), {'margin': 1, 'padding': 1, 'margin-bottom': 1}) 164 | }) 165 | 166 | it('should correctly count the number of unique colors', function () { 167 | assert.equal(stats.declarations.getUniquePropertyCount('color'), 2) 168 | }) 169 | 170 | it('should correctly count the number of color: red', function () { 171 | assert.equal(stats.declarations.getPropertyValueCount('color', 'red'), 2) 172 | }) 173 | 174 | it('should get count vendor prefixes', function () { 175 | assert.equal(stats.declarations.getVendorPrefixed().length, 5) 176 | }) 177 | 178 | it('should get all font sizes', function () { 179 | assert.equal(stats.declarations.getAllFontSizes().length, 1) 180 | }) 181 | 182 | it('should get all font families', function () { 183 | assert.equal(stats.declarations.getAllFontFamilies().length, 1) 184 | }) 185 | }) 186 | 187 | it('should be able to parse css and produce stats', function (done) { 188 | [ 189 | 'basscss', 190 | 'small', 191 | 'font-awesome', 192 | 'gridio', 193 | 'gridio-national-light' 194 | ].forEach(function (stylesheet) { 195 | renderJson(stylesheet) 196 | }) 197 | done() 198 | }) 199 | }) 200 | 201 | describe('cssstats no media queries', function () { 202 | var stats 203 | 204 | before(function () { 205 | stats = cssstats(fixture('small'), { mediaQueries: false }) 206 | }) 207 | 208 | it('should not contain media query contents', function () { 209 | assert.equal(stats.mediaQueries.contents, null) 210 | }) 211 | }) 212 | 213 | function fixture (name) { 214 | return fs.readFileSync('test/fixtures/' + name + '.css', 'utf8').toString().trim() 215 | } 216 | 217 | function renderJson (filename) { 218 | var css = fixture(filename) 219 | var obj = cssstats(css) 220 | 221 | fs.writeFileSync('./test/results/' + filename + '.json', JSON.stringify(obj, null, 2)) 222 | } 223 | --------------------------------------------------------------------------------