diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..6e5919d
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - "0.10"
diff --git a/Gruntfile.js b/Gruntfile.js
new file mode 100644
index 0000000..e21c763
--- /dev/null
+++ b/Gruntfile.js
@@ -0,0 +1,99 @@
+module.exports = function(grunt) {
+ /**
+ * Load tasks
+ */
+ grunt.loadNpmTasks('lesshat-devstack');
+ grunt.loadNpmTasks('grunt-prompt');
+
+ /**
+ * Grunt config
+ */
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+
+ generator: {
+ settings: {
+ mixin_name: null,
+ default_value: null,
+ vendors: null
+ }
+ },
+
+ version: {
+ settings: {
+ version: null
+ }
+ },
+
+ prompt: {
+ version: {
+ options: {
+ questions: [{
+ config: 'version.settings.version',
+ type: 'input',
+ validate: function(value) {
+ return (value && true);
+ },
+ message: 'LESS Hat next version number? Current is ' + '<%= pkg.version %>'.green + ':',
+ }],
+ }
+ },
+ generate: {
+ options: {
+ questions: [{
+ config: 'generator.settings.mixin_name',
+ type: 'input',
+ message: 'What is the name of new mixin? (e.g. animationDelay)',
+ filter: function(value) {
+ grunt.config('generator.settings.mixin_css_name', value.replace(/([A-Z])/g, function(upperCase) {
+ return '-' + upperCase.toLowerCase();
+ }));
+ grunt.config('generator.settings.mixin_name | firstLetter', value[0].toUpperCase() + value.slice(1));
+ return value[0].toLowerCase() + value.slice(1);
+ },
+ validate: function(value) {
+ if (/[a-z0-9]+/i.test(value)) {
+ return true;
+ } else {
+ return 'Please fill only valid characters [a-zA-Z0-9].';
+ }
+ }
+ }, {
+ config: 'generator.settings.vendors',
+ type: 'checkbox',
+ message: 'For which browsers is this mixin?',
+ choices: [{
+ name: 'webkit'
+ }, {
+ name: 'moz'
+ }, {
+ name: 'opera'
+ }, {
+ name: 'ms',
+ }]
+ }, {
+ config: 'generator.settings.default_value',
+ type: 'input',
+ default: 'none',
+ filter: function(value) {
+ return '\'' + value + '\'';
+ },
+ message: 'What is default value of the mixin? Optional – you can skip',
+ }]
+ }
+ }
+ }
+
+ });
+
+ /**
+ * Register tasks
+ */
+
+ grunt.registerTask('version', ['prompt:version', 'iterate', 'build', 'mixins_update']);
+ grunt.registerTask('dev', ['build', 'test']);
+ grunt.registerTask('generate', ['prompt:generate', 'generator']);
+ grunt.registerTask('contrib', ['build', 'test', 'mixins_update', 'prefix', 'documentation']);
+ grunt.registerTask('default', ['version','build', 'test', 'mixins_update', 'prefix', 'documentation']);
+
+};
diff --git a/LICENSE b/LICENSE
index f45b78b..fd5a4c8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,14 +1,17 @@
-MIT License
+The MIT License
+
+Copyright (c) 2013 Petr Brzek
-Copyright (c) 2012
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
+
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -16,29 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-
-
-BSD License
-
-Copyright (c) 2012
-All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of the Organization nor the
- names of its contributors may be used to endorse or promote products
- derived from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/README-template.md b/README-template.md
new file mode 100644
index 0000000..ad511a3
--- /dev/null
+++ b/README-template.md
@@ -0,0 +1,229 @@
+
+
+# LESS Hat 2.0 [![Build Status](https://travis-ci.org/csshat/lesshat.png)](https://travis-ci.org/csshat/lesshat)
+
+
+![LESS Hat 2.0](http://f.cl.ly/items/240x0i2S0B101F1d420t/lesshat-v2.0.png)
+
+---
+**[Download latest](https://raw.github.com/PetrBrzek/LESSHat/master/build/lesshat.less)** (or **[Prefixed](https://raw.github.com/PetrBrzek/LESSHat/master/build/lesshat-prefixed.less)**) **|**
+**[Get Starded](#get-started) |**
+**[Contribute](#contribute) |**
+**[Documentation](#documentation) |**
+
+---
+
+ ![LESS Hat 2.0](http://media.giphy.com/media/lI6nHr5hWXlu0/giphy.gif) ![LESS Hat 2.0](http://f.cl.ly/items/0y0M3O0L0d2h1G0Y3W23/yes.png)
+
+## Intro
+Why LESS Hat? In August 2012, while we were developing and extending [CSS Hat](www.csshat.com) for LESS we needed universal mixins. Unfortunately, none of available were good enough that would satisfy our needs and that’s why we created new custom ones on our own, which have become the most popular mixin library for the whole LESS CSS.
+
+After a year, there is a new, **completely rewritten 2.0 version** that brings 86 great mixins, robust workflow for editing, testing and creating new mixins.
+
+Meet the best mixins library in the world. Thanks to the LESS Hat 2.0 is LESS CSS finally usable.
+
+If you would like to use CSS Hat for working with LESS Hat and you still don't have one, we have a suprise for you at **[lesshat.com](http://lesshat.com)** - Check it out!
+
+### Features
+* **Configuration** – You can turn off/on browser prefixes according to your needs.
+* **No restrictions** – If it's possible in CSS, it must be possible to be done with a mixin. Unlimited number of anything, shadows, gradients, gradient swatches.
+* **Standard naming convention** – In LESS Hat, mixins have names like all CSS3 properties. No `.rounded` or `.shadow`. It's stupid.
+* **Cross-browser** – LESS Hat takes care of exporting CSS for all available browsers.
+* **Bootstrap friendly** – You can now use prefixed LESS Hat version and gaily work with Bootstrap. Yeah it's that easy.
+* **Keyframes** – Although it's tricky as hell, but yeah LESS Hat has mixin for `.keyframes`
+* **Blank state ready** – If you call mixin without any arguments, LESS Hat does not pollute your CSS with empty properties. Instead LESS Hat generates nothing.
+* **Workflow** – **No more one line editing!** We created developer friendly worklow for editing and creating mixins. You can test mixins with [MOCHA](http://visionmedia.github.io/mocha/), generate new mixin with [GRUNT](http://gruntjs.com/). Find out more about the workflow in **[contribution](#contribution)** section.
+
+## Get started
+The structure of this repo is:
+
+* **build folder** – there are ready-to-use lesshat.less or lesshat-prefixed.less mixins
+* **mixins folder** – developer version of mixins (more about that in **[contribution](#contribution)** section)
+* **.gitignore** – is a list of files that git will ignore. I know you know that, but it's convention.
+* **.travis.yml** – Configuration file for Travis CI. Travis CI is a hosted continuous integration service for the open source community.
+* **Gruntfle.js** – task runner. If you don't want to use lesshat-devstack ignore it.
+* **LICENCE** – self-explanatory
+* **README-template.md** – If you want to edit readme, edit it in this file. README.md is generated.
+* **README.md** – please don't edit this file. Either edit README-template.md or documentation inside mixins/ folder.
+* **Bower** – is like NPM for frontend. NPM is like Gems for JavaScript. I could go on forever…
+* **package.json** – contains meta data for NPM.
+
+### Structure of LESS Hat mixins
+1. **Global prefix configuration**:
+
+ @webkit: true;
+ @moz: true;
+ @opera: true;
+ @ms: true;
+ @w3c: true;
+
+ If you for example don't want to generate prefixes for opera, just turn it to false.
+
+2. **Typical LESS Hat mixin**:
+
+ .supermixin(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(){})()`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-radius: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-radius: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+ }
+
+ At the top, there are a local prefix configurations. So you can turn off/on browser for one specific mixin. This is quite useful.
+
+ In @process variable is all magic. Please don't edit javascrpt directly in .less file. Instead use [lesshat-devstack](https://github.com/csshat/lesshat-devstack).
+
+ If you call mixin without arguments, some mixins return CSS default value for specific property, but some mixins return magic number *08121991* (Yeah, it's like Lost, TV series, but numbers are different) and because of that LESS CSS generates nothing.
+
+ **Why 08121991 and not just 0 (zero)?**
+ Some CSS properties have zero as default value. So we need more difficult number.
+
+3. **Use (almost) every property without interpolation!**
+
+ Correct mixin calling:
+
+ .background-image(linear-gradient(to bottom, #fb83fa 0%,#e93cec 100%))
+
+ Incorrect calling:
+
+ .background-image(~'linear-gradient(to bottom, #fb83fa 0%,#e93cec 100%)')
+
+ Unfortunately, there are exceptions:
+
+ .keyframes(~'');
+ .calc(~'');
+ .selection(~'');
+
+ // in some cases you have to interpolate border-radius or LESS CSS begins to play on calculator
+ .border-radius(~'20px / 40px');
+
+
+
+## Contribute:
+1. Download this repo.
+2. NPM install.
+3. Now you have LESS Hat devstack (see [documentation](https://github.com/csshat/lesshat-devstack).)
+4. If you create new mixin, use grunt generate command!
+5. If it's possible (almost always) test the coverage for new mixins, and never break existing tests.
+6. Commits should represent one logical change each. If a mixin goes through multiple iterations, squash your commits down to one.
+7. Finally, commit some code and open a pull request.
+
+
+## Documentation:
+
+### List of mixins:
+1. **[align-content](#align-content)** `flexbox`
+2. **[align-items](#align-items)** `flexbox`
+3. **[align-self](#align-self)** `flexbox`
+4. **[animation](#animation)**
+5. **[animation-delay](#animation-delay)**
+6. **[animation-direction](#animation-direction)**
+7. **[animation-duration](#animation-duration)**
+8. **[animation-fill-mode](#animation-fill-mode)**
+9. **[animation-iteration-count](#animation-iteration-count)**
+10. **[animation-name](#animation-name)**
+11. **[animation-play-state](#animation-play-state)**
+12. **[animation-timing-function](#animation-timing-function)**
+13. **[appearance](#appearance)**
+14. **[backface-visibility](#backface-visibility)**
+15. **[background-clip](#background-clip)**
+16. **[background-image](#background-image)**
+17. **[background-origin](#background-origin)**
+18. **[background-size](#background-size)**
+19. **[blur](#blur)** `filter`
+20. **[border-bottom-left-radius](#border-bottom-left-radius)**
+21. **[border-bottom-right-radius](#border-bottom-right-radius)**
+22. **[border-image](#border-image)**
+23. **[border-radius](#border-radius)**
+24. **[border-top-left-radius](#border-top-left-radius)**
+25. **[border-top-right-radius](#border-top-right-radius)**
+26. **[box-shadow](#box-shadow)**
+27. **[box-sizing](#box-sizing)**
+28. **[brightness](#brightness)** `filter`
+29. **[calc](#calc)**
+29. **[column-count](#column-count)**
+30. **[column-gap](#column-gap)**
+31. **[column-rule](#column-rule)**
+32. **[column-width](#column-width)**
+33. **[columns](#columns)**
+34. **[contrast](#contrast)** `filter`
+35. **[display](#display)** `flexbox`
+36. **[drop-shadow](#drop-shadow)** `filter`
+37. **[filter](#filter)**
+38. **[flex](#flex)** `flexbox`
+39. **[flex-basis](#flex-basis)** `flexbox`
+40. **[flex-direction](#flex-direction)** `flexbox`
+41. **[flex-grow](#flex-grow)** `flexbox`
+42. **[flex-shrink](#flex-shrink)** `flexbox`
+43. **[flex-wrap](#flex-wrap)** `flexbox`
+44. **[font-face](#font-face)**
+45. **[grayscale](#grayscale)** `filter`
+46. **[hue-rotate](#hue-rotate)** `filter`
+47. **[invert](#invert)** `filter`
+48. **[justify-content](#justify-content)** `flexbox`
+49. **[keyframes](#keyframes)**
+50. **[opacity](#opacity)**
+51. **[order](#order)**
+52. **[perspective](#perspective)**
+53. **[perspective-origin](#perspective-origin)**
+54. **[placeholder](#placeholder)**
+55. **[rotate](#rotate)** `transform`
+56. **[rotate3d](#rotate3d)** `transform`
+57. **[rotateX](#rotateX)** `transform`
+58. **[rotateY](#rotateY)** `transform`
+59. **[rotateZ](#rotateZ)** `transform`
+60. **[saturate](#saturate)** `filter`
+61. **[scale](#scale)** `transform`
+62. **[scale3d](#scale3d)** `transform`
+63. **[scaleX](#scaleX)** `transform`
+64. **[scaleY](#scaleY)** `transform`
+65. **[scaleZ](#scaleZ)** `transform`
+66. **[selection](#selection)**
+67. **[sepia](#sepia)** `filter`
+68. **[size](#size)** `width, height`
+69. **[skew](#skew)** `transform`
+70. **[skewX](#skewX)** `transform`
+71. **[skewY](#skewY)** `transform`
+72. **[transform](#transform)**
+73. **[transform-origin](#transform-origin)**
+74. **[transform-style](#transform-style)**
+75. **[transition](#transition)**
+76. **[transition-delay](#transition-delay)**
+77. **[transition-duration](#transition-duration)**
+78. **[transition-property](#transition-property)**
+79. **[transition-timing-function](#transition-timing-function)**
+80. **[translate](#translate)** `transform`
+81. **[translate3d](#translate3d)** `transform`
+82. **[translateX](#translateX)** `transform`
+83. **[translateY](#translateY)** `transform`
+84. **[translateZ](#translateZ)** `transform`
+85. **[user-select](#user-select)**
+
+***
+
+{{ documentation }}
+
+
+## Big Thanks to:
+* **[Jan Kuca](http://www.jankuca.com/)** (help us with lesshat-devstack)
+* **[MOZILLA DEVELOPER NETWORK](https://developer.mozilla.org/)** (almost all summary are from MDN)
+* **[Angular UI router](https://github.com/angular-ui/ui-router)** (example of good github profile)
+* **[Marek Hrabe](https://twitter.com/marek)** (for coding lesshat.com)
+* **[Jan Vu Nam](http://dribbble.com/Vucek)** (for design lesshat.com and LESS Hat book icon)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5add6ef
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2995 @@
+
+
+# LESS Hat 2.0 [![Build Status](https://travis-ci.org/csshat/lesshat.png)](https://travis-ci.org/csshat/lesshat)
+
+
+![LESS Hat 2.0](http://f.cl.ly/items/240x0i2S0B101F1d420t/lesshat-v2.0.png)
+
+---
+**[Download latest](https://raw.github.com/PetrBrzek/LESSHat/master/build/lesshat.less)** (or **[Prefixed](https://raw.github.com/PetrBrzek/LESSHat/master/build/lesshat-prefixed.less)**) **|**
+**[Get Starded](#get-started) |**
+**[Contribute](#contribute) |**
+**[Documentation](#documentation) |**
+
+---
+
+ ![LESS Hat 2.0](http://media.giphy.com/media/lI6nHr5hWXlu0/giphy.gif) ![LESS Hat 2.0](http://f.cl.ly/items/0y0M3O0L0d2h1G0Y3W23/yes.png)
+
+## Intro
+Why LESS Hat? In August 2012, while we were developing and extending [CSS Hat](www.csshat.com) for LESS we needed universal mixins. Unfortunately, none of available were good enough that would satisfy our needs and that’s why we created new custom ones on our own, which have become the most popular mixin library for the whole LESS CSS.
+
+After a year, there is a new, **completely rewritten 2.0 version** that brings 86 great mixins, robust workflow for editing, testing and creating new mixins.
+
+Meet the best mixins library in the world. Thanks to the LESS Hat 2.0 is LESS CSS finally usable.
+
+If you would like to use CSS Hat for working with LESS Hat and you still don't have one, we have a suprise for you at **[lesshat.com](http://lesshat.com)** - Check it out!
+
+### Features
+* **Configuration** – You can turn off/on browser prefixes according to your needs.
+* **No restrictions** – If it's possible in CSS, it must be possible to be done with a mixin. Unlimited number of anything, shadows, gradients, gradient swatches.
+* **Standard naming convention** – In LESS Hat, mixins have names like all CSS3 properties. No `.rounded` or `.shadow`. It's stupid.
+* **Cross-browser** – LESS Hat takes care of exporting CSS for all available browsers.
+* **Bootstrap friendly** – You can now use prefixed LESS Hat version and gaily work with Bootstrap. Yeah it's that easy.
+* **Keyframes** – Although it's tricky as hell, but yeah LESS Hat has mixin for `.keyframes`
+* **Blank state ready** – If you call mixin without any arguments, LESS Hat does not pollute your CSS with empty properties. Instead LESS Hat generates nothing.
+* **Workflow** – **No more one line editing!** We created developer friendly worklow for editing and creating mixins. You can test mixins with [MOCHA](http://visionmedia.github.io/mocha/), generate new mixin with [GRUNT](http://gruntjs.com/). Find out more about the workflow in **[contribution](#contribution)** section.
+
+## Get started
+The structure of this repo is:
+
+* **build folder** – there are ready-to-use lesshat.less or lesshat-prefixed.less mixins
+* **mixins folder** – developer version of mixins (more about that in **[contribution](#contribution)** section)
+* **.gitignore** – is a list of files that git will ignore. I know you know that, but it's convention.
+* **.travis.yml** – Configuration file for Travis CI. Travis CI is a hosted continuous integration service for the open source community.
+* **Gruntfle.js** – task runner. If you don't want to use lesshat-devstack ignore it.
+* **LICENCE** – self-explanatory
+* **README-template.md** – If you want to edit readme, edit it in this file. README.md is generated.
+* **README.md** – please don't edit this file. Either edit README-template.md or documentation inside mixins/ folder.
+* **Bower** – is like NPM for frontend. NPM is like Gems for JavaScript. I could go on forever…
+* **package.json** – contains meta data for NPM.
+
+### Structure of LESS Hat mixins
+1. **Global prefix configuration**:
+
+ @webkit: true;
+ @moz: true;
+ @opera: true;
+ @ms: true;
+ @w3c: true;
+
+ If you for example don't want to generate prefixes for opera, just turn it to false.
+
+2. **Typical LESS Hat mixin**:
+
+ .supermixin(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(){})()`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-radius: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-radius: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+ }
+
+ At the top, there are a local prefix configurations. So you can turn off/on browser for one specific mixin. This is quite useful.
+
+ In @process variable is all magic. Please don't edit javascrpt directly in .less file. Instead use [lesshat-devstack](https://github.com/csshat/lesshat-devstack).
+
+ If you call mixin without arguments, some mixins return CSS default value for specific property, but some mixins return magic number *08121991* (Yeah, it's like Lost, TV series, but numbers are different) and because of that LESS CSS generates nothing.
+
+ **Why 08121991 and not just 0 (zero)?**
+ Some CSS properties have zero as default value. So we need more difficult number.
+
+3. **Use (almost) every property without interpolation!**
+
+ Correct mixin calling:
+
+ .background-image(linear-gradient(to bottom, #fb83fa 0%,#e93cec 100%))
+
+ Incorrect calling:
+
+ .background-image(~'linear-gradient(to bottom, #fb83fa 0%,#e93cec 100%)')
+
+ Unfortunately, there are exceptions:
+
+ .keyframes(~'');
+ .calc(~'');
+ .selection(~'');
+
+ // in some cases you have to interpolate border-radius or LESS CSS begins to play on calculator
+ .border-radius(~'20px / 40px');
+
+
+
+## Contribute:
+1. Download this repo.
+2. NPM install.
+3. Now you have LESS Hat devstack (see [documentation](https://github.com/csshat/lesshat-devstack).)
+4. If you create new mixin, use grunt generate command!
+5. If it's possible (almost always) test the coverage for new mixins, and never break existing tests.
+6. Commits should represent one logical change each. If a mixin goes through multiple iterations, squash your commits down to one.
+7. Finally, commit some code and open a pull request.
+
+
+## Documentation:
+
+### List of mixins:
+1. **[align-content](#align-content)** `flexbox`
+2. **[align-items](#align-items)** `flexbox`
+3. **[align-self](#align-self)** `flexbox`
+4. **[animation](#animation)**
+5. **[animation-delay](#animation-delay)**
+6. **[animation-direction](#animation-direction)**
+7. **[animation-duration](#animation-duration)**
+8. **[animation-fill-mode](#animation-fill-mode)**
+9. **[animation-iteration-count](#animation-iteration-count)**
+10. **[animation-name](#animation-name)**
+11. **[animation-play-state](#animation-play-state)**
+12. **[animation-timing-function](#animation-timing-function)**
+13. **[appearance](#appearance)**
+14. **[backface-visibility](#backface-visibility)**
+15. **[background-clip](#background-clip)**
+16. **[background-image](#background-image)**
+17. **[background-origin](#background-origin)**
+18. **[background-size](#background-size)**
+19. **[blur](#blur)** `filter`
+20. **[border-bottom-left-radius](#border-bottom-left-radius)**
+21. **[border-bottom-right-radius](#border-bottom-right-radius)**
+22. **[border-image](#border-image)**
+23. **[border-radius](#border-radius)**
+24. **[border-top-left-radius](#border-top-left-radius)**
+25. **[border-top-right-radius](#border-top-right-radius)**
+26. **[box-shadow](#box-shadow)**
+27. **[box-sizing](#box-sizing)**
+28. **[brightness](#brightness)** `filter`
+29. **[calc](#calc)**
+29. **[column-count](#column-count)**
+30. **[column-gap](#column-gap)**
+31. **[column-rule](#column-rule)**
+32. **[column-width](#column-width)**
+33. **[columns](#columns)**
+34. **[contrast](#contrast)** `filter`
+35. **[display](#display)** `flexbox`
+36. **[drop-shadow](#drop-shadow)** `filter`
+37. **[filter](#filter)**
+38. **[flex](#flex)** `flexbox`
+39. **[flex-basis](#flex-basis)** `flexbox`
+40. **[flex-direction](#flex-direction)** `flexbox`
+41. **[flex-grow](#flex-grow)** `flexbox`
+42. **[flex-shrink](#flex-shrink)** `flexbox`
+43. **[flex-wrap](#flex-wrap)** `flexbox`
+44. **[font-face](#font-face)**
+45. **[grayscale](#grayscale)** `filter`
+46. **[hue-rotate](#hue-rotate)** `filter`
+47. **[invert](#invert)** `filter`
+48. **[justify-content](#justify-content)** `flexbox`
+49. **[keyframes](#keyframes)**
+50. **[opacity](#opacity)**
+51. **[order](#order)**
+52. **[perspective](#perspective)**
+53. **[perspective-origin](#perspective-origin)**
+54. **[placeholder](#placeholder)**
+55. **[rotate](#rotate)** `transform`
+56. **[rotate3d](#rotate3d)** `transform`
+57. **[rotateX](#rotateX)** `transform`
+58. **[rotateY](#rotateY)** `transform`
+59. **[rotateZ](#rotateZ)** `transform`
+60. **[saturate](#saturate)** `filter`
+61. **[scale](#scale)** `transform`
+62. **[scale3d](#scale3d)** `transform`
+63. **[scaleX](#scaleX)** `transform`
+64. **[scaleY](#scaleY)** `transform`
+65. **[scaleZ](#scaleZ)** `transform`
+66. **[selection](#selection)**
+67. **[sepia](#sepia)** `filter`
+68. **[size](#size)** `width, height`
+69. **[skew](#skew)** `transform`
+70. **[skewX](#skewX)** `transform`
+71. **[skewY](#skewY)** `transform`
+72. **[transform](#transform)**
+73. **[transform-origin](#transform-origin)**
+74. **[transform-style](#transform-style)**
+75. **[transition](#transition)**
+76. **[transition-delay](#transition-delay)**
+77. **[transition-duration](#transition-duration)**
+78. **[transition-property](#transition-property)**
+79. **[transition-timing-function](#transition-timing-function)**
+80. **[translate](#translate)** `transform`
+81. **[translate3d](#translate3d)** `transform`
+82. **[translateX](#translateX)** `transform`
+83. **[translateY](#translateY)** `transform`
+84. **[translateZ](#translateZ)** `transform`
+85. **[user-select](#user-select)**
+
+***
+
+### • align-content
+**Summary:**
+
+The CSS align-content property aligns a flex container's lines within the flex container when there is an extra space on the cross-axis. This property has no effect on the single line flexible boxes.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-content)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/align-content/)**
+
+**Syntax:**
+
+Default value: stretch
+
+ .align-content(flex-start | flex-end | center | space-between | space-around | stretch)
+
+**Example:**
+
+ div {
+ .align-content(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-align-content: flex-start;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ }
+
+
+
+### • align-items
+**Summary:**
+
+The CSS align-items property aligns flex items of the current flex line the same way as justify-content but in the perpendicular direction.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/align-items/)**
+
+**Syntax:**
+
+Default value: stretch
+
+ .align-items(flex-start | flex-end | center | baseline | stretch)
+
+**Example:**
+
+ div {
+ .align-items(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-box-align: flex-start;
+ -moz-box-align: start;
+ -webkit-align-items: start;
+ -ms-flex-align: flex-start;
+ align-items: flex-start;
+ }
+
+
+
+### • align-self
+**Summary:**
+
+The align-self CSS property aligns flex items of the current flex line overriding the align-items value. If any of the flex item's cross-axis margin is set to auto, then align-self is ignored.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-self)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/align-self/)**
+
+**Syntax:**
+
+Default value: auto
+
+ .align-self(auto | flex-start | flex-end | center | baseline | stretch)
+
+**Example:**
+
+ div {
+ .align-self(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-align-self: flex-start;
+ -ms-align-self: start;
+ align-self: flex-start;
+ }
+
+
+
+### • animation
+**Summary:**
+
+Shorthand to define a CSS animation, setting all parameters at once.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation/animation)**, **[CSS3files](http://www.css3files.com/animation/)**
+
+**Syntax:**
+
+Default value: none
+
+ .animation(animation-name | animation-duration | animation-timing-function | animation-delay | animation-iteration-count | animation-direction | animation-fill-mode , […]*)
+
+**Example:**
+
+ div {
+ .animation(nameAnimation 2s linear alternate);
+ }
+
+ // Result
+ div {
+ -webkit-animation: nameAnimation 2s linear alternate;
+ -moz-animation: nameAnimation 2s linear alternate;
+ -opera-animation: nameAnimation 2s linear alternate;
+ animation: nameAnimation 2s linear alternate;
+ }
+
+
+
+### • animation-delay
+**Summary:**
+
+Defines a length of time to elapse before an animation starts, allowing an animation to begin execution some time after it is applied.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-delay)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-delay)**
+
+**Syntax:**
+
+Default value: 0
+
+ .animation-delay(, …)
+
+**Tips and tricks:**
+
+If you omit units after time argument, `animation-delay` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .animation-delay(2, 200);
+ }
+
+ // Result
+ div {
+ -webkit-animation-delay: 2s, 200ms;
+ -moz-animation-delay: 2s, 200ms;
+ -opera-animation-delay: 2s, 200ms;
+ animation-delay: 2s, 200ms;
+ }
+
+
+
+### • animation-direction
+**Summary:**
+
+The animation-direction CSS property indicates whether the animation should play in reverse on alternate cycles.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-direction)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-direction)**
+
+**Syntax:**
+
+Default value: normal
+
+ .animation-direction(, …)
+
+**Example:**
+
+ div {
+ .animation-direction(reverse, alternate);
+ }
+
+ // Result
+ div {
+ -webkit-animation-direction: reverse, alternate;
+ -moz-animation-direction: reverse, alternate;
+ -opera-animation-direction: reverse, alternate;
+ animation-direction: reverse, alternate;
+ }
+
+
+
+### • animation-duration
+**Summary:**
+
+The animation-duration CSS property specifies the length of time that an animation should take to complete one cycle.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-duration)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-duration)**
+
+**Syntax:**
+
+Default value: 0
+
+ .animation-duration(, …)
+
+**Tips and tricks:**
+
+If you omit units after time argument, `animation-duration` is trying to be smart and add proper value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .animation-duration(2000);
+ }
+
+ // Result
+ div {
+ -webkit-animation-duration: 2000ms;
+ -moz-animation-duration: 2000ms;
+ -opera-animation-duration: 2000ms;
+ animation-duration: 2000ms;
+ }
+
+
+
+### • animation-fill-mode
+**Summary:**
+
+The animation-fill-mode CSS property specifies how a CSS animation should apply styles to its target before and after it is executing.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-fill-mode)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-fill-mode)**
+
+**Syntax:**
+
+Default value: none
+
+ .animation-fill-mode(, …)
+
+**Example:**
+
+ div {
+ .animation-fill-mode(forwards);
+ }
+
+ // Result
+ div {
+ -webkit-animation-fill-mode: forwards;
+ -moz-animation-fill-mode: forwards;
+ -opera-animation-fill-mode: forwards;
+ animation-fill-mode: forwards;
+ }
+
+
+
+### • animation-iteration-count
+**Summary:**
+
+The animation-iteration-count CSS property specifies how a CSS animation should apply styles to its target before and after it is executing.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-iteration-count)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-iteration-count)**
+
+**Syntax:**
+
+Default value: 1
+
+ .animation-iteration-count(, …)
+
+**Example:**
+
+ div {
+ .animation-iteration-count(3);
+ }
+
+ // Result
+ div {
+ -webkit-animation-iteration-count: 3;
+ -moz-animation-iteration-count: 3;
+ -opera-animation-iteration-count: 3;
+ animation-iteration-count: 3;
+ }
+
+
+
+### • animation-name
+**Summary:**
+
+The animation-name CSS property specifies a list of animations that should be applied to the selected element. Each name indicates a @keyframes at-rule that defines the property values for the animation sequence.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-name)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-name)**
+
+**Syntax:**
+
+Default value: none
+
+ .animation-name(, …)
+
+**Example:**
+
+ div {
+ .animation-name(animation-1, animation-2);
+ }
+
+ // Result
+ div {
+ -webkit-animation-name: animation-1, animation-2;
+ -moz-animation-name: animation-1, animation-2;
+ -opera-animation-name: animation-1, animation-2;
+ animation-name: animation-1, animation-2;
+ }
+
+
+
+### • animation-play-state
+**Summary:**
+
+The animation-play-state CSS property determines whether an animation is running or paused. You can query this property's value to determine whether or not the animation is currently running; in addition, you can set its value to pause and resume playback of an animation.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-play-state)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-play-state)**
+
+**Syntax:**
+
+Default value: running
+
+ .animation-play-state(, …)
+
+**Example:**
+
+ div {
+ .animation-play-state(paused);
+ }
+
+ // Result
+ div {
+ -webkit-animation-play-state: paused;
+ -moz-animation-play-state: paused;
+ -opera-animation-play-state: paused;
+ animation-play-state: paused;
+ }
+
+
+
+### • animation-timing-function
+**Summary:**
+
+The animation-timing-function CSS property determines whether an animation is running or paused. You can query this property's value to determine whether or not the animation is currently running; in addition, you can set its value to pause and resume playback of an animation.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-timing-function)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-timing-function)**
+
+**Syntax:**
+
+Default value: ease
+
+ .animation-timing-function(, …)
+
+**Example:**
+
+ div {
+ .animation-timing-function(cubic-bezier(0.1, 0.7, 1.0, 0.1));
+ }
+
+ // Result
+ div {
+ -webkit-animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ -moz-animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ -opera-animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ }
+
+
+
+### • appearance
+**Summary:**
+
+Allows changing the style of any element to platform-based interface elements or vice versa.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/appearance)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/appearance/)**
+
+**Syntax:**
+
+Default value: none
+
+ .appearance()
+
+**Example:**
+
+ div {
+ .appearance();
+ }
+
+ // Result
+ div {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ }
+
+
+
+### • backface-visibility
+**Summary:**
+
+The CSS backface-visibility property determines whether or not the back face of the element is visible when facing the user. The back face of an element always is a transparent background, letting, when visible, a mirror image of the front face be displayed.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/backface-visibility)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/backface-visibility)**
+
+**Syntax:**
+
+Default value: none
+
+ .backface-visibility(visible | hidden )
+
+**Example:**
+
+ div {
+ .backface-visibility(hidden);
+ }
+
+ // Result
+ div {
+ -webkit-backface-visibility: none;
+ -moz-backface-visibility: none;
+ -o-backface-visibility: none;
+ -ms-backface-visibility: none;
+ backface-visibility: none;
+ }
+
+
+
+### • background-clip
+**Summary:**
+
+The background-clip CSS property specifies whether an element's background, either the color or image, extends underneath its border.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/background-clip)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip)**
+
+**Syntax:**
+
+Default value: border-box
+
+ .background-clip()
+
+**Example:**
+
+ div {
+ .background-clip(padding-box);
+ }
+
+ // Result
+ div {
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+ }
+
+
+
+### • background-image
+**Summary:**
+
+With the background-image you can create prefixed linear or radial gradients. The CSS (linear|radial)-gradient() function creates an `` which represents a linear|radial gradient of colors. The result of this function is an object of the CSS `` data type. Like any other gradient, a CSS linear gradient is not a CSS `` but an image with no intrinsic dimensions; that is, it has neither natural or preferred size, nor ratio. Its concrete size will match the one of the element it applies to.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/functions/linear-gradient)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient)**
+
+**Syntax:**
+
+Default value: none
+
+ .background-image(, ...)
+
+**Tips and tricks:**
+
+The `background-image` mixin is the most robust mixin of all.
+It generates `SVG` for Internet Explorer 9, old webkit, moz and opera syntax.
+Always use W3C syntax for the mixin. It can recalculate angle for older syntax, transform `to top` to `bottom` syntax and it can omit SVG syntax if it's impossible to express SVG e.g. when you call mixin with 55deg.
+If you call mixin without arguments, LESS Hat does not generate anything.
+Great online gradient [generator](http://www.colorzilla.com/gradient-editor/).
+
+
+**Example:**
+
+ div {
+ .background-image(linear-gradient(to bottom, #fb83fa 0%,#e93cec 100%));
+ }
+
+ // Result
+ div {
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMSAxIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj48bGluZWFyR3JhZGllbnQgaWQ9Imxlc3NoYXQtZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiNmYjgzZmEiIHN0b3Atb3BhY2l0eT0iMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U5M2NlYyIgc3RvcC1vcGFjaXR5PSIxIi8+PC9saW5lYXJHcmFkaWVudD48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2xlc3NoYXQtZ2VuZXJhdGVkKSIgLz48L3N2Zz4=);
+ background-image: -webkit-linear-gradient(top, #fb83fa 0%, #e93cec 100%);
+ background-image: -moz-linear-gradient(top, #fb83fa 0%, #e93cec 100%);
+ background-image: -o-linear-gradient(top, #fb83fa 0%, #e93cec 100%);
+ background-image: linear-gradient(to bottom, #fb83fa 0%, #e93cec 100%);
+ }
+
+
+
+### • background-origin
+**Summary:**
+
+The background-origin CSS property determines the background positioning area, that is the position of the origin of an image specified using the background-image CSS property.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/background-origin)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background-origin)**
+
+**Syntax:**
+
+Default value: padding-box
+
+ .background-origin()
+
+**Example:**
+
+ div {
+ .background-origin(content-box);
+ }
+
+ // Result
+ div {
+ -webkit-background-origin: content-box;
+ -moz-background-origin: content-box;
+ background-origin: content-box;
+ }
+
+
+
+### • background-size
+**Summary:**
+
+The background-size CSS property specifies the size of the background images. The size of the image can be fully constrained or only partially in order to preserve its intrinsic ratio.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/background-size)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background-size)**
+
+**Syntax:**
+
+Default value: auto auto
+
+ .background-size(, ...)
+
+**Tips and tricks:**
+
+If you omit units, `background-size` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .background-size(cover, 100%);
+ }
+
+ // Result
+ div {
+ -webkit-background-size: cover, 100%;
+ -moz-background-size: cover, 100%;
+ background-size: cover, 100%;
+ }
+
+
+
+### • blur (shorthand for filter property)
+**Summary:**
+
+Applies a Gaussian blur to the input image. The value of ‘radius’ defines the value of the standard deviation to the Gaussian function, or how many pixels on the screen blend into each other, so a larger value will create more blur. If no parameter is provided, then a value 0 is used. The parameter is specified as a CSS length, but does not accept percentage values.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .blur(length)
+
+**Tips and tricks:**
+
+If you omit units, `blur` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .blur(5px);
+ }
+
+ // Result
+ div {
+ -webkit-filter: blur(5px);
+ -moz-filter: blur(5px);
+ -ms-filter: blur(5px);
+ filter: blur(5px);
+ }
+
+
+
+### • border-bottom-left-radius
+**Summary:**
+
+The border-bottom-left-radius CSS property sets the rounding of the bottom-left corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-left-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-bottom-left-radius(length | percentage)
+
+**Tips and tricks:**
+
+If you omit units, `border-bottom-left-radius` adds `px` automatically.
+If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-bottom-left-radius(10px);
+ }
+
+ // Result
+ div {
+ -webkit-border-bottom-left-radius: 10px;
+ -moz-border-radius-bottomleft: 10px;
+ border-bottom-left-radius: 10px;
+ }
+
+
+
+### • border-bottom-right-radius
+**Summary:**
+
+The border-bottom-right-radius CSS property sets the rounding of the bottom-left corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-right-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-bottom-right-radius(length | percentage)
+
+**Tips and tricks:**
+
+If you omit units, `border-bottom-right-radius` adds `px` automatically.
+If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-bottom-right-radius(10px);
+ }
+
+ // Result
+ div {
+ -webkit-border-bottom-right-radius: 10px;
+ -moz-border-radius-bottomright: 10px;
+ border-bottom-right-radius: 10px;
+ }
+
+
+
+### • border-image
+**Summary:**
+
+The border-image CSS property allows drawing an image on the borders of elements. This makes drawing complex looking widgets much simpler than it has been and removes the need for nine boxes in some cases.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-image)**
+
+**Syntax:**
+
+Default value: based on individual properties
+
+ .border-image(border-image-source border-image-slice border-image-width border-image-outset border-image-repeat)
+
+**Tips and tricks:**
+
+ If you call mixin without arguments, LESS Hat does not generate anything.
+ Good border-image online [generator](http://border-image.com/).
+
+**Example:**
+
+ div {
+ .border-image(url(border.png) 61 45 62 54 repeat);
+ }
+
+ // Result
+ div {
+ -webkit-border-image: url(border.png) 61 45 62 54 repeat;
+ -moz-border-image: url(border.png) 61 45 62 54 repeat;
+ -opera-border-image: url(border.png) 61 45 62 54 repeat;
+ border-image: url(border.png) 61 45 62 54 repeat;
+ }
+
+
+
+### • border-radius
+**Summary:**
+
+The border-radius CSS property allows Web authors to define how rounded border corners are. The curve of each corner is defined using one or two radii, defining its shape: circle or ellipse.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-radius(length | percentage | length / length | percentage / percentage)
+
+**Tips and tricks:**
+
+ If you omit units, `border-radius` adds `px` automatically.
+ If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+ Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-radius(5px);
+ }
+
+ // Result
+ div {
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ }
+
+
+
+### • border-top-left-radius
+**Summary:**
+
+The border-top-left-radius CSS property sets the rounding of the top-left corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-top-left-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-top-left-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-top-left-radius(length | percentage)
+
+**Tips and tricks:**
+
+ If you omit units, `border-top-left-radius` adds `px` automatically.
+ If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+ Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-top-left-radius(5px);
+ }
+
+ // Result
+ div {
+ -webkit-border-top-left-radius: 5px;
+ -moz-border-top-left-radius: 5px;
+ border-top-left-radius: 5px;
+ }
+
+
+
+### • border-top-right-radius
+**Summary:**
+
+The border-top-right-radius CSS property sets the rounding of the top-right corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-top-right-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-top-right-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-top-right-radius(length | percentage)
+
+**Tips and tricks:**
+
+ If you omit units, `border-top-right-radius` adds `px` automatically.
+ If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+ Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-top-right-radius(5px);
+ }
+
+ // Result
+ div {
+ -webkit-border-top-right-radius: 5px;
+ -moz-border-top-right-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+
+
+### • box-shadow
+**Summary:**
+
+The box-shadow CSS property describes one or more shadow effects as a comma-separated list. It allows casting a drop shadow from the frame of almost any element. If a border-radius is specified on the element with a box shadow, the box shadow takes on the same rounded corners. The z-ordering of multiple box shadows is the same as multiple text shadows (the first specified shadow is on top).
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/box-shadow)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow)**
+
+**Syntax:**
+
+Default value: none
+
+ .box-shadow(offset-x offset-y blur-radius color, offset-x offset-y blur-radius color)
+
+**Tips and tricks:**
+
+ If you omit units, `box-shadow` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .box-shadow(0 1px 10px rgba(20,20,20,0.5));
+ }
+
+ // Result
+ div {
+ -webkit-box-shadow: 0 1px 10px rgba(20,20,20,0.5);
+ -moz-box-shadow: 0 1px 10px rgba(20,20,20,0.5);
+ box-shadow: 0 1px 10px rgba(20,20,20,0.5);
+ }
+
+
+
+### • box-sizing
+**Summary:**
+
+The box-sizing CSS property is used to alter the default CSS box model used to calculate widths and heights of elements. It is possible to use this property to emulate the behavior of browsers that do not correctly support the CSS box model specification.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/box-sizing)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing)**
+
+**Syntax:**
+
+Default value: content-box
+
+ .box-sizing(content-box | padding-box | border-box)
+
+**Example:**
+
+ div {
+ .box-sizing(padding-box);
+ }
+
+ // Result
+ div {
+ -webkit-box-sizing: padding-box;
+ -moz-box-sizing: padding-box;
+ box-sizing: padding-box;
+ }
+
+
+
+### • brightness (shorthand for filter property)
+**Summary:**
+
+Applies a linear multiplier to input image, making it appear more or less bright. A value of 0% will create an image that is completely black. A value of 100% leaves the input unchanged. Other values are linear multipliers on the effect. Values of an amount over 100% are allowed, providing brighter results. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .brightness(amount)
+
+**Example:**
+
+ div {
+ .brightness(0.5);
+ }
+
+ // Result
+ div {
+ -webkit-filter: brightness(0.5);
+ -moz-filter: brightness(0.5);
+ -ms-filter: brightness(0.5);
+ filter: brightness(0.5);
+ }
+
+
+
+### • calc
+**Summary:**
+
+The calc() CSS function can be used anywhere a ``, ``, ``, ``, ``, or `` is required.With calc(), you can perform calculations to determine CSS property values.
+
+**THIS MIXIN MUST BE INTERPOLATED ~''**
+The `-lh-property: 0` junk line of code is a neccesary sacrifice due to the hack nature of this set of mixins. (via [less-properties](https://github.com/borodean/less-properties))
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/calc)**
+
+**Syntax:**
+
+ .calc(, ~'')
+
+**Example:**
+
+ div {
+ .calc(width, ~'100% - 33px');
+ }
+
+ // Result
+ div {
+ -lh-property: 0;
+ width:-webkit-calc(100% - 33px);
+ width:-moz-calc(100% - 33px);
+ width:calc(100% - 33px);
+ }
+
+### • column-count
+**Summary:**
+
+The column-count CSS property describes the number of columns of the element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-count)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-count)**
+
+**Syntax:**
+
+Default value: auto
+
+ .column-count( | auto)
+
+**Example:**
+
+ div {
+ .column-count(3);
+ }
+
+ // Result
+ div {
+ -webkit-column-count: 0.5;
+ -moz-column-count: 0.5;
+ column-count: 0.5;
+ }
+
+
+
+### • column-gap
+**Summary:**
+
+The column-gap CSS property sets the size of the gap between columns for elements which are specified to display as a multi-column element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-gap)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap)**
+
+**Syntax:**
+
+Default value: normal
+
+ .column-gap( | normal)
+
+**Tips and tricks:**
+
+ If you omit units, `column-gap` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .column-gap(30);
+ }
+
+ // Result
+ div {
+ -webkit-column-gap: 30px;
+ -moz-column-gap: 30px;
+ column-gap: 30px;
+ }
+
+
+
+### • column-rule
+**Summary:**
+
+In multi-column layouts, the column-rule CSS property specifies a straight line, or "rule", to be drawn between each column.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-rule)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-rule)**
+
+**Syntax:**
+
+Default value: medium none black
+
+ .column-rule( | | )
+
+**Tips and tricks:**
+
+ If you omit units, `column-rule` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .column-rule(5 outset #ff00ff);
+ }
+
+ // Result
+ div {
+ -webkit-column-rule: 5px outset #ff00ff;
+ -moz-column-rule: 5px outset #ff00ff;
+ column-rule: 5px outset #ff00ff;
+ }
+
+
+
+### • column-width
+**Summary:**
+
+The column-width CSS property suggests an optimal column width. This is not a absolute value but a mere hint. Browser will adjust the width of the column around that suggested value, allowing to achieve scalable designs that fit different screen size.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-width)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-width)**
+
+**Syntax:**
+
+Default value: auto
+
+ .column-width( | auto)
+
+**Tips and tricks:**
+
+ If you omit units, `column-width` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .column-width(100px);
+ }
+
+ // Result
+ div {
+ -webkit-column-width: 100px;
+ -moz-column-width: 100px;
+ column-width: 100px;
+ }
+
+
+
+### • columns
+**Summary:**
+
+The columns CSS property is a shorthand property allowing to set both the column-width and the column-count properties at the same time.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/columns)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/columns)**
+
+**Syntax:**
+
+Default value: auto
+
+ .columns( | )
+
+**Tips and tricks:**
+
+ If you omit units for column-width argument, `columns` adds `px` to it automatically.
+
+**Example:**
+
+ div {
+ .columns(100 3);
+ }
+
+ // Result
+ div {
+ -webkit-columns: 100px 3;
+ -moz-columns: 100px 3;
+ columns: 100px 3;
+ }
+
+
+
+### • contrast
+**Summary:**
+
+Adjusts the contrast of the input. A value of 0% will create an image that is completely black. A value of 100% leaves the input unchanged. Values of amount over 100% are allowed, providing results with less contrast. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 100%
+
+ .contrast()
+
+**Tips and tricks:**
+
+ If you omit units, `contrast` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .contrast(200);
+ }
+
+ // Result
+ div {
+ -webkit-filter: contrast(200%);
+ -moz-filter: contrast(200%);
+ -ms-filter: contrast(200%);
+ filter: contrast(200%);
+ }
+
+
+
+### • display
+**Summary:**
+
+The display CSS property specifies the type of rendering box used for an element. This mixin is specifically for flexbox purpose.
+
+Resources: **[CSS-Tricks](http://css-tricks.com/snippets/css/a-guide-to-flexbox/)**
+
+**Syntax:**
+
+ .display( | )
+
+**Example:**
+
+ div {
+ .display(flex);
+ }
+
+ // Result
+ div {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: -moz-box;
+ }
+
+
+
+### • drop-shadow
+**Summary:**
+
+Applies a drop shadow effect to the input image. A drop shadow is effectively a blurred, offset version of the input image's alpha mask drawn in a particular color, composited below the image.
+
+Resources: **MDN **
+
+**Syntax:**
+
+ .drop-shadow( [ | | ])
+
+**Tips and tricks:**
+
+ If you omit units, `drop-shadow` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .drop-shadow(16 16 10 black);
+ }
+
+ // Result
+ div {
+ -webkit-filter: drop-shadow(16px 16px 10px #000000);
+ -moz-filter: drop-shadow(16px 16px 10px #000000);
+ -ms-filter: drop-shadow(16px 16px 10px #000000);
+ filter: drop-shadow(16px 16px 10px #000000);
+ }
+
+
+
+### • filter
+**Summary:**
+
+The CSS filter property provides for effects like blurring or color shifting on an element’s rendering before the element is displayed. Filters are commonly used to adjust the rendering of an image, a background, or a border.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)**
+
+**Syntax:**
+
+Default value: none
+
+ .filter(*)
+
+**Example:**
+
+ div {
+ .filter(grayscale(0.5) blur(10px));
+ }
+
+ // Result
+ div {
+ -webkit-filter: grayscale(0.5) blur(10px);
+ -moz-filter: grayscale(0.5) blur(10px);
+ -ms-filter: grayscale(0.5) blur(10px);
+ filter: grayscale(0.5) blur(10px);
+ }
+
+
+
+### • flex
+**Summary:**
+
+The flex CSS property specifies ability of a flex item to alter their dimensions to fill the available space. Flex items can be stretched to use available space proportional to their flex grow factor or their flex shrink factor to prevent overflow.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex/)**
+
+**Syntax:**
+
+Default value: 0 1 auto
+
+ .flex(none | [ | ])
+
+**Example:**
+
+ div {
+ .flex(1 3 100px);
+ }
+
+ // Result
+ div {
+ -webkit-box-flex: 1;
+ -moz-box-flex: 1;
+ -webkit-flex: 1 3 100px;
+ -ms-flex: 1 3 100px;
+ flex: 1 3 100px;
+ }
+
+
+
+### • flex-basis
+**Summary:**
+
+The CSS flex-basis property specifies the flex basis which is the initial main size of a flex item.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-basis/)**
+
+**Syntax:**
+
+Default value: auto
+
+ .flex-basis()
+
+**Tips and tricks:**
+
+ If you omit units, `flex-basis` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .flex-basis(100);
+ }
+
+ // Result
+ div {
+ -webkit-flex-basis: 100;
+ flex-basis: 100px;
+ }
+
+
+
+### • flex-direction
+**Summary:**
+
+The CSS flex-direction property specifies how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-direction/)**
+
+**Syntax:**
+
+Default value: row
+
+ .flex-direction(row | row-reverse | column | column-reverse)
+
+**Example:**
+
+ div {
+ .flex-direction(row);
+ }
+
+ // Result
+ div {
+ -webkit-box-direction: normal;
+ -moz-box-direction: normal;
+ -webkit-box-orient: horizontal;
+ -moz-box-orient: horizontal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+
+
+
+### • flex-grow
+**Summary:**
+
+The CSS flex-grow property specifies the flex grow factor of a flex item.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-grow/)**
+
+**Syntax:**
+
+Default value: 0
+
+ .flex-grow()
+
+**Example:**
+
+ div {
+ .flex-grow(2);
+ }
+
+ // Result
+ div {
+ -webkit-flex-grow: 2;
+ flex-grow: 2;
+ }
+
+
+
+### • flex-shrink
+**Summary:**
+
+The CSS flex-shrink property specifies the flex shrink factor of a flex item.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-shrink/)**
+
+**Syntax:**
+
+Default value: 1
+
+ .flex-shrink()
+
+**Example:**
+
+ div {
+ .flex-shrink(2);
+ }
+
+ // Result
+ div {
+ -webkit-flex-shrink: 2;
+ flex-shrink: 2;
+ }
+
+
+
+### • flex-wrap
+**Summary:**
+
+The CSS flex-wrap property specifies whether the children are forced into a single line or if the items can be flowed on multiple lines.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-wrap/)**
+
+**Syntax:**
+
+Default value: nowrap
+
+ .flex-wrap(nowrap | wrap | wrap-reverse)
+
+**Example:**
+
+ div {
+ .flex-wrap(wrap-reverse);
+ }
+
+ // Result
+ div {
+ -webkit-flex-wrap: 2;
+ -ms-flex-wrap: 2;
+ flex-wrap: 2;
+ }
+
+
+
+### • font-face
+**Summary:**
+
+The @font-face CSS at-rule allows authors to specify online fonts to display text on their web pages.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face)**
+
+**Syntax:**
+
+ .font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal)
+
+**Example:**
+
+ div {
+ .font-face(Hipster, ~'../fonts/hipster', bold, italic);
+ }
+
+ // Result
+ div {
+ font-family: "Hipster";
+ src: url("../fonts/hipster.eot");
+ src: url("../fonts/hipster.eot?#iefix") format("embedded-opentype"), url("../fonts/hipster.woff") format("woff"), url("../fonts/hipster.ttf") format("truetype"), url("../fonts/hipster.svg#Hipster") format("svg");
+ font-weight: bold;
+ font-style: italic;
+ }
+
+
+
+### • grayscale
+**Summary:**
+
+Converts the input image to grayscale. The value of ‘amount’ defines the proportion of the conversion. A value of 100% is completely grayscale. A value of 0% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .grayscale()
+
+**Tips and tricks:**
+
+ If you omit units, `grayscale` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .grayscale(50);
+ }
+
+ // Result
+ div {
+ -webkit-filter: grayscale(50%);
+ -moz-filter: grayscale(50%);
+ -ms-filter: grayscale(50%);
+ filter: grayscale(50%);
+ }
+
+
+
+### • hue-rotate
+**Summary:**
+
+Applies a hue rotation on the input image. The value of ‘angle’ defines the number of degrees around the color circle the input samples will be adjusted. A value of 0deg leaves the input unchanged. If the ‘angle’ parameter is missing, a value of 0deg is used. Maximum value is 360deg.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .hue-rotate()
+
+**Tips and tricks:**
+
+ If you omit units, `hue-rotate` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .hue-rotate(50);
+ }
+
+ // Result
+ div {
+ -webkit-filter: hue-rotate(50deg);
+ -moz-filter: hue-rotate(50deg);
+ -ms-filter: hue-rotate(50deg);
+ filter: hue-rotate(50deg);
+ }
+
+
+
+### • invert
+**Summary:**
+
+Inverts the samples in the input image. The value of ‘amount’ defines the proportion of the conversion. A value of 100% is completely inverted. A value of 0% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .invert()
+
+**Tips and tricks:**
+
+ If you omit units, `invert` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .invert(100);
+ }
+
+ // Result
+ div {
+ -webkit-filter: invert(100%);
+ -moz-filter: invert(100%);
+ -ms-filter: invert(100%);
+ filter: invert(100%);
+ }
+
+
+
+### • justify-content
+**Summary:**
+
+The CSS justify-content property defines how a browser distributes available space between and around elements when aligning flex items in the main-axis of the current line.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/j/justify-content/)**
+
+**Syntax:**
+
+Default value: flex-start
+
+ .justify-content(flex-start | flex-end | center | space-between | space-around)
+
+**Example:**
+
+ div {
+ .justify-content(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-box-pack: flex-start;
+ -moz-box-pack: start;
+ -webkit-justify-content: start;
+ -ms-flex-pack: flex-start;
+ justify-content: flex-start;
+ }
+
+
+
+### • keyframes
+**Summary:**
+
+The @keyframes CSS at-rule lets authors control the intermediate steps in a CSS animation sequence by establishing keyframes (or waypoints) along the animation sequence that must be reached by certain points during the animation.
+
+LESS CSS isn't great for complicated mixin like this one, so it's little bit tricky.
+LESS CSS compiler doesn't allow to have properties in the root. It's better to understand the problem on the example.
+
+ // There is no selector
+ color: red;
+
+ SyntaxError: properties must be inside selector blocks, they cannot be in the root.
+
+ div { color: red; } // This is correct
+
+Therefore LESS Hat generates **placeholder** selector `lesshat-selector { -lh-property: 0; }` with unknown property, which browsers ignore and after that, there is actually keyframes syntax.
+
+And also because of bad architecture of LESS CSS language, keyframes definition has to be on single line.
+
+**THIS MIXIN MUST BE INTERPOLATED `~''`**
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/atrules/@keyframes)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes)**
+
+**Syntax:**
+
+ .keyframes(~', ')
+
+**Tips and tricks:**
+
+ Properties inside `` are automatically prefixed, if it's needed.
+
+**Example:**
+
+ .keyframes(~'animationName, 0%{ transform: scale(1.5); color: blue; } 100%{ transform: scale(2); color: red }');
+
+ // Result
+ lesshat-selector {-lh-property: 0; }
+ @-webkit-keyframes animationName{ 0%{ -webkit-transform: scale(1.5); color: blue; } 100%{ -webkit-transform: scale(2); color: red }}
+ @-moz-keyframes animationName{ 0%{ -moz-transform: scale(1.5); color: blue; } 100%{ -moz-transform: scale(2); color: red }}
+ @-o-keyframes animationName{ 0%{ -o-transform: scale(1.5); color: blue; } 100%{ -o-transform: scale(2); color: red }}
+ @keyframes animationName{ 0%{ transform: scale(1.5); color: blue; } 100%{ transform: scale(2); color: red };}
+
+
+
+### • opacity
+**Summary:**
+
+The opacity CSS property specifies the transparency of an element, that is, the degree to which the background behind the element is overlaid.
+
+This is not shorthand method for filter opacity.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/opacity)**
+
+**Syntax:**
+
+Default value: 1
+
+ .opacity()
+
+**Tips and tricks:**
+
+ You can enable old filter syntax for IE6, just set `@ms_local: true`.
+
+**Example:**
+
+ div {
+ .opacity(.5);
+ }
+
+ // Result
+ div {
+ -webkit-opacity: 0.5;
+ -moz-opacity: 0.5;
+ opacity: 0.5;
+ }
+
+
+
+### • order
+**Summary:**
+
+The CSS order property specifies the order used to lay out flex items in their flex container.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/order)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/o/order/)**
+
+**Syntax:**
+
+Default value: 0
+
+ .order()
+
+**Example:**
+
+ div {
+ .order(1);
+ }
+
+ // Result
+ div {
+ -webkit-box-ordinal-group: 1;
+ -moz-box-ordinal-group: 1;
+ -ms-flex-order: 1;
+ -webkit-order: 1;
+ order: 1;
+ }
+
+
+
+### • perspective
+**Summary:**
+
+The perspective CSS property determines the distance between the z=0 plane and the user in order to give to the 3D-positioned element some perspective.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/perspective)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/p/perspective/)**
+
+**Syntax:**
+
+Default value: none
+
+ .perspective(none | )
+
+**Tips and tricks:**
+
+ If you omit units, `perspective` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .perspective(1000);
+ }
+
+ // Result
+ div {
+ -moz-perspective: 1000px;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
+ }
+
+
+
+### • perspective-origin
+**Summary:**
+
+The perspective-origin CSS property determines the position the viewer is looking at. It is used as the vanishing point by the perspective property.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/perspective-origin)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/p/perspective-origin/)**
+
+**Syntax:**
+
+Default value: 50% 50%
+
+ .perspective-origin( | | constants | inherit)
+
+**Tips and tricks:**
+
+ If you omit units, `perspective-origin` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .perspective-origin(top left);
+ }
+
+ // Result
+ div {
+ -moz-perspective-origin: top left;
+ -webkit-perspective-origin: top left;
+ perspective-origin: top left;
+ }
+
+
+
+### • placeholder
+**Summary:**
+
+Placeholder is the short hint displayed in the input field before the user clicked to it.
+Default placeholder text in inputs has a light gray color (so far).
+
+Resources: **[CSS-Tricks](http://css-tricks.com/snippets/css/style-placeholder-text/)**
+
+**Syntax:**
+
+ .placeholder(, [])
+
+**Example:**
+
+ div {
+ .placeholder(#666666);
+ }
+
+ // Result
+ div::-webkit-input-placeholder {
+ color: #666666;
+ }
+ div:-moz-placeholder {
+ color: #666666;
+ }
+ div::-moz-placeholder {
+ color: #666666;
+ }
+ div:-ms-input-placeholder {
+ color: #666666;
+ }
+
+ // In root (outside of selectors)
+ .placeholder(#333333);
+
+ // Result
+ ::-webkit-input-placeholder {
+ color: #666666;
+ }
+ :-moz-placeholder {
+ color: #666666;
+ }
+ ::-moz-placeholder {
+ color: #666666;
+ }
+ :-ms-input-placeholder {
+ color: #666666;
+ }
+
+ // In root (outside of selectors)
+ .placeholder(#333333, textarea);
+
+ // Result
+ textarea::-webkit-input-placeholder {
+ color: #666666;
+ }
+ textarea:-moz-placeholder {
+ color: #666666;
+ }
+ textarea::-moz-placeholder {
+ color: #666666;
+ }
+ textarea:-ms-input-placeholder {
+ color: #666666;
+ }
+
+
+
+### • rotate
+**Summary:**
+
+Rotates the element clockwise around its origin by the specified angle.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotate)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotate()
+
+**Tips and tricks:**
+
+ If you omit units, `rotate` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotate(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -opera-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+
+
+### • rotate3d
+**Summary:**
+
+The rotate3d()CSS function defines a transformation that moves the element around a fixed axe without deforming it.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0, 0, 0, 0
+
+ .rotate3d(, , , )
+
+**Tips and tricks:**
+
+ If you omit angle unit, `rotate3d` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotate3d(1, 0, 0, 50);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotate3d(1, 0, 0, 50deg);
+ -moz-transform: rotate3d(1, 0, 0, 50deg);
+ -opera-transform: rotate3d(1, 0, 0, 50deg);
+ -ms-transform: rotate3d(1, 0, 0, 50deg);
+ transform: rotate3d(1, 0, 0, 50deg);
+ }
+
+
+
+### • rotateX
+**Summary:**
+
+The rotateX() CSS function defines a transformation that moves the element around the abscissa without deforming it.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotateX)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotateX()
+
+**Tips and tricks:**
+
+ If you omit units, `rotateX` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotateX(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotateX(45deg);
+ -moz-transform: rotateX(45deg);
+ -opera-transform: rotateX(45deg);
+ -ms-transform: rotateX(45deg);
+ transform: rotateX(45deg);
+ }
+
+
+### • rotateY
+**Summary:**
+
+The rotateY() CSS function defines a transformation that moves the element around the ordinate without deforming it.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotateY)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotateY()
+
+**Tips and tricks:**
+
+ If you omit units, `rotateY` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotateY(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotateY(45deg);
+ -moz-transform: rotateY(45deg);
+ -opera-transform: rotateY(45deg);
+ -ms-transform: rotateY(45deg);
+ transform: rotateY(45deg);
+ }
+
+
+### • rotateZ
+**Summary:**
+
+The rotateZ() CSS function defines a transformation that moves the element around the z-axis without deforming it.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotateZ)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotateZ()
+
+**Tips and tricks:**
+
+ If you omit units, `rotateZ` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotateZ(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotateZ(45deg);
+ -moz-transform: rotateZ(45deg);
+ -opera-transform: rotateZ(45deg);
+ -ms-transform: rotateZ(45deg);
+ transform: rotateZ(45deg);
+ }
+
+
+
+### • saturate
+ **Summary:**
+
+ Saturates the input image. The value of ‘amount’ defines the proportion of the conversion.
+
+ Resources: **MDN **
+
+ **Syntax:**
+
+ Default value: 100%
+
+ .saturate()
+
+ **Tips and tricks:**
+
+ If you omit units, `saturate` adds `%` automatically.
+
+ **Example:**
+
+ div {
+ .saturate(45);
+ }
+
+ // Result
+ div {
+ -webkit-filter: saturate(45deg);
+ -moz-filter: saturate(45deg);
+ -ms-filter: saturate(45deg);
+ filter: saturate(45deg);
+ }
+
+
+
+### • scale
+**Summary:**
+
+Specifies a 2D scaling operation described by [sx, sy]. If sy isn't specified, it is assumed to be equal to sx.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#scale)**
+
+**Syntax:**
+
+Default value: 1
+
+ .scale([, ])
+
+**Example:**
+
+ div {
+ .scale(2);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scale(2);
+ -moz-transform: scale(2);
+ -opera-transform: scale(2);
+ -ms-transform: scale(2);
+ transform: scale(2);
+ }
+
+
+### • scale3d
+**Summary:**
+
+The scale3d() CSS function modifies the size of an element. Because the amount of scaling is defined by a vector, it can resize different dimensions at different scales.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 1, 1, 1
+
+ .scale3d(, , )
+
+**Example:**
+
+ div {
+ .scale3d(1.5, .2, 3);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scale3d(1.5, 0.2, 3);
+ -moz-transform: scale3d(1.5, 0.2, 3);
+ -opera-transform: scale3d(1.5, 0.2, 3);
+ -ms-transform: scale3d(1.5, 0.2, 3);
+ transform: scale3d(1.5, 0.2, 3);
+ }
+
+
+
+### • scaleX
+**Summary:**
+
+Specifies a scale operation using the vector [sx, 1].
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#scaleX)**
+
+**Syntax:**
+
+Default value: 1
+
+ .scaleX()
+
+**Example:**
+
+ div {
+ .scaleX(1.5);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scaleX(1.5);
+ -moz-transform: scaleX(1.5);
+ -opera-transform: scaleX(1.5);
+ -ms-transform: scaleX(1.5);
+ transform: scaleX(1.5);
+ }
+
+
+### • scaleY
+**Summary:**
+
+Specifies a scale operation using the vector [1, sy].
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#scaleY)**
+
+**Syntax:**
+
+Default value: 1
+
+ .scaleY()
+
+**Example:**
+
+ div {
+ .scaleY(1.5);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scaleY(1.5);
+ -moz-transform: scaleY(1.5);
+ -opera-transform: scaleY(1.5);
+ -ms-transform: scaleY(1.5);
+ transform: scaleY(1.5);
+ }
+
+
+### • scaleZ
+**Summary:**
+
+The scaleZ() CSS function modifies the z-coordinate of each element point by a constant facto, except if this scale factor is 1, in which case the function is the identity transform.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 1
+
+ .scaleZ()
+
+**Example:**
+
+ div {
+ .scaleZ(1.5);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scaleZ(1.5);
+ -moz-transform: scaleZ(1.5);
+ -opera-transform: scaleZ(1.5);
+ -ms-transform: scaleZ(1.5);
+ transform: scaleZ(1.5);
+ }
+
+
+
+### • selection
+**Summary:**
+
+The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted.
+LESS CSS compiler doesn't allow to have properties in the root. It's better to understand the problem on the example.
+
+ // There is no selector
+ color: red;
+
+ SyntaxError: properties must be inside selector blocks, they cannot be in the root.
+
+ div { color: red; } // This is correct
+
+Therefore LESS Hat generates **placeholder** selector `lesshat-selector { -lh-property: 0; }` with unknown property, which browsers ignore and after that, there is actually selection syntax.
+
+**THIS MIXIN MUST BE INTERPOLATED `~''`**
+
+Use this mixin outside of CSS selectors
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/::selection)**
+
+**Syntax:**
+
+ .selection([, ])
+
+**Example:**
+
+ .selection(~'color: blue; background: red');
+
+ // Result
+ lesshat-selector {-lh-property: 0;}
+ ::selection{color: blue; background: red}
+ ::-moz-selection{color: blue; background: red;}
+
+
+
+### • sepia
+**Summary:**
+
+Converts the input image to Instagram like effect.
+
+Resources: **MDN **
+
+**Syntax:**
+
+ .sepia()
+
+**Tips and tricks:**
+
+ If you omit units, `sepia` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .sepia(50);
+ }
+
+ // Result
+ div {
+ -webkit-filter: sepia(50%);
+ -moz-filter: sepia(50%);
+ filter: sepia(50%);
+ }
+
+
+
+### • size
+**Summary:**
+
+This is helper mixin for fast dimensions setup.
+
+**Syntax:**
+
+ .size(, [])
+
+**Tips and tricks:**
+
+ When you call mixin with only one argument, second will be the same.
+ Also you can omit units and `size` adds it automatically.
+
+**Example:**
+
+ div {
+ .size(50);
+ }
+
+ // Result
+ div {
+ width: 50px;
+ height: 50px;
+ }
+
+
+
+### • skew
+**Summary:**
+
+Skews the element along the X and Y axes by the specified angles. If ay isn't provided, no skew is performed on the Y axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#skew)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .skew([, ])
+
+**Tips and tricks:**
+
+ If you omit units, `skew` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .skew(20, 30);
+ }
+
+ // Result
+ div {
+ -webkit-transform: skew(20deg, 30deg);
+ -moz-transform: skew(20deg, 30deg);
+ -opera-transform: skew(20deg, 30deg);
+ -ms-transform: skew(20deg, 30deg);
+ transform: skew(20deg, 30deg);
+ }
+
+
+### • skewX
+**Summary:**
+
+Skews the element along the X axis by the given angle.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#skewX)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .skewX()
+
+**Tips and tricks:**
+
+ If you omit units, `skewX` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .skewX(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: skewX(20deg);
+ -moz-transform: skewX(20deg);
+ -opera-transform: skewX(20deg);
+ -ms-transform: skewX(20deg);
+ transform: skewX(20deg);
+ }
+
+
+### • skewY
+**Summary:**
+
+Skews the element along the Y axis by the given angle.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#skewY)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .skewY()
+
+**Tips and tricks:**
+
+ If you omit units, `skewY` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .skewY(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: skewY(20deg);
+ -moz-transform: skewY(20deg);
+ -opera-transform: skewY(20deg);
+ -ms-transform: skewY(20deg);
+ transform: skewY(20deg);
+ }
+
+
+
+### • transform
+**Summary:**
+
+The CSS transform property lets you modify the coordinate space of the CSS visual formatting model.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transform)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform)**
+
+**Syntax:**
+
+ Default value: none
+
+ .transform(none | +)
+
+**Tips and tricks:**
+
+ If you omit units, `transform` can adds correct unit automatically.
+
+ translate: 'px',
+ rotate: 'deg',
+ rotate3d: 'deg',
+ skew: 'deg'
+
+**Example:**
+
+ div {
+ .transform(scale(.5) translate(10, 20));
+ }
+
+ // Result
+ div {
+ -webkit-transform: scale(.5) translate(10, 20);
+ -moz-transform: scale(.5) translate(10, 20);
+ -opera-transform: scale(.5) translate(10, 20);
+ -ms-transform: scale(.5) translate(10, 20);
+ transform: scale(.5) translate(10, 20);
+ }
+
+
+
+### • transform-origin
+**Summary:**
+
+The transform-origin CSS property lets you modify the origin for transformations of an element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transform-origin)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin)**
+
+**Syntax:**
+
+ Default value: 50% 50% 0
+
+ .transform-origin( | | )
+
+**Tips and tricks:**
+
+ If you omit units, `transform-origin` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .transform-origin(50 50);
+ }
+
+ // Result
+ div {
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -opera-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ }
+
+
+
+### • transform-style
+**Summary:**
+
+The transform-style CSS property determines if the children of the element are positioned in the 3D-space or are flattened in the plane of the element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transform-style)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-style)**
+
+**Syntax:**
+
+ Default value: flat
+
+ .transform-style(flat | preserve-3d)
+
+**Example:**
+
+ div {
+ .transform-style(preserve-3d);
+ }
+
+ // Result
+ div {
+ -webkit-transform-style: preserve-3d;
+ -moz-transform-style: preserve-3d;
+ -opera-transform-style: preserve-3d;
+ -ms-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+ }
+
+
+
+### • transition
+**Summary:**
+
+The CSS transition property is a shorthand property for transition-property, transition-duration, transition-timing-function, and transition-delay. It allows to define the transition between two states of an element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition)**
+
+**Syntax:**
+
+ Default value: all 0 ease 0
+
+ .transition([ none | ] | | | )
+
+**Tips and tricks:**
+
+ If you omit units after time argument, `transition` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+ And also properties inside `transition` definition are automatically prefixed, if it is needed.
+
+**Example:**
+
+ div {
+ .transition(box-shadow 0.2s linear, color .4s .2s ease);
+ }
+
+ // Result
+ div {
+ -webkit-transition: -webkit-box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ -moz-transition: -moz-box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ -o-transition: box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ transition: box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ }
+
+
+
+### • transition-delay
+**Summary:**
+
+The transition-delay CSS property specifies the amount of time to wait between a change being requested to a property that is to be transitioned and the start of the transition effect.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-delay)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-delay)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .transition-delay()
+
+**Tips and tricks:**
+
+ If you omit units after time argument, `transition-delay` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .transition-delay(200);
+ }
+
+ // Result
+ div {
+ -webkit-transition-delay: 200ms;
+ -moz-transition-delay: 200ms;
+ -o-transition-delay: 200ms;
+ transition-delay: 200ms;
+ }
+
+
+
+### • transition-duration
+**Summary:**
+
+The transition-duration CSS property specifies the number of seconds or milliseconds a transition animation should take to complete. By default, the value is 0s, meaning that no animation will occur.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-duration)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-duration)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .transition-duration()
+
+**Tips and tricks:**
+
+ If you omit units after time argument, `transition-duration` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .transition-duration(6);
+ }
+
+ // Result
+ div {
+ -webkit-transition-duration: 6s;
+ -moz-transition-duration: 6s;
+ -o-transition-duration: 6s;
+ transition-duration: 6s;
+ }
+
+
+
+### • transition-property
+**Summary:**
+
+The transition-property CSS property is used to specify the names of CSS properties to which a transition effect should be applied.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-property)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-property)**
+
+**Syntax:**
+
+ Default value: all
+
+ .transition-property( | all | none)
+
+**Tips and tricks:**
+
+ And also properties inside `transition-property` definition are automatically prefixed, if it is needed.
+
+**Example:**
+
+ div {
+ .transition-property(box-shadow);
+ }
+
+ // Result
+ div {
+ -webkit-transition-property: -webkit-box-shadow;
+ -moz-transition-property: -moz-box-shadow;
+ -o-transition-property: box-shadow;
+ transition-property: box-shadow;
+ }
+
+
+
+### • transition-timing-function
+**Summary:**
+
+The CSS transition-timing-function property is used to describe how the intermediate values of the CSS properties being affected by a transition effect are calculated. This in essence lets you establish an acceleration curve, so that the speed of the transition can vary over its duration.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-timing-function)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-timing-function)**
+
+**Syntax:**
+
+ Default value: ease
+
+ .transition-timing-function(, ...)
+
+**Example:**
+
+ div {
+ .transition-timing-function(cubic-bezier(0,0,1,1), ease);
+ }
+
+ // Result
+ div {
+ -webkit-transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ -moz-transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ -o-transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ }
+
+
+
+### • translate
+**Summary:**
+
+Specifies a 2D translation by the vector [tx, ty]. If ty isn't specified, its value is assumed to be zero.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translate)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translate([, ])
+
+**Tips and tricks:**
+
+ If you omit units, `translate` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translate(200);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translate(200px);
+ -moz-transform: translate(200px);
+ -o-transform: translate(200px);
+ transform: translate(200px);
+ }
+
+
+### • translate3d
+**Summary:**
+
+The translate3d() CSS function moves the position of the element in the 3D space.
+
+Resources: **MDN **
+
+**Syntax:**
+
+ Default value: 0
+
+ .translate3d(, , )
+
+**Tips and tricks:**
+
+ If you omit units, `translate3d` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translate3d(20, 30, 10);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translate3d(20px, 30px, 10px);
+ -moz-transform: translate3d(20px, 30px, 10px);
+ -o-transform: translate3d(20px, 30px, 10px);
+ transform: translate3d(20px, 30px, 10px);
+ }
+
+
+
+### • translateX
+**Summary:**
+
+Translates the element by the given amount along the X axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translateX)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translateX()
+
+**Tips and tricks:**
+
+ If you omit units, `translateX` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translateX(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translateX(20px);
+ -moz-transform: translateX(20px);
+ -o-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+
+
+### • translateY
+**Summary:**
+
+Translates the element by the given amount along the Y axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translateY)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translateY()
+
+**Tips and tricks:**
+
+ If you omit units, `translateY` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translateY(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translateY(20px);
+ -moz-transform: translateY(20px);
+ -o-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+
+
+### • translateZ
+**Summary:**
+
+Translates the element by the given amount along the Z axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translateZ)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translateZ()
+
+**Tips and tricks:**
+
+ If you omit units, `translateZ` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translateZ(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translateZ(20px);
+ -moz-transform: translateZ(20px);
+ -o-transform: translateZ(20px);
+ transform: translateZ(20px);
+ }
+
+
+
+### • user-select
+**Summary:**
+
+Translates the element by the given amount along the Z axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/user-select)**
+
+**Syntax:**
+
+ Default value: auto
+
+ .user-select(none | text | all | element)
+
+**Example:**
+
+ div {
+ .user-select(none);
+ }
+
+ // Result
+ div {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
+
+
+## Big Thanks to:
+* **[Jan Kuca](http://www.jankuca.com/)** (help us with lesshat-devstack)
+* **[MOZILLA DEVELOPER NETWORK](https://developer.mozilla.org/)** (almost all summary are from MDN)
+* **[Angular UI router](https://github.com/angular-ui/ui-router)** (example of good github profile)
+* **[Marek Hrabe](https://twitter.com/marek)** (for coding lesshat.com)
+* **[Jan Vu Nam](http://dribbble.com/Vucek)** (for design lesshat.com and LESS Hat book icon)
diff --git a/README.rdoc b/README.rdoc
deleted file mode 100644
index b2a5551..0000000
--- a/README.rdoc
+++ /dev/null
@@ -1,26 +0,0 @@
-=LESS HAT
-
-==Features
-
-All CSS3 properties which need to be prefixed
-
-Unlimited number of anything, shadows, gradients, gradient swatches.
-
-Configurable -turn off all other browsers and get just CSS3 which you want
-
-SVG gradient fallback for IE9
-
-Prefix free - everywhere use only W3C syntax and Less Hat takes care of it
-
-
-==About
-
-A supersonic bunch of smart LESS mixins.
-
-Homepage and examples: http://lesshat.com
-
-From creators of: http://csshat.com
-
-==License
-
-LESS Hat is dual-licensed under the new BSD and MIT licenses, see LICENCE file above.
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..0067c28
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,5 @@
+{
+ "name": "lesshat",
+ "version": "2.0.0",
+ "main": "./build/lesshat.less"
+}
\ No newline at end of file
diff --git a/build/lesshat-prefixed.less b/build/lesshat-prefixed.less
new file mode 100644
index 0000000..9cab912
--- /dev/null
+++ b/build/lesshat-prefixed.less
@@ -0,0 +1,2652 @@
+// * =========================================================== *
+// < LESSHat >
+// * =========================================================== *
+//
+// Made with Energy drinks in Prague, Czech Republic.
+// Handcrafted by Petr Brzek, lesshat.com
+// Works great with CSS Hat csshat.com
+
+// version: v2.0.0 (2013-11-06)
+
+// TABLE OF MIXINS:
+ // align-content
+ // align-items
+ // align-self
+ // animation
+ // animation-delay
+ // animation-direction
+ // animation-duration
+ // animation-fill-mode
+ // animation-iteration-count
+ // animation-name
+ // animation-play-state
+ // animation-timing-function
+ // appearance
+ // backface-visibility
+ // background-clip
+ // background-image
+ // background-origin
+ // background-size
+ // blur
+ // border-bottom-left-radius
+ // border-bottom-right-radius
+ // border-image
+ // border-radius
+ // border-top-left-radius
+ // border-top-right-radius
+ // box-shadow
+ // box-sizing
+ // brightness
+ // calc
+ // column-count
+ // column-gap
+ // column-rule
+ // column-width
+ // columns
+ // contrast
+ // display
+ // drop-shadow
+ // filter
+ // flex
+ // flex-basis
+ // flex-direction
+ // flex-grow
+ // flex-shrink
+ // flex-wrap
+ // font-face
+ // grayscale
+ // hue-rotate
+ // invert
+ // justify-content
+ // keyframes
+ // opacity
+ // order
+ // perspective
+ // perspective-origin
+ // placeholder
+ // rotate
+ // rotate3d
+ // rotateX
+ // rotateY
+ // rotateZ
+ // saturate
+ // scale
+ // scale3d
+ // scaleX
+ // scaleY
+ // scaleZ
+ // selection
+ // sepia
+ // size
+ // skew
+ // skewX
+ // skewY
+ // transform
+ // transform-origin
+ // transform-style
+ // transition
+ // transition-delay
+ // transition-duration
+ // transition-property
+ // transition-timing-function
+ // translate
+ // translate3d
+ // translateX
+ // translateY
+ // translateZ
+ // user-select
+
+// Config supported browsers for your project
+@webkit: true;
+@moz: true;
+@opera: true;
+@ms: true;
+@w3c: true;
+
+.lh-align-content(...) {
+
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"stretch"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"stretch","flex-start"==value?value="start":"flex-end"==value?value="end":"space-between"==value?value="justify":"space-around"==value&&(value="distribute"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-align-content: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_ms = 08121991) { -ms-flex-line-pack: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { align-content: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @ms, @ms_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-align-items(...) {
+
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"stretch"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value=value||"stretch","flex-start"==value?value="start":"flex-end"==value&&(value="end"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"stretch","flex-start"==value?value="start":"flex-end"==value&&(value="end"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-align: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-box-align: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_ms = 08121991) { -webkit-align-items: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-flex-align: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { align-items: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @olderwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-align-self(...) {
+
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"auto"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"auto","flex-start"==value?value="start":"flex-end"==value&&(value="end"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-align-self: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_ms = 08121991) { -ms-align-self: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { align-self: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @ms, @ms_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-animation(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"none",/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-delay(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-direction(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"normal"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-duration(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/ms|s/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-fill-mode(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"none"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-iteration-count(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-name(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"none"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-play-state(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"running"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-animation-timing-function(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"ease"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-appearance(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"none"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-appearance: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-appearance: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { appearance: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-backface-visibility(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"visible"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-background-clip(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"border-box"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-background-clip: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-background-clip: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { background-clip: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-background-image(...) {
+
+ @ms_local: true;
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process_ms: ~`(function(value){function base64_encode(data){var o1,o2,o3,h1,h2,h3,h4,bits,b64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i=0,ac=0,enc="",tmp_arr=[];if(!data)return data;do o1=data.charCodeAt(i++),o2=data.charCodeAt(i++),o3=data.charCodeAt(i++),bits=o1<<16|o2<<8|o3,h1=63&bits>>18,h2=63&bits>>12,h3=63&bits>>6,h4=63&bits,tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4);while(i',svg_start:'',linear_gradient_start:'",radial_gradient_end:"",rect_linear:' ',rect_radial:' ',svg_end:" "};if(gradients.length){gradients.forEach(function(value){var obj={};Object.keys(values).some(function(inner_val){return value.indexOf(inner_val)>=0?(obj.svg_direction=values[inner_val],!0):(obj.svg_direction=!1,void 0)}),/linear/.test(value)?obj.svg_type="linear":/radial/.test(value)&&(obj.svg_type="radial");var colors_count=value.match(/rgb|#[a-zA-Z0-9]|hsl/g).length;if(obj.svg_stops=[],value.match(/#[a-zA-Z0-9]/g)&&value.match(/#[a-zA-Z0-9]/g).length==colors_count)if(value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g)&&value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g).length==colors_count)value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g).forEach(function(inner_val){inner_val=inner_val.split(" "),obj.svg_stops.push(' ')});else{var shares=Math.floor(100/(value.match(/#[a-zA-Z0-9]/g).length-1));value.match(/#[a-zA-Z0-9]+/g).forEach(function(inner_val,index){obj.svg_stops.push(' ')})}if(value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g)&&value.match(/(?:rgb|rgba)?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g).length==colors_count)if(value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+\d+%+/g)&&value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+\d+%+/g).length==colors_count)value.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+(\d+%)+/g,function(match,sub,sub_2,sub_3){obj.svg_stops.push(' ')});else{var shares=Math.floor(100/(value.match(/(rgb|rgba)\(/g).length-1));value.match(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g).forEach(function(element,index){element.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g,function(match,sub,sub_2){obj.svg_stops.push(' ')})})}if(value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g)&&value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g).length==colors_count)if(value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g)&&value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g).length==colors_count)value.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g,function(match,sub,sub_2,sub_3){obj.svg_stops.push(' ')});else{var shares=Math.floor(100/(value.match(/(hsl|hsla)\(/g).length-1));value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g).forEach(function(element,index){element.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g,function(match,sub,sub_2){obj.svg_stops.push(' ')})})}svg_gradients.push(obj)});var syntax=[],passed=svg_gradients.every(function(element){for(var i in element)if(0==element[i]||0==element[i].length)return!1;return!0});if(!passed)return 8121991;svg_gradients.forEach(function(element,index){syntax[index]=svg.xml+svg.svg_start,"linear"==element.svg_type?(syntax[index]+=svg.linear_gradient_start+" "+element.svg_direction+">",element.svg_stops.forEach(function(value){syntax[index]+=value}),syntax[index]+=svg.linear_gradient_end,syntax[index]+=svg.rect_linear,syntax[index]+=svg.svg_end):"radial"==element.svg_type&&(syntax[index]+=svg.radial_gradient_start+" "+element.svg_direction+">",element.svg_stops.forEach(function(value){syntax[index]+=value}),syntax[index]+=svg.radial_gradient_end,syntax[index]+=svg.rect_radial,syntax[index]+=svg.svg_end)}),syntax.forEach(function(element,index){syntax[index]=svg.uri_data+base64_encode(element)+")"}),value=syntax.join(",")}return value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_webkit: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},radial_regexp=/(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g,values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0?(value=value.replace(new RegExp(el+"(?![ a-z0-9])","g"),values[el]),!0):(radial_regexp.test(value)&&(value=value.replace(radial_regexp,function(match,sub,sub2,sub3,sub4){return sub.trim()+sub3.trim()+" "+sub4.trim()+","+sub2.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),value=value.replace(/(\d+)\s*deg/g,function(match,sub){return 90-sub+"deg"}).replace(/(linear|radial)-gradient/g,"-webkit-$1-gradient")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},radial_regexp=/(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g,values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0?(value=value.replace(new RegExp(el+"(?![ a-z0-9])","g"),values[el]),!0):(radial_regexp.test(value)&&(value=value.replace(radial_regexp,function(match,sub,sub2,sub3,sub4){return sub.trim()+sub3.trim()+" "+sub4.trim()+","+sub2.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),value=value.replace(/(\d+)\s*deg/g,function(match,sub){return 90-sub+"deg"}).replace(/(linear|radial)-gradient/g,"-moz-$1-gradient")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_opera: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},radial_regexp=/(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g,values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0?(value=value.replace(new RegExp(el+"(?![ a-z0-9])","g"),values[el]),!0):(radial_regexp.test(value)&&(value=value.replace(radial_regexp,function(match,sub,sub2,sub3,sub4){return sub.trim()+sub3.trim()+" "+sub4.trim()+","+sub2.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),value=value.replace(/(\d+)\s*deg/g,function(match,sub){return 90-sub+"deg"}).replace(/(linear|radial)-gradient/g,"-o-$1-gradient")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={top:"to bottom",right:"to left",bottom:"to top",left:"to right"},values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0&&!new RegExp("to\\s+"+el,"g").test(value)?(value=value.replace(new RegExp(el),values[el]),!0):void 0}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_ms = 08121991) { background-image: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_webkit = 08121991) { background-image: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_moz = 08121991) { background-image: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process_opera = 08121991) { background-image: @process_opera; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process_opera = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { background-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @ms, @ms_local);
+ .result(@arguments, 2, @webkit, @webkit_local);
+ .result(@arguments, 3, @moz, @moz_local);
+ .result(@arguments, 4, @opera, @opera_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-background-origin(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"padding-box"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-background-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-background-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { background-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-background-size(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto auto";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-background-size: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-background-size: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { background-size: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-blur(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-border-bottom-left-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-bottom-left-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-bottomleft: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-bottom-left-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-border-bottom-right-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-bottom-right-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-bottomright: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-bottom-right-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-border-image(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||8121991,/^[a-z(.)]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-border-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-border-top-left-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-top-left-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-topleft: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-top-left-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-border-top-right-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-top-right-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-topright: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-top-right-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-box-shadow(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-shadow: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-box-shadow: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { box-shadow: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-box-sizing(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"content-box"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-sizing: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-box-sizing: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { box-sizing: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-brightness(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-calc(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){function syntax(property,start){var end=");\n",definition=value_temp.split(","),syntax=definition[0]+":"+property+"("+(definition[1].trim()||0)+end;"start"==start?value="0;\n"+syntax:value+=syntax}value=value||8121991;var state="@{state}",value_temp=value;if(8121991==value)return value;switch(state){case"1":syntax("-webkit-calc","start"),syntax("-moz-calc"),syntax("calc");break;case"2":syntax("-webkit-calc","start"),syntax("-moz-calc");break;case"3":syntax("-webkit-calc","start"),syntax("calc");break;case"4":syntax("-webkit-calc","start");break;case"5":syntax("-moz-calc","start"),syntax("calc");break;case"6":syntax("-moz-calc","start");break;case"7":syntax("calc","start")}return value=value.replace(/;$/g,"")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 2; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 3; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 4; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 5; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 6; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 7; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) {}
+ .inception(@arguments);
+
+
+}
+
+.lh-column-count(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"auto"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-column-gap(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"normal";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-gap: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-gap: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-gap: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-column-rule(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"medium none black";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-rule: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-rule: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-rule: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-column-width(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-width: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-width: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-width: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-columns(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto auto";var numRegex=/^\d+$/;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,""),value=value.split(" ")),numRegex.test(value[0])&&(value[0]=value[0]+"px"),value.join(" ")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-columns: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-columns: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { columns: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-contrast(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-display(...) {
+
+ @oldwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process_oldwebkit: ~`(function(value){return value="flex"==value||"inline-flex"==value?"-webkit-box":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value="flex"==value?"-ms-flexbox":"inline-flex"==value?"-ms-inline-flexbox":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_webkit: ~`(function(value){return value="flex"==value||"inline-flex"==value?"-webkit-"+value:8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value="flex"==value||"inline-flex"==value?"-moz-box":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return("flex"!=value||"inline-flex"!=value)&&(value=8121991),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_oldwebkit = 08121991) { display: @process_oldwebkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_oldwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { display: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_webkit = 08121991) { display: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process_ms = 08121991) { display: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { display: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @oldwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-drop-shadow(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){if(value=value||8121991,8121991==value)return value;var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9()]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-filter(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"none",/^[-a-zA-Z0-9().]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-flex(...) {
+
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process_olderwebkit: ~`(function(value){return value=value.match(/^\d+/)[0]||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value=value.match(/^\d+/)[0]||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"0 1 auto",/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_olderwebkit = 08121991) { -webkit-box-flex: @process_olderwebkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_olderwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-box-flex: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -webkit-flex: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-flex: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { flex: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @olderwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-flex-basis(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-basis: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { flex-basis: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @w3c, @w3c_local);
+
+}
+
+.lh-flex-direction(...) {
+
+ @oldestwebkit_local: true;
+ @oldermoz_local: true;
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process_oldestwebkit: ~`(function(value){return value="row"==value||"column"==value?"normal":"row-reverse"==value||"column-reverse"==value?"reverse":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_oldermoz: ~`(function(value){return value="row"==value||"column"==value?"normal":"row-reverse"==value||"column-reverse"==value?"reverse":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_olderwebkit: ~`(function(value){return value="row"==value||"row-reverse"==value?"horizontal":"column"==value||"column-reverse"==value?"vertical":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value="row"==value||"row-reverse"==value?"horizontal":"column"==value||"column-reverse"==value?"vertical":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"row"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_oldestwebkit = 08121991) { -webkit-box-direction: @process_oldestwebkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_oldestwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_oldermoz = 08121991) { -moz-box-direction: @process_oldermoz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_oldermoz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_olderwebkit = 08121991) { -webkit-box-orient: @process_olderwebkit; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_olderwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process_moz = 08121991) { -moz-box-orient: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { -webkit-flex-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 6) and not (@process = 08121991) { -ms-flex-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 6) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 7) and not (@process = 08121991) { flex-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 7) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @oldestwebkit_local);
+ .result(@arguments, 2, true, @oldermoz_local);
+ .result(@arguments, 3, true, @olderwebkit_local);
+ .result(@arguments, 4, @moz, @moz_local);
+ .result(@arguments, 5, @webkit, @webkit_local);
+ .result(@arguments, 6, @ms, @ms_local);
+ .result(@arguments, 7, @w3c, @w3c_local);
+
+}
+
+.lh-flex-grow(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-grow: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { flex-grow: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @w3c, @w3c_local);
+
+}
+
+.lh-flex-shrink(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-shrink: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { flex-shrink: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @w3c, @w3c_local);
+
+}
+
+.lh-flex-wrap(...) {
+
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"nowrap"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-wrap: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -ms-flex-wrap: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { flex-wrap: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @ms, @ms_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal) {
+
+ font-family: "@{fontname}";
+ src: url("@{fontfile}-webfont.eot");
+ src: url("@{fontfile}-webfont.eot?#iefix") format("embedded-opentype"),
+ url("@{fontfile}-webfont.woff") format("woff"),
+ url("@{fontfile}-webfont.ttf") format("truetype"),
+ url("@{fontfile}-webfont.svg#@{fontname}") format("svg");
+ font-weight: @fontweight;
+ font-style: @fontstyle;
+
+}
+
+.lh-grayscale(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-hue-rotate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-invert(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-justify-content(...) {
+
+ @oldestwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"flex-start"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value=value||"start","flex-start"==value?value="start":"flex-end"==value?value="end":("space-between"==value||"space-around"==value)&&(value="justify"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"start","flex-start"==value?value="start":"flex-end"==value?value="end":"space-between"==value?value="justify":"space-around"==value&&(value="distribute"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-pack: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-box-pack: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_ms = 08121991) { -webkit-justify-content: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-flex-pack: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { justify-content: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @oldestwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-keyframes(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){function syntax(start,selector,prefix){var end="}\n",definition=value_temp.split(/([a-zA-Z0-9-]+),/g),keyframes=selector+" "+definition[1]+"{";prefix&&prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(definition[2]=definition[2].replace(new RegExp(property,"g"),function(match){return prefix+match}))}),keyframes+=definition[2]+end,"start"==start?value="0; } \n"+keyframes:"startend"==start?value="0; } \n"+keyframes.replace(end,""):value+="end"==start?keyframes.replace(end,""):keyframes}value=value||8121991;var state="@{state}",value_temp=value;if(8121991==value)return value;var prefixedProperties=["animation","background-size","box-shadow","column","transform","filter"];switch(state){case"1":syntax("start","@-webkit-keyframes","-webkit-"),syntax(null,"@-moz-keyframes","-moz-"),syntax(null,"@-o-keyframes","-o-"),syntax("end","@keyframes");break;case"2":syntax("start","@-webkit-keyframes","-webkit-"),syntax(null,"@-moz-keyframes","-moz-"),syntax("end","@keyframes");break;case"3":syntax("start","@-webkit-keyframes","-webkit-"),syntax("end","@-moz-keyframes","-moz-");break;case"4":syntax("start","@-webkit-keyframes","-webkit-"),syntax("end","@-o-keyframes","-o-");break;case"5":syntax("start","@-webkit-keyframes","-webkit-"),syntax("end","@keyframes");break;case"6":syntax("startend","@-webkit-keyframes","-webkit-");break;case"7":syntax("start","@-moz-keyframes","-moz-"),syntax(null,"@-o-keyframes","-o-"),syntax("end","@keyframes");break;case"8":syntax("start","@-moz-keyframes","-moz-"),syntax("end","@-o-keyframes","-o-");break;case"9":syntax("start","@-moz-keyframes","-moz-"),syntax("end","@keyframes");break;case"10":syntax("startend","@-moz-keyframes","-moz-");break;case"11":syntax("start","@-o-keyframes","-o-"),syntax("end","@keyframes");break;case"12":syntax("startend","@-o-keyframes","-o-");break;case"13":syntax("startend","@keyframes")}return value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:2; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:3; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:4; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:5; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:6; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:7; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:8; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:9; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:10; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:11; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:12; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:12; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) {}
+
+ .inception(@arguments);
+
+
+}
+
+.lh-opacity(...) {
+
+ @ms_local: false;
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process_ms: ~`(function(value){return value=value||"filter: alpha(opacity=100)","alpha(opacity="+Math.floor(100*value)+")"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_ms = 08121991) { zoom: 1; filter: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -webkit-opacity: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -moz-opacity: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { opacity: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @ms, @ms_local);
+ .result(@arguments, 2, @webkit, @webkit_local);
+ .result(@arguments, 3, @moz, @moz_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-order(...) {
+
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-ordinal-group: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-box-ordinal-group: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-flex-order: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -webkit-order: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { order: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @olderwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @webkit, @webkit_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-perspective(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"none";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-perspective: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-perspective: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { perspective: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-perspective-origin(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"50% 50%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-perspective-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-perspective-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { perspective-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.lh-placeholder(@color:hotpink, @element: 08121991) {
+ .inception (@arguments) when not (@element = 08121991) {
+ @{element}::-webkit-input-placeholder {
+ color: @color;
+ }
+ @{element}:-moz-placeholder {
+ color: @color;
+ }
+ @{element}::-moz-placeholder {
+ color: @color;
+ }
+ @{element}:-ms-input-placeholder {
+ color: @color;
+ }
+ }
+ .inception (@arguments) when (@element = 08121991) {
+ &::-webkit-input-placeholder {
+ color: @color;
+ }
+ &:-moz-placeholder {
+ color: @color;
+ }
+ &::-moz-placeholder {
+ color: @color;
+ }
+ &:-ms-input-placeholder {
+ color: @color;
+ }
+ }
+ .inception(@arguments);
+}
+
+.lh-rotate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-rotate3d(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"0, 0, 0, 0",value=value.replace(/,\s*\d+$/,function(match){return match+"deg"})})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotateX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotateY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotateZ(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-saturate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-scale(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-scale3d(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1, 1, 1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scaleX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scaleY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scaleZ(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-selection(...) {
+
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){function syntax(start,selector){var end="}\n",definition=value_temp.split(","),syntax=(definition[1]||"")+selector+"{"+definition[0]+end;"start"==start?value="0; } \n"+syntax:"startend"==start?value="0; } \n"+syntax.replace(end,""):value+="end"==start?syntax.replace(end,""):syntax}value=value||8121991;var state="@{state}",value_temp=value;if(8121991==value)return value;switch(state){case"1":syntax("start","::selection"),syntax("end","::-moz-selection");break;case"2":syntax("startend","::selection");break;case"3":syntax("startend","::-moz-selection")}return value=value.replace(/;$/g,"")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:2; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:3; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@moz_local = true) and not (@w3c_local = true) {}
+
+ .inception(@arguments);
+
+
+}
+
+.lh-sepia(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-size(@square) {
+ @unit: 'px';
+ .process(@square) when (ispixel(@square)), (isem(@square)), (ispercentage(@square)) {
+ width: @square;
+ height: @square;
+ }
+
+ .process(@square) when not (ispixel(@square)) and not (isem(@square)) and not (ispercentage(@square)) {
+ width: ~`@{square} + @{unit}`;
+ height: ~`@{square} + @{unit}`;
+ }
+
+ .process(@square);
+
+}
+
+.lh-size(@width, @height) {
+ @unit: 'px';
+ .process(@width, @height) when (ispixel(@width)) and (ispixel(@height)), (isem(@width)) and (isem(@height)), (ispercentage(@width)) and (ispercentage(@height)), (ispixel(@width)) and (ispercentage(@height)), (ispixel(@width)) and (isem(@height)), (ispercentage(@width)) and (ispixel(@height)), (ispercentage(@width)) and (isem(@height)), (isem(@width)) and (ispixel(@height)), (isem(@width)) and (ispercentage(@height)) {
+ width: @width;
+ height: @height;
+ }
+
+ .process(@width, @height) when not (ispixel(@width)) and not (ispixel(@height)) and not (ispercentage(@width)) and not (ispercentage(@height)) and not (isem(@width)) and not (isem(@height)) {
+ width: ~`@{width} + @{unit}`;
+ height: ~`@{height} + @{unit}`;
+ }
+
+ .process(@width, @height) when not (ispixel(@width)) and not (ispercentage(@width)) and not (isem(@width)) {
+ width: ~`@{width} + @{unit}`;
+ height: @height;
+ }
+
+ .process(@width, @height) when not (ispixel(@height)) and not (ispercentage(@height)) and not (isem(@height)) {
+ width: @width;
+ height: ~`@{height} + @{unit}`;
+ }
+
+ .process(@width, @height);
+
+}
+
+.lh-skew(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.skewX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.skewY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-transform(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"none";var functions={translate:"px",rotate:"deg",rotate3d:"deg",skew:"deg"};/^\w*\(?[a-z0-9.]*\)?/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,""));for(var i in functions)value.indexOf(i)>=0&&(value=value.replace(new RegExp(i+"[\\w]?\\([a-z0-9, %]*\\)"),function(match){var regex=/(\d+\.?\d*)(?!\w|%)/g;return"rotate3d"==i&&(regex=/,\s*\d+$/),match.replace(regex,function(innerMatch){return innerMatch+functions[i]})}));return value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-transform-origin(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"50% 50% 0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-transform-style(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"flat"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-transition(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process_webkit: ~`(function(value){value=value||"all 0 ease 0";var prefixedProperties=["background-size","border-","box-shadow","column","transform","filter"],prefix="-webkit-",valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){value=value||"all 0 ease 0";var prefixedProperties=["background-size","box-shadow","column","transform","filter"],prefix="-moz-",valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_opera: ~`(function(value){value=value||"all 0 ease 0";var prefixedProperties=["transform"],prefix="-o-",valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){value=value||"all 0 ease 0";var valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_webkit = 08121991) { -webkit-transition: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-transition: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_opera = 08121991) { -o-transition: @process_opera; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_opera = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-transition-delay(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-transition-duration(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/ms|s/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-transition-property(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process_webkit: ~`(function(value){value=value||"all";var prefixedProperties=["background-size","border-","box-shadow","column","transform","filter"],prefix="-webkit-";return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){value=value||"all";var prefixedProperties=["background-size","box-shadow","column","transform","filter"],prefix="-moz-";return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_opera: ~`(function(value){value=value||"all";var prefixedProperties=["transform"],prefix="-o-";return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"all",/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_webkit = 08121991) { -webkit-transition-property: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-transition-property: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_opera = 08121991) { -o-transition-property: @process_opera; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_opera = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-property: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-transition-timing-function(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"ease"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.lh-translate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-translate3d(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0, 0, 0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translateX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translateY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translateZ(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.lh-user-select(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"auto"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+// What is the magic number 08121991?
diff --git a/build/lesshat.less b/build/lesshat.less
new file mode 100644
index 0000000..a51c3bc
--- /dev/null
+++ b/build/lesshat.less
@@ -0,0 +1,2652 @@
+// * =========================================================== *
+// < LESSHat >
+// * =========================================================== *
+//
+// Made with Energy drinks in Prague, Czech Republic.
+// Handcrafted by Petr Brzek, lesshat.com
+// Works great with CSS Hat csshat.com
+
+// version: v2.0.0 (2013-11-06)
+
+// TABLE OF MIXINS:
+ // align-content
+ // align-items
+ // align-self
+ // animation
+ // animation-delay
+ // animation-direction
+ // animation-duration
+ // animation-fill-mode
+ // animation-iteration-count
+ // animation-name
+ // animation-play-state
+ // animation-timing-function
+ // appearance
+ // backface-visibility
+ // background-clip
+ // background-image
+ // background-origin
+ // background-size
+ // blur
+ // border-bottom-left-radius
+ // border-bottom-right-radius
+ // border-image
+ // border-radius
+ // border-top-left-radius
+ // border-top-right-radius
+ // box-shadow
+ // box-sizing
+ // brightness
+ // calc
+ // column-count
+ // column-gap
+ // column-rule
+ // column-width
+ // columns
+ // contrast
+ // display
+ // drop-shadow
+ // filter
+ // flex
+ // flex-basis
+ // flex-direction
+ // flex-grow
+ // flex-shrink
+ // flex-wrap
+ // font-face
+ // grayscale
+ // hue-rotate
+ // invert
+ // justify-content
+ // keyframes
+ // opacity
+ // order
+ // perspective
+ // perspective-origin
+ // placeholder
+ // rotate
+ // rotate3d
+ // rotateX
+ // rotateY
+ // rotateZ
+ // saturate
+ // scale
+ // scale3d
+ // scaleX
+ // scaleY
+ // scaleZ
+ // selection
+ // sepia
+ // size
+ // skew
+ // skewX
+ // skewY
+ // transform
+ // transform-origin
+ // transform-style
+ // transition
+ // transition-delay
+ // transition-duration
+ // transition-property
+ // transition-timing-function
+ // translate
+ // translate3d
+ // translateX
+ // translateY
+ // translateZ
+ // user-select
+
+// Config supported browsers for your project
+@webkit: true;
+@moz: true;
+@opera: true;
+@ms: true;
+@w3c: true;
+
+.align-content(...) {
+
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"stretch"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"stretch","flex-start"==value?value="start":"flex-end"==value?value="end":"space-between"==value?value="justify":"space-around"==value&&(value="distribute"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-align-content: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_ms = 08121991) { -ms-flex-line-pack: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { align-content: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @ms, @ms_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.align-items(...) {
+
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"stretch"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value=value||"stretch","flex-start"==value?value="start":"flex-end"==value&&(value="end"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"stretch","flex-start"==value?value="start":"flex-end"==value&&(value="end"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-align: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-box-align: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_ms = 08121991) { -webkit-align-items: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-flex-align: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { align-items: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @olderwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.align-self(...) {
+
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"auto"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"auto","flex-start"==value?value="start":"flex-end"==value&&(value="end"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-align-self: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_ms = 08121991) { -ms-align-self: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { align-self: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @ms, @ms_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.animation(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"none",/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-delay(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-direction(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"normal"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-duration(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/ms|s/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-fill-mode(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"none"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-fill-mode: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-iteration-count(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-iteration-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-name(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"none"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-name: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-play-state(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"running"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-play-state: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.animation-timing-function(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"ease"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { animation-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.appearance(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"none"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-appearance: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-appearance: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { appearance: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.backface-visibility(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"visible"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { backface-visibility: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.background-clip(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"border-box"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-background-clip: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-background-clip: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { background-clip: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.background-image(...) {
+
+ @ms_local: true;
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process_ms: ~`(function(value){function base64_encode(data){var o1,o2,o3,h1,h2,h3,h4,bits,b64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i=0,ac=0,enc="",tmp_arr=[];if(!data)return data;do o1=data.charCodeAt(i++),o2=data.charCodeAt(i++),o3=data.charCodeAt(i++),bits=o1<<16|o2<<8|o3,h1=63&bits>>18,h2=63&bits>>12,h3=63&bits>>6,h4=63&bits,tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4);while(i',svg_start:'',linear_gradient_start:'",radial_gradient_end:"",rect_linear:' ',rect_radial:' ',svg_end:" "};if(gradients.length){gradients.forEach(function(value){var obj={};Object.keys(values).some(function(inner_val){return value.indexOf(inner_val)>=0?(obj.svg_direction=values[inner_val],!0):(obj.svg_direction=!1,void 0)}),/linear/.test(value)?obj.svg_type="linear":/radial/.test(value)&&(obj.svg_type="radial");var colors_count=value.match(/rgb|#[a-zA-Z0-9]|hsl/g).length;if(obj.svg_stops=[],value.match(/#[a-zA-Z0-9]/g)&&value.match(/#[a-zA-Z0-9]/g).length==colors_count)if(value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g)&&value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g).length==colors_count)value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g).forEach(function(inner_val){inner_val=inner_val.split(" "),obj.svg_stops.push(' ')});else{var shares=Math.floor(100/(value.match(/#[a-zA-Z0-9]/g).length-1));value.match(/#[a-zA-Z0-9]+/g).forEach(function(inner_val,index){obj.svg_stops.push(' ')})}if(value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g)&&value.match(/(?:rgb|rgba)?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g).length==colors_count)if(value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+\d+%+/g)&&value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+\d+%+/g).length==colors_count)value.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+(\d+%)+/g,function(match,sub,sub_2,sub_3){obj.svg_stops.push(' ')});else{var shares=Math.floor(100/(value.match(/(rgb|rgba)\(/g).length-1));value.match(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g).forEach(function(element,index){element.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g,function(match,sub,sub_2){obj.svg_stops.push(' ')})})}if(value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g)&&value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g).length==colors_count)if(value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g)&&value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g).length==colors_count)value.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g,function(match,sub,sub_2,sub_3){obj.svg_stops.push(' ')});else{var shares=Math.floor(100/(value.match(/(hsl|hsla)\(/g).length-1));value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g).forEach(function(element,index){element.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g,function(match,sub,sub_2){obj.svg_stops.push(' ')})})}svg_gradients.push(obj)});var syntax=[],passed=svg_gradients.every(function(element){for(var i in element)if(0==element[i]||0==element[i].length)return!1;return!0});if(!passed)return 8121991;svg_gradients.forEach(function(element,index){syntax[index]=svg.xml+svg.svg_start,"linear"==element.svg_type?(syntax[index]+=svg.linear_gradient_start+" "+element.svg_direction+">",element.svg_stops.forEach(function(value){syntax[index]+=value}),syntax[index]+=svg.linear_gradient_end,syntax[index]+=svg.rect_linear,syntax[index]+=svg.svg_end):"radial"==element.svg_type&&(syntax[index]+=svg.radial_gradient_start+" "+element.svg_direction+">",element.svg_stops.forEach(function(value){syntax[index]+=value}),syntax[index]+=svg.radial_gradient_end,syntax[index]+=svg.rect_radial,syntax[index]+=svg.svg_end)}),syntax.forEach(function(element,index){syntax[index]=svg.uri_data+base64_encode(element)+")"}),value=syntax.join(",")}return value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_webkit: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},radial_regexp=/(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g,values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0?(value=value.replace(new RegExp(el+"(?![ a-z0-9])","g"),values[el]),!0):(radial_regexp.test(value)&&(value=value.replace(radial_regexp,function(match,sub,sub2,sub3,sub4){return sub.trim()+sub3.trim()+" "+sub4.trim()+","+sub2.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),value=value.replace(/(\d+)\s*deg/g,function(match,sub){return 90-sub+"deg"}).replace(/(linear|radial)-gradient/g,"-webkit-$1-gradient")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},radial_regexp=/(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g,values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0?(value=value.replace(new RegExp(el+"(?![ a-z0-9])","g"),values[el]),!0):(radial_regexp.test(value)&&(value=value.replace(radial_regexp,function(match,sub,sub2,sub3,sub4){return sub.trim()+sub3.trim()+" "+sub4.trim()+","+sub2.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),value=value.replace(/(\d+)\s*deg/g,function(match,sub){return 90-sub+"deg"}).replace(/(linear|radial)-gradient/g,"-moz-$1-gradient")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_opera: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},radial_regexp=/(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g,values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0?(value=value.replace(new RegExp(el+"(?![ a-z0-9])","g"),values[el]),!0):(radial_regexp.test(value)&&(value=value.replace(radial_regexp,function(match,sub,sub2,sub3,sub4){return sub.trim()+sub3.trim()+" "+sub4.trim()+","+sub2.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),value=value.replace(/(\d+)\s*deg/g,function(match,sub){return 90-sub+"deg"}).replace(/(linear|radial)-gradient/g,"-o-$1-gradient")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){if(value=value||8121991,8121991==value)return value;var values={top:"to bottom",right:"to left",bottom:"to top",left:"to right"},values_keys=Object.keys(values);return values_keys.some(function(el){return value.indexOf(el)>=0&&!new RegExp("to\\s+"+el,"g").test(value)?(value=value.replace(new RegExp(el),values[el]),!0):void 0}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_ms = 08121991) { background-image: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_webkit = 08121991) { background-image: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_moz = 08121991) { background-image: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process_opera = 08121991) { background-image: @process_opera; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process_opera = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { background-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @ms, @ms_local);
+ .result(@arguments, 2, @webkit, @webkit_local);
+ .result(@arguments, 3, @moz, @moz_local);
+ .result(@arguments, 4, @opera, @opera_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.background-origin(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value||"padding-box"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-background-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-background-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { background-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.background-size(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto auto";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-background-size: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-background-size: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { background-size: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.blur(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: blur(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.border-bottom-left-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-bottom-left-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-bottomleft: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-bottom-left-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.border-bottom-right-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-bottom-right-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-bottomright: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-bottom-right-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.border-image(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||8121991,/^[a-z(.)]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { border-image: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.border-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.border-top-left-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-top-left-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-topleft: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-top-left-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.border-top-right-radius(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-border-top-right-radius: @process; -webkit-background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-border-radius-topright: @process; -moz-background-clip: padding; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { border-top-right-radius: @process; background-clip: padding-box; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.box-shadow(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-shadow: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-box-shadow: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { box-shadow: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.box-sizing(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"content-box"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-sizing: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-box-sizing: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { box-sizing: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.brightness(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: brightness(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.calc(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){function syntax(property,start){var end=");\n",definition=value_temp.split(","),syntax=definition[0]+":"+property+"("+(definition[1].trim()||0)+end;"start"==start?value="0;\n"+syntax:value+=syntax}value=value||8121991;var state="@{state}",value_temp=value;if(8121991==value)return value;switch(state){case"1":syntax("-webkit-calc","start"),syntax("-moz-calc"),syntax("calc");break;case"2":syntax("-webkit-calc","start"),syntax("-moz-calc");break;case"3":syntax("-webkit-calc","start"),syntax("calc");break;case"4":syntax("-webkit-calc","start");break;case"5":syntax("-moz-calc","start"),syntax("calc");break;case"6":syntax("-moz-calc","start");break;case"7":syntax("calc","start")}return value=value.replace(/;$/g,"")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 2; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 3; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 4; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 5; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 6; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 7; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) {}
+ .inception(@arguments);
+
+
+}
+
+.column-count(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"auto"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-count: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.column-gap(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"normal";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-gap: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-gap: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-gap: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.column-rule(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"medium none black";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-rule: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-rule: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-rule: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.column-width(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-column-width: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-column-width: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { column-width: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.columns(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto auto";var numRegex=/^\d+$/;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,""),value=value.split(" ")),numRegex.test(value[0])&&(value[0]=value[0]+"px"),value.join(" ")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-columns: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-columns: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { columns: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.contrast(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: ~"contrast(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.display(...) {
+
+ @oldwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process_oldwebkit: ~`(function(value){return value="flex"==value||"inline-flex"==value?"-webkit-box":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value="flex"==value?"-ms-flexbox":"inline-flex"==value?"-ms-inline-flexbox":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_webkit: ~`(function(value){return value="flex"==value||"inline-flex"==value?"-webkit-"+value:8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value="flex"==value||"inline-flex"==value?"-moz-box":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return("flex"!=value||"inline-flex"!=value)&&(value=8121991),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_oldwebkit = 08121991) { display: @process_oldwebkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_oldwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { display: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_webkit = 08121991) { display: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process_ms = 08121991) { display: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { display: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @oldwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.drop-shadow(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){if(value=value||8121991,8121991==value)return value;var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9()]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: drop-shadow(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.filter(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"none",/^[-a-zA-Z0-9().]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.flex(...) {
+
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process_olderwebkit: ~`(function(value){return value=value.match(/^\d+/)[0]||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value=value.match(/^\d+/)[0]||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"0 1 auto",/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_olderwebkit = 08121991) { -webkit-box-flex: @process_olderwebkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_olderwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-box-flex: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -webkit-flex: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-flex: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { flex: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @olderwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.flex-basis(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"auto";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-basis: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { flex-basis: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @w3c, @w3c_local);
+
+}
+
+.flex-direction(...) {
+
+ @oldestwebkit_local: true;
+ @oldermoz_local: true;
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process_oldestwebkit: ~`(function(value){return value="row"==value||"column"==value?"normal":"row-reverse"==value||"column-reverse"==value?"reverse":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_oldermoz: ~`(function(value){return value="row"==value||"column"==value?"normal":"row-reverse"==value||"column-reverse"==value?"reverse":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_olderwebkit: ~`(function(value){return value="row"==value||"row-reverse"==value?"horizontal":"column"==value||"column-reverse"==value?"vertical":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value="row"==value||"row-reverse"==value?"horizontal":"column"==value||"column-reverse"==value?"vertical":8121991})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"row"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_oldestwebkit = 08121991) { -webkit-box-direction: @process_oldestwebkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_oldestwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_oldermoz = 08121991) { -moz-box-direction: @process_oldermoz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_oldermoz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_olderwebkit = 08121991) { -webkit-box-orient: @process_olderwebkit; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_olderwebkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process_moz = 08121991) { -moz-box-orient: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { -webkit-flex-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 6) and not (@process = 08121991) { -ms-flex-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 6) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 7) and not (@process = 08121991) { flex-direction: @process; }
+ .inception (@signal, @arguments) when (@signal = 7) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @oldestwebkit_local);
+ .result(@arguments, 2, true, @oldermoz_local);
+ .result(@arguments, 3, true, @olderwebkit_local);
+ .result(@arguments, 4, @moz, @moz_local);
+ .result(@arguments, 5, @webkit, @webkit_local);
+ .result(@arguments, 6, @ms, @ms_local);
+ .result(@arguments, 7, @w3c, @w3c_local);
+
+}
+
+.flex-grow(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-grow: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { flex-grow: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @w3c, @w3c_local);
+
+}
+
+.flex-shrink(...) {
+
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-shrink: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { flex-shrink: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @w3c, @w3c_local);
+
+}
+
+.flex-wrap(...) {
+
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"nowrap"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-flex-wrap: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -ms-flex-wrap: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { flex-wrap: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @ms, @ms_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal) {
+
+ font-family: "@{fontname}";
+ src: url("@{fontfile}-webfont.eot");
+ src: url("@{fontfile}-webfont.eot?#iefix") format("embedded-opentype"),
+ url("@{fontfile}-webfont.woff") format("woff"),
+ url("@{fontfile}-webfont.ttf") format("truetype"),
+ url("@{fontfile}-webfont.svg#@{fontname}") format("svg");
+ font-weight: @fontweight;
+ font-style: @fontstyle;
+
+}
+
+.grayscale(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: grayscale(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.hue-rotate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: hue-rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.invert(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: invert(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.justify-content(...) {
+
+ @oldestwebkit_local: true;
+ @moz_local: true;
+ @webkit_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"flex-start"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){return value=value||"start","flex-start"==value?value="start":"flex-end"==value?value="end":("space-between"==value||"space-around"==value)&&(value="justify"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_ms: ~`(function(value){return value=value||"start","flex-start"==value?value="start":"flex-end"==value?value="end":"space-between"==value?value="justify":"space-around"==value&&(value="distribute"),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-pack: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-box-pack: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_ms = 08121991) { -webkit-justify-content: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-flex-pack: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { justify-content: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @oldestwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @webkit, @webkit_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.keyframes(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){function syntax(start,selector,prefix){var end="}\n",definition=value_temp.split(/([a-zA-Z0-9-]+),/g),keyframes=selector+" "+definition[1]+"{";prefix&&prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(definition[2]=definition[2].replace(new RegExp(property,"g"),function(match){return prefix+match}))}),keyframes+=definition[2]+end,"start"==start?value="0; } \n"+keyframes:"startend"==start?value="0; } \n"+keyframes.replace(end,""):value+="end"==start?keyframes.replace(end,""):keyframes}value=value||8121991;var state="@{state}",value_temp=value;if(8121991==value)return value;var prefixedProperties=["animation","background-size","box-shadow","column","transform","filter"];switch(state){case"1":syntax("start","@-webkit-keyframes","-webkit-"),syntax(null,"@-moz-keyframes","-moz-"),syntax(null,"@-o-keyframes","-o-"),syntax("end","@keyframes");break;case"2":syntax("start","@-webkit-keyframes","-webkit-"),syntax(null,"@-moz-keyframes","-moz-"),syntax("end","@keyframes");break;case"3":syntax("start","@-webkit-keyframes","-webkit-"),syntax("end","@-moz-keyframes","-moz-");break;case"4":syntax("start","@-webkit-keyframes","-webkit-"),syntax("end","@-o-keyframes","-o-");break;case"5":syntax("start","@-webkit-keyframes","-webkit-"),syntax("end","@keyframes");break;case"6":syntax("startend","@-webkit-keyframes","-webkit-");break;case"7":syntax("start","@-moz-keyframes","-moz-"),syntax(null,"@-o-keyframes","-o-"),syntax("end","@keyframes");break;case"8":syntax("start","@-moz-keyframes","-moz-"),syntax("end","@-o-keyframes","-o-");break;case"9":syntax("start","@-moz-keyframes","-moz-"),syntax("end","@keyframes");break;case"10":syntax("startend","@-moz-keyframes","-moz-");break;case"11":syntax("start","@-o-keyframes","-o-"),syntax("end","@keyframes");break;case"12":syntax("startend","@-o-keyframes","-o-");break;case"13":syntax("startend","@keyframes")}return value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:2; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:3; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:4; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:5; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:6; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:7; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:8; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:9; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:10; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:11; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:12; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:12; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) {}
+
+ .inception(@arguments);
+
+
+}
+
+.opacity(...) {
+
+ @ms_local: false;
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process_ms: ~`(function(value){return value=value||"filter: alpha(opacity=100)","alpha(opacity="+Math.floor(100*value)+")"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_ms = 08121991) { zoom: 1; filter: @process_ms; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_ms = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -webkit-opacity: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -moz-opacity: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { opacity: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @ms, @ms_local);
+ .result(@arguments, 2, @webkit, @webkit_local);
+ .result(@arguments, 3, @moz, @moz_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.order(...) {
+
+ @olderwebkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @webkit_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"0"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-box-ordinal-group: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-box-ordinal-group: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-flex-order: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -webkit-order: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { order: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, true, @olderwebkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @webkit, @webkit_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.perspective(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"none";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-perspective: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-perspective: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { perspective: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.perspective-origin(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"50% 50%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-perspective-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-perspective-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { perspective-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @w3c, @w3c_local);
+
+}
+
+.placeholder(@color:hotpink, @element: 08121991) {
+ .inception (@arguments) when not (@element = 08121991) {
+ @{element}::-webkit-input-placeholder {
+ color: @color;
+ }
+ @{element}:-moz-placeholder {
+ color: @color;
+ }
+ @{element}::-moz-placeholder {
+ color: @color;
+ }
+ @{element}:-ms-input-placeholder {
+ color: @color;
+ }
+ }
+ .inception (@arguments) when (@element = 08121991) {
+ &::-webkit-input-placeholder {
+ color: @color;
+ }
+ &:-moz-placeholder {
+ color: @color;
+ }
+ &::-moz-placeholder {
+ color: @color;
+ }
+ &:-ms-input-placeholder {
+ color: @color;
+ }
+ }
+ .inception(@arguments);
+}
+
+.rotate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotate(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotate3d(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"0, 0, 0, 0",value=value.replace(/,\s*\d+$/,function(match){return match+"deg"})})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotateX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotateY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.rotateZ(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: rotateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.saturate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: ~"saturate(@{process})"; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.scale(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scale(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scale3d(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1, 1, 1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scale3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scaleX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scaleX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scaleY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scaleY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.scaleZ(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"1"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: scaleZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.selection(...) {
+
+ @moz_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){function syntax(start,selector){var end="}\n",definition=value_temp.split(","),syntax=(definition[1]||"")+selector+"{"+definition[0]+end;"start"==start?value="0; } \n"+syntax:"startend"==start?value="0; } \n"+syntax.replace(end,""):value+="end"==start?syntax.replace(end,""):syntax}value=value||8121991;var state="@{state}",value_temp=value;if(8121991==value)return value;switch(state){case"1":syntax("start","::selection"),syntax("end","::-moz-selection");break;case"2":syntax("startend","::selection");break;case"3":syntax("startend","::-moz-selection")}return value=value.replace(/;$/g,"")})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:2; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:3; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@moz_local = true) and not (@w3c_local = true) {}
+
+ .inception(@arguments);
+
+
+}
+
+.sepia(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"100%";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { filter: sepia(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.size(@square) {
+ @unit: 'px';
+ .process(@square) when (ispixel(@square)), (isem(@square)), (ispercentage(@square)) {
+ width: @square;
+ height: @square;
+ }
+
+ .process(@square) when not (ispixel(@square)) and not (isem(@square)) and not (ispercentage(@square)) {
+ width: ~`@{square} + @{unit}`;
+ height: ~`@{square} + @{unit}`;
+ }
+
+ .process(@square);
+
+}
+
+.size(@width, @height) {
+ @unit: 'px';
+ .process(@width, @height) when (ispixel(@width)) and (ispixel(@height)), (isem(@width)) and (isem(@height)), (ispercentage(@width)) and (ispercentage(@height)), (ispixel(@width)) and (ispercentage(@height)), (ispixel(@width)) and (isem(@height)), (ispercentage(@width)) and (ispixel(@height)), (ispercentage(@width)) and (isem(@height)), (isem(@width)) and (ispixel(@height)), (isem(@width)) and (ispercentage(@height)) {
+ width: @width;
+ height: @height;
+ }
+
+ .process(@width, @height) when not (ispixel(@width)) and not (ispixel(@height)) and not (ispercentage(@width)) and not (ispercentage(@height)) and not (isem(@width)) and not (isem(@height)) {
+ width: ~`@{width} + @{unit}`;
+ height: ~`@{height} + @{unit}`;
+ }
+
+ .process(@width, @height) when not (ispixel(@width)) and not (ispercentage(@width)) and not (isem(@width)) {
+ width: ~`@{width} + @{unit}`;
+ height: @height;
+ }
+
+ .process(@width, @height) when not (ispixel(@height)) and not (ispercentage(@height)) and not (isem(@height)) {
+ width: @width;
+ height: ~`@{height} + @{unit}`;
+ }
+
+ .process(@width, @height);
+
+}
+
+.skew(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: skew(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.skewX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: skewX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.skewY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"deg"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: skewY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.transform(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"none";var functions={translate:"px",rotate:"deg",rotate3d:"deg",skew:"deg"};/^\w*\(?[a-z0-9.]*\)?/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,""));for(var i in functions)value.indexOf(i)>=0&&(value=value.replace(new RegExp(i+"[\\w]?\\([a-z0-9, %]*\\)"),function(match){var regex=/(\d+\.?\d*)(?!\w|%)/g;return"rotate3d"==i&&(regex=/,\s*\d+$/),match.replace(regex,function(innerMatch){return innerMatch+functions[i]})}));return value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.transform-origin(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"50% 50% 0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-zA-Z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"%"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform-origin: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.transform-style(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"flat"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform-style: @process; }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.transition(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process_webkit: ~`(function(value){value=value||"all 0 ease 0";var prefixedProperties=["background-size","border-","box-shadow","column","transform","filter"],prefix="-webkit-",valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){value=value||"all 0 ease 0";var prefixedProperties=["background-size","box-shadow","column","transform","filter"],prefix="-moz-",valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_opera: ~`(function(value){value=value||"all 0 ease 0";var prefixedProperties=["transform"],prefix="-o-",valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){value=value||"all 0 ease 0";var valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_webkit = 08121991) { -webkit-transition: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-transition: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_opera = 08121991) { -o-transition: @process_opera; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_opera = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.transition-delay(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/(?:\d)(?:ms|s)/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-delay: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.transition-duration(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var valueRegex=/ms|s/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return valueRegex.test(value)||"0"===value||(value=value.replace(numWithoutValue,function(match){return match+=parseFloat(match,10)>10?"ms":"s"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-duration: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.transition-property(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process_webkit: ~`(function(value){value=value||"all";var prefixedProperties=["background-size","border-","box-shadow","column","transform","filter"],prefix="-webkit-";return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_moz: ~`(function(value){value=value||"all";var prefixedProperties=["background-size","box-shadow","column","transform","filter"],prefix="-moz-";return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process_opera: ~`(function(value){value=value||"all";var prefixedProperties=["transform"],prefix="-o-";return/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),prefixedProperties.forEach(function(property){-1!==value.indexOf(property)&&(value=value.replace(new RegExp(property,"g"),function(match){return prefix+match}))}),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+ @process: ~`(function(value){return value=value||"all",/^[-a-z0-9]*,/.test(value)&&(value=value.replace(/(?:,)(?![^(]*\))/g,"")),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process_webkit = 08121991) { -webkit-transition-property: @process_webkit; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process_webkit = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process_moz = 08121991) { -moz-transition-property: @process_moz; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process_moz = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process_opera = 08121991) { -o-transition-property: @process_opera; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process_opera = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-property: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.transition-timing-function(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"ease"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { transition-timing-function: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+.translate(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translate(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translate3d(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0, 0, 0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translate3d(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translateX(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translateX(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translateY(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translateY(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.translateZ(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @opera_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){value=value||"0";var numRegex=/\d/gi,numWithoutValue=/(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return numRegex.test(value)&&(value=value.replace(numWithoutValue,function(match){return match+"px"})),value})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -o-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { -ms-transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 5) and not (@process = 08121991) { transform: translateZ(@process); }
+ .inception (@signal, @arguments) when (@signal = 5) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @opera, @opera_local);
+ .result(@arguments, 4, @ms, @ms_local);
+ .result(@arguments, 5, @w3c, @w3c_local);
+
+}
+
+.user-select(...) {
+
+ @webkit_local: true;
+ @moz_local: true;
+ @ms_local: true;
+ @w3c_local: true;
+
+ @process: ~`(function(value){return value=value||"auto"})((function(){var args="@{arguments}";return args=args.replace(/^\[|\]$/g,"")})())`;
+
+ .result (@arguments, @signal, @boolean, @local_boolean) when (@boolean = true) and (@local_boolean = true) {
+ .inception (@signal, @arguments) when (@signal = 1) and not (@process = 08121991) { -webkit-user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 1) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 2) and not (@process = 08121991) { -moz-user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 2) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 3) and not (@process = 08121991) { -ms-user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 3) and (@process = 08121991) {}
+ .inception (@signal, @arguments) when (@signal = 4) and not (@process = 08121991) { user-select: @process; }
+ .inception (@signal, @arguments) when (@signal = 4) and (@process = 08121991) {}
+ .inception(@signal, @arguments);
+ }
+ .result (@arguments, @signal, @boolean, @local_boolean) when not (@boolean = true), not (@local_boolean = true) {}
+
+ .result(@arguments, 1, @webkit, @webkit_local);
+ .result(@arguments, 2, @moz, @moz_local);
+ .result(@arguments, 3, @ms, @ms_local);
+ .result(@arguments, 4, @w3c, @w3c_local);
+
+}
+
+// What is the magic number 08121991?
diff --git a/lesshat.less b/lesshat.less
deleted file mode 100755
index a822a82..0000000
--- a/lesshat.less
+++ /dev/null
@@ -1,2198 +0,0 @@
-// LESS Hat 1.1.2
-// LESSHat.com
-// From creators of CSSHat.com
-// 2012
-// Petr Brzek & Jan Kuca
-
-
-// @GlobalConfig
-
-// .animation
- // .animation-delay
- // .animation-direction
- // .animation-duration
- // .animation-fill-mode
- // .animation-timing-function
- // .animation-iteration-count
- // .animation-name
- // .animation-play-state
- // .keyframes - in future
-// .appearance
-// .backface-visibility
-// .background-clip
-// .background-image
-// .background-origin
-// .background-size
-// .border-radius
- // .border-top-left-radius
- // .border-top-right-radius
- // .border-bottom-left-radius
- // .border-bottom-right-radius
-// .border-image
-// .box-shadow
-// .box-sizing
-// .columns
- // .column-count
- // .column-gap
- // .column-rule
- // .column-width
-// .font-face
-// .gradient
-// .opacity
-// .perspective
- // .perspective-origin
-// .size
-// .transform
- // .transform-origin
- // .transform-style
- // .translate
- // .translate3d
- // .translateX
- // .translateY
- // .translateZ
- // .scale
- // .scale3d
- // .scaleX
- // .scaleY
- // .scaleZ
- // .rotate
- // .rotate3d
- // .rotateX
- // .rotateY
- // .rotateZ
- // .skew
- // .skewX
- // .skewY
-// .transition
- // .transition-property
- // .transition-duration
- // .transition-timing-function
- // .transition-delay
-// .user-select
-// DEPRECATED mixins
-
-
-// @GlobalConfig
-
- // Config supported browsers for your project
-
- @w3c: true; // Unprefixed W3C syntax
- @webkit: true; // Chrome 7+, Safari 5+, iOS5, Android
- @moz: true; // Firefox 4+
- @opera: true; // Opera 10.5+
- @ms: true; // IE 10+
-
- // Signals
-
- @webkitSignal: 1;
- @mozSignal: 2;
- @operaSignal: 3;
- @msSignal: 4;
- @w3cSignal: 5;
-
-// .animation
-
- .animation(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation(nameAnimation 2s linear alternate anim 3s linear alternate ); }
-
-
- // .animation-delay
-
- .animation-delay(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-delay: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-delay: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-delay: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-delay: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-delay: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-delay(1s); }
- // element{ .animation-delay(750ms, 2s, 3s); } // For multiple animation-direction
-
-
- // .animation-direction
-
- .animation-direction(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "normal"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-direction: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-direction: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-direction: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-direction: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-direction: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-direction(); }
- // element{ .animation-direction(normal, alternate); }
-
-
- // .animation-duration
-
- .animation-duration(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-duration: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-duration: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-duration: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-duration: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-duration: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-duration(2s); }
-
-
- // .animation-fill-mode
-
- .animation-fill-mode(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "none"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-fill-mode: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-fill-mode: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-fill-mode: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-fill-mode: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-fill-mode(forwards); }
-
-
- // .animation-timing-function
-
- .animation-timing-function(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "ease"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-timing-function: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-timing-function: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-timing-function: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-timing-function: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-timing-function: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-timing-function(ease-in-out); }
-
-
- // .animation-iteration-count
-
- .animation-iteration-count(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-iteration-count: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-iteration-count: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-iteration-count: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-iteration-count: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-iteration-count: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-iteration-count(3); }
-
-
- // .animation-name
-
- .animation-name(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "none"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-name: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-name: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-name: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-name: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-name: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-name(myReallyCoolAnimationName); }
-
-
- // .animation-play-state
-
- .animation-play-state(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "running"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-play-state: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-play-state: @processing;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-animation-play-state: @processing;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-play-state: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { animation-play-state: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .animation-play-state(paused); }
-
-
-// .appearance
-
- .appearance(@argument:none){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @argument) when (@signal = 1) { -webkit-appearance: @argument;}
- .inception (@signal, @argument) when (@signal = 2) { -moz-appearance: @argument;}
- .inception (@signal, @argument) when (@signal = 5) { appearance: @argument;}
- .inception (@signal, @argument) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @argument);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .appearance(button); }
-
-
-// .backface-visibility
-
- .backface-visibility(@argument:visible){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @argument) when (@signal = 1) { -webkit-backface-visibility: @argument;}
- .inception (@signal, @argument) when (@signal = 2) { -moz-backface-visibility: @argument;}
- .inception (@signal, @argument) when (@signal = 5) { backface-visibility: @argument;}
- .inception (@signal, @argument) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @argument);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .backface-visibility(hidden); }
-
-
-// .background-clip
-
- .background-clip(@arguments:border-box){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-clip: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-background-clip: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { background-clip: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .background-clip(padding-box); }
-
-
-// .background-image
-
- .background-image(...){
-
- // Local config for disabling properties
-
- @svg: true; // SVG gradient for IE9
- @mozLocal: true; // Firefox 4+
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5+, Android
- @operaLocal: true; // Opera 10.5+
- @w3cLocal: true; // Unprefixed W3C syntax
-
- @backgroundSVG: ~`(function(){function K(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=j&63,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k');if(f.test(d[q])&&!j.test(d[q])||l.test(d[q])||/180deg/.test(d[q])){var r=null;l.test(d[q])?r=l:/180deg/.test(d[q])?r=/180deg/:r=f,d[q]=d[q].replace(r,'')}else if(g.test(d[q])&&!k.test(d[q])||m.test(d[q])||/270deg/.test(d[q])){var r=null;m.test(d[q])?r=m:/270deg/.test(d[q])?r=/270deg/:r=g,d[q]=d[q].replace(r,'')}else if(h.test(d[q])&&!l.test(d[q])||j.test(d[q])||/[^\d]0deg/.test(d[q])){var r=null;j.test(d[q])?r=j:/0deg/.test(d[q])?r=/0deg/:r=h,d[q]=d[q].replace(r,'')}else if(i.test(d[q])&&!m.test(d[q])||k.test(d[q])||/90deg/.test(d[q])){var r=null;k.test(d[q])?r=k:/90deg/.test(d[q])?r=/90deg/:r=i,d[q]=d[q].replace(r,'')}else n.test(d[q])&&!o.test(d[q])?d[q]=d[q].replace(n,''):o.test(d[q])?d[q]=d[q].replace(o,''):c=!1}try{"".trim(),b=!0}catch(s){b=!1}b&&(d[q]=d[q].trim());if(/linear/.test(d[q])||/radial/.test(d[q])){d[q]=d[q].slice(0,-1),d[q]="url(data:image/svg+xml;base64--"+d[q]+' )';var t=d.join("@@@"),u=t.match(/rgba?\(\d+,\s*\d+,\s*\d+,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,v=t.match(/hsla?\(\d+,\s*\d+%,\s*\d+%,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,w=[],x=[];for(var y=0;y ').replace(/(rgba?\(\d+--\s*\d+--\s*\d+--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*.?\d*%)*/g,' ').replace(/rgba/g,"rgb").replace(/(hsla?\(\d+--\s*\d+%--\s*\d+%--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*.?\d*%)*/g,' ').replace(/hsla/g,"hsl").replace(/((?:aqua|black|blue|fuchsia|gray|grey|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow))\s*(\d*%)*/g,' ').replace(/\*\*\*/,"#grad-ucgg-generated");try{"".trim(),b=!0}catch(s){b=!1}b&&(C[E]=C[E].trim());if(/offset=""/g.test(C[E])){var F=C.length-2,G=Math.round(100/F)*D;var H='offset="'+G+'%"';C[E]=C[E].replace(/offset=""/,H),D++}}C=C.toString().replace(/,/g,"").replace(/--/g,",").replace(/(rgb?\(\d+,\s*\d+,\s*\d+),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)").replace(/(hsl?\(\d+,\s*\d+%,\s*\d+%),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)")}}/radial/.test(C)&&(/((ellipse).*(center)|(circle).*(center))/g.test(C)?C=C.replace(/<\/linearGradient>/g,"").replace(/radial-gradient[^<]+/g,'').replace(/ /g,' '):C=!1);var I=null;try{C=C.split("@@@");var J=0;for(J;J/),I=K(I.join("")),C[J]=C[J].replace(/(<\?xml.*<\/svg>)/,I)}catch(s){}return c?C:C=!1,C?C.toString():C})()`;
- @backgroundMoz: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .background-origin(content-box); }
-
-
-// .background-size
-
- .background-size(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^\w*%?([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-size: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-background-size: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { background-size: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .background-size(50% auto); }
-
-
-// .border-radius
-
- .border-radius(@arguments:0) {
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-radius: @arguments; -webkit-background-clip: padding-box;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius: @arguments; -moz-background-clip: padding;}
- .inception (@signal, @arguments) when (@signal = 5) { border-radius: @arguments; background-clip: padding-box; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .border-radius(10px); } // all corner rounded
- // element{ .border-radius(~"10px / 20px"); } // NEED TO BE ESCAPED OR LESS DEVIDE IT! Horizontal and vertical rounded differently
- // element{ .border-radius(0 10px 0 0); } // only top right corner rounded
-
-
-// .border-top-left-radius
-
- .border-top-left-radius(@arguments:0) {
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-top-left-radius: @arguments; -webkit-background-clip: padding-box;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-topleft: @arguments; -moz-background-clip: padding;}
- .inception (@signal, @arguments) when (@signal = 5) { border-top-left-radius: @arguments; background-clip: padding-box; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .border-top-left-radius(10px); }
-
-
-// .border-top-right-radius
-
- .border-top-right-radius(@arguments:0) {
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-top-right-radius: @arguments; -webkit-background-clip: padding-box;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-topright: @arguments; -moz-background-clip: padding;}
- .inception (@signal, @arguments) when (@signal = 5) { border-top-right-radius: @arguments; background-clip: padding-box; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .border-top-right-radius(10px); }
-
-
-// .border-bottom-left-radius
-
- .border-bottom-left-radius(@arguments:0) {
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-bottom-left-radius: @arguments; -webkit-background-clip: padding-box;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-bottomleft: @arguments; -moz-background-clip: padding;}
- .inception (@signal, @arguments) when (@signal = 5) { border-bottom-left-radius: @arguments; background-clip: padding-box; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .border-bottom-left-radius(10px); }
-
-
-// .border-bottom-right-radius
-
- .border-bottom-right-radius(@arguments:0) {
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-bottom-right-radius: @arguments; -webkit-background-clip: padding-box;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-bottomright: @arguments; -moz-background-clip: padding;}
- .inception (@signal, @arguments) when (@signal = 5) { border-bottom-right-radius: @arguments; background-clip: padding-box; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .border-bottom-right-radius(10px); }
-
-
-// .border-image
-
- .border-image(@arguments:none){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-image: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-border-image: @arguments;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-border-image: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { border-image: @arguments; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .border-image(url(border.png) 30 30 round); }
-
-
-// .box-shadow
-
- .box-shadow(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^#?\w*%?([ X])/.test(arg) ) { arg = arg.replace(/,(?=[^()]*\))/g,'--').replace(/,/g,"").replace(/--/g,','); } return arg; })()`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-box-shadow: @processing;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-box-shadow: @processing;}
- .inception (@signal, @arguments) when (@signal = 5) { box-shadow: @processing;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .box-shadow(0 1px 10px rgba(20,20,20,0.5), 0 1px 10px rgba(20,20,20,0.5)); }
-
-
-// .box-sizing
-
- .box-sizing(@arguments:content-box){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-box-sizing: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-box-sizing: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { box-sizing: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .box-sizing(border-box); }
-
-
-// .columns
-
- .columns(@arguments:auto auto){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-columns: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-columns: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { columns: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .columns(100px 3); }
-
-
-// .column-count
-
- .column-count(@arguments:auto){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-count: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-column-count: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { column-count: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .column-count(3); }
-
-
-// .column-gap
-
- .column-gap(@arguments:normal){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-gap: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-column-gap: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { column-gap: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .column-gap(40px); }
-
-
-// .column-rule
-
- .column-rule(@arguments:medium none black){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-rule: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-column-rule: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { column-rule: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .column-rule(3px outset #ff00ff); }
-
-
-// .column-width
-
- .column-width(@arguments:auto){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-width: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-column-width: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { column-width: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .column-width(100px); }
-
-
-// .font-face
-
- .font-face(@fontname, @fontfile) {
-
- font-family: "@{fontname}";
- src: url("@{fontfile}-webfont.eot");
- src: url("@{fontfile}-webfont.eot?#iefix") format("embedded-opentype"),
- url("@{fontfile}-webfont.woff") format("woff"),
- url("@{fontfile}-webfont.ttf") format("truetype"),
- url("@{fontfile}-webfont.svg#@{fontname}") format("svg");
- font-weight: normal;
- font-style: normal;
- }
-
- // element{ .font-face(ZendaRegular, zenda-webfont); }
-
-
-// .opacity
-
- .opacity(@arguments:1){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-opacity: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-opacity: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { opacity: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .opacity(.5); }
-
-
-// .perspective
-
- .perspective(@arguments:none){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-perspective: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-perspective: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { perspective: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .perspective(350px); }
-
-
-// .perspective-origin
-
- .perspective-origin(@arguments:50% 50%){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-perspective-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-perspective-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { perspective-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .perspective-origin(top left); }
-
-
-// .size
-
- .size(@square){
- width: @square;
- height: @square;
- }
-
- .size(@width, @height){
- width: @width;
- height: @height;
- }
-
- // element{ .size(10px); } // render width:10px; height:10px;
- // element{ .size(10px, 20px); } // render width:10px; height: 20px;
-
-
-// .transform
-
- .transform(@arguments:none, ...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: @arguments;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: @arguments;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { transform: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transform(scale(.5) translate(10px, 20px)); }
-
-
-// .transform-origin
-
- .transform-origin(@arguments:50% 50% 0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { transform-origin: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transform-origin(20% 40%); }
-
-
-// .transform-style
-
- .transform-style(@arguments:flat){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform-style: @arguments;}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform-style: @arguments;}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform-style: @arguments;}
- .inception (@signal, @arguments) when (@signal = 5) { transform-style: @arguments;}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transform-style(preserve-3d); }
-
-
-// .translate
-
- .translate(@x:0, @y:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translate(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translate(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translate(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translate(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: translate(@x, @y);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .translate(100px); }
- // element{ .translate(100px, 50px); }
-
-
-// .translate3d
-
- .translate3d(@x:0, @y:0, @z:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translate3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translate3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translate3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translate3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: translate3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .translate3d(10px, 20px, 30px); }
-
-
-// .translateX
-
- .translateX(@x:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateX(@x);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateX(@x);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateX(@x);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateX(@x);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: translateX(@x);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .translateX(10px); }
-
-
-// .translateY
-
- .translateY(@y:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateY(@y);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateY(@y);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateY(@y);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateY(@y);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: translateY(@y);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .translateY(15px); }
-
-
-// .translateZ
-
- .translateZ(@z:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateZ(@z);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateZ(@z);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateZ(@z);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateZ(@z);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: translateZ(@z);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .translateZ(32px); }
-
-
-// .scale
-
- .scale(@x:1){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale(@x);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale(@x);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale(@x);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale(@x);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: scale(@x);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- .scale(@x, @y){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale(@x, @y);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: scale(@x, @y);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .scale(2); }
- // element{ .scale(2, 1); }
-
-
-// .scale3d
-
- .scale3d(@x:1, @y:1, @z:1){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: scale3d(@x, @y, @z);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .scale3d(1, 2, 1); }
-
-
-// .scaleX
-
- .scaleX(@x:1){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleX(@x);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleX(@x);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleX(@x);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleX(@x);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: scaleX(@x);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .scaleX(1.5); }
-
-
-// .scaleY
-
- .scaleY(@y:1){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleY(@y);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleY(@y);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleY(@y);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleY(@y);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: scaleY(@y);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .scaleX(1.5); }
-
-
-// .scaleZ
-
- .scaleZ(@z:1){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleZ(@z);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleZ(@z);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleZ(@z);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleZ(@z);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: scaleZ(@z);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .scaleZ(2.7); }
-
-
-// .rotate
-
- .rotate(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotate(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotate(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotate(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotate(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: rotate(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .rotate(45deg); }
-
-
-// .rotate3d
-
- .rotate3d(@x:0, @y:0, @z: 0, @angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotate3d(@x, @y, @z, @angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotate3d(@x, @y, @z, @angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotate3d(@x, @y, @z, @angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotate3d(@x, @y, @z, @angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: rotate3d(@x, @y, @z, @angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .rotate3d(1, 2.0, 3.0, 10deg); }
-
-
-// .rotateX
-
- .rotateX(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateX(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateX(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateX(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateX(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: rotateX(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .rotateX(63deg); }
-
-
-// .rotateY
-
- .rotateY(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateY(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateY(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateY(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateY(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: rotateY(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .rotateY(24deg); }
-
-
-// .rotateZ
-
- .rotateZ(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateZ(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateZ(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateZ(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateZ(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: rotateZ(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .rotateZ(280deg); }
-
-
-// .skew
-
- .skew(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skew(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skew(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skew(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skew(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: skew(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .skew(20deg); }
-
-
-// .skewX
-
- .skewX(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skewX(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skewX(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skewX(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skewX(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: skewX(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .skewX(24deg); }
-
-
-// .skewY
-
- .skewY(@angle:0){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skewY(@angle);}
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skewY(@angle);}
- .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skewY(@angle);}
- .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skewY(@angle);}
- .inception (@signal, @arguments) when (@signal = 5) { transform: skewY(@angle);}
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .skewY(36deg); }
-
-
-// .transition
-
- .transition(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @transitionWebkit: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transition(transform 3s linear); }
-
-
-// .transition-property
-
- .transition-property(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @transitionWebkit: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transition-property(width, height); }
-
-
-// .transition-duration
-
- .transition-duration(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "0"; try{ var hasComma = arg.match(/,/g).length > 1 ? true : false; } catch (e) {} if (hasComma === true) arg = arg.replace(/,/g,""); arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-duration: @processing; }
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-duration: @processing; }
- .inception (@signal, @arguments) when (@signal = 3) { -o-transition-duration: @processing; }
- .inception (@signal, @arguments) when (@signal = 5) { transition-duration: @processing; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transition-duration(250ms); }
-
-
-// .transition-timing-function
-
- .transition-timing-function(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "ease"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-timing-function: @processing; }
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-timing-function: @processing; }
- .inception (@signal, @arguments) when (@signal = 3) { -o-transition-timing-function: @processing; }
- .inception (@signal, @arguments) when (@signal = 5) { transition-timing-function: @processing; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transition-timing-function(cubic-bezier(0,0,1,1)); }
-
-
-// .transition-delay
-
- .transition-delay(...){
-
- // Local config for disabling properties
-
- @w3cLocal: true; // Unprefixed W3C syntax
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @operaLocal: true; // Opera 10.5+
- @msLocal: true; // IE 10+
-
- @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-delay: @processing; }
- .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-delay: @processing; }
- .inception (@signal, @arguments) when (@signal = 3) { -o-transition-delay: @processing; }
- .inception (@signal, @arguments) when (@signal = 5) { transition-delay: @processing; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @operaSignal, @opera, @operaLocal);
- // --
- .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
- }
-
- // element{ .transition-delay(2s); }
-
-
-// .user-select
-
- .user-select(@arguments:auto){
-
- // Local config for disabling properties
-
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @mozLocal: true; // Firefox 4+
- @msLocal: true; // IE 10+
-
- .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
- .inception (@signal, @arguments) when (@signal = 1) { -webkit-user-select: @arguments; }
- .inception (@signal, @arguments) when (@signal = 2) { -moz-user-select: @arguments; }
- .inception (@signal, @arguments) when (@signal = 4) { -ms-user-select: @arguments; }
- .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
- .inception(@signal, @arguments);
- }
- .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
-
- .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
- // -- this comment must be here because of LESS bug
- .result(@arguments, @mozSignal, @moz, @mozLocal);
- // --
- .result(@arguments, @msSignal, @ms, @msLocal);
- }
-
- // element{ .user-select(text); }
-
-
-// DEPRECATED mixins (must be supported because of old version of CSS Hat)
-
- // .gradient (renamed background-image)
-
- .gradient(...){
-
- // Local config for disabling properties
-
- @svg: true; // SVG gradient for IE9
- @mozLocal: true; // Firefox 4+
- @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
- @operaLocal: true; // Opera 10.5+
- @w3cLocal: true; // Unprefixed W3C syntax
-
- @backgroundSVG: ~`(function(){function G(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=j&63,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k');if(f.test(d[q])&&!j.test(d[q])||l.test(d[q])||/180deg/.test(d[q])){var r=null;l.test(d[q])?r=l:/180deg/.test(d[q])?r=/180deg/:r=f,d[q]=d[q].replace(r,'')}else if(g.test(d[q])&&!k.test(d[q])||m.test(d[q])||/270deg/.test(d[q])){var r=null;m.test(d[q])?r=m:/270deg/.test(d[q])?r=/270deg/:r=g,d[q]=d[q].replace(r,'')}else if(h.test(d[q])&&!l.test(d[q])||j.test(d[q])||/[^\d]0deg/.test(d[q])){var r=null;j.test(d[q])?r=j:/0deg/.test(d[q])?r=/0deg/:r=h,d[q]=d[q].replace(r,'')}else if(i.test(d[q])&&!m.test(d[q])||k.test(d[q])||/90deg/.test(d[q])){var r=null;k.test(d[q])?r=k:/90deg/.test(d[q])?r=/90deg/:r=i,d[q]=d[q].replace(r,'')}else n.test(d[q])&&!o.test(d[q])?d[q]=d[q].replace(n,''):o.test(d[q])?d[q]=d[q].replace(o,''):c=!1}try{"".trim(),b=!0}catch(s){b=!1}b&&(d[q]=d[q].trim());if(/linear/.test(d[q])||/radial/.test(d[q])){d[q]=d[q].slice(0,-1),d[q]="url(data:image/svg+xml;base64--"+d[q]+' )';var t=d.join("@@@"),u=t.match(/rgba?\(\d+,\s*\d+,\s*\d+,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,v=t.match(/hsla?\(\d+,\s*\d+%,\s*\d+%,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,w=[],x=[];for(var y=0;y ').replace(/(rgba?\(\d+--\s*\d+--\s*\d+--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*%)*/g,' ').replace(/rgba/g,"rgb").replace(/(hsla?\(\d+--\s*\d+%--\s*\d+%--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*%)*/g,' ').replace(/hsla/g,"hsl").replace(/((?:aqua|black|blue|fuchsia|gray|grey|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow))\s*(\d*%)*/g,' ').replace(/\*\*\*/,"#grad-ucgg-generated");try{"".trim(),b=!0}catch(s){b=!1}b&&(C[D]=C[D].trim())}C=C.toString().replace(/,/g,"").replace(/--/g,",").replace(/(rgb?\(\d+,\s*\d+,\s*\d+),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)").replace(/(hsl?\(\d+,\s*\d+%,\s*\d+%),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)")}}/radial/.test(C)&&(/((ellipse).*(center)|(circle).*(center))/g.test(C)?C=C.replace(/<\/linearGradient>/g," ").replace(/radial-gradient[^<]+/g,'').replace(/ /g,' '):C=!1);var E=null;try{C=C.split("@@@");var F=0;for(F;F/),E=G(E.join("")),C[F]=C[F].replace(/(<\?xml.*<\/svg>)/,E)}catch(s){}return c?C:C=!1,C?C.toString().replace(/\[/g,"").replace(/\]/g,""):C}())`;
- @backgroundMoz: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f • align-content
+**Summary:**
+
+The CSS align-content property aligns a flex container's lines within the flex container when there is an extra space on the cross-axis. This property has no effect on the single line flexible boxes.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-content)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/align-content/)**
+
+**Syntax:**
+
+Default value: stretch
+
+ .align-content(flex-start | flex-end | center | space-between | space-around | stretch)
+
+**Example:**
+
+ div {
+ .align-content(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-align-content: flex-start;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ }
+
+
diff --git a/mixins/align-content/test.js b/mixins/align-content/test.js
new file mode 100644
index 0000000..36a39b7
--- /dev/null
+++ b/mixins/align-content/test.js
@@ -0,0 +1,12 @@
+var assert = require('assert');
+
+describe('align-content', function() {
+
+ /**
+ * If you want to test this code, comment 'alignContent.result' from align-content.js
+ */
+ // it('should return start', function (done) {
+ // test.alignContent.ms('flex-start', 'start', done);
+ // });
+
+});
diff --git a/mixins/align-items/align-items.js b/mixins/align-items/align-items.js
new file mode 100644
index 0000000..a011204
--- /dev/null
+++ b/mixins/align-items/align-items.js
@@ -0,0 +1,79 @@
+/**
+ * AlignItems mixin
+ */
+
+var alignItems = function alignItems(value) {
+ value = value || 'stretch';
+
+ return value;
+};
+
+alignItems.olderWebkit = function olderWebkitalignItems(value) {
+ value = value || 'stretch';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ }
+ else if (value == 'flex-end') {
+ value = 'end';
+ }
+
+ return value;
+};
+
+alignItems.moz = function mozalignItems(value) {
+ value = value || 'stretch';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ }
+ else if (value == 'flex-end') {
+ value = 'end';
+ }
+
+ return value;
+};
+
+alignItems.ms = function msalignItems(value) {
+ value = value || 'stretch';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ }
+ else if (value == 'flex-end') {
+ value = 'end';
+ }
+
+ return value;
+};
+
+/**
+ * Older syntax have different properties
+ */
+
+ alignItems.result = {
+ olderwebkit: {
+ property: '-webkit-box-align',
+ prefixed: false
+ },
+ moz: {
+ property: '-moz-box-align',
+ prefixed: false
+ },
+ ms: {
+ property: '-ms-flex-align',
+ prefixed: false
+ }
+ };
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+alignItems.vendors = ['olderwebkit','moz','webkit','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = alignItems;
diff --git a/mixins/align-items/align-items.md b/mixins/align-items/align-items.md
new file mode 100644
index 0000000..6774bfe
--- /dev/null
+++ b/mixins/align-items/align-items.md
@@ -0,0 +1,29 @@
+### • align-items
+**Summary:**
+
+The CSS align-items property aligns flex items of the current flex line the same way as justify-content but in the perpendicular direction.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-items)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/align-items/)**
+
+**Syntax:**
+
+Default value: stretch
+
+ .align-items(flex-start | flex-end | center | baseline | stretch)
+
+**Example:**
+
+ div {
+ .align-items(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-box-align: flex-start;
+ -moz-box-align: start;
+ -webkit-align-items: start;
+ -ms-flex-align: flex-start;
+ align-items: flex-start;
+ }
+
+
diff --git a/mixins/align-items/test.js b/mixins/align-items/test.js
new file mode 100644
index 0000000..9326adb
--- /dev/null
+++ b/mixins/align-items/test.js
@@ -0,0 +1,12 @@
+var assert = require('assert');
+
+describe('align-items', function () {
+
+ /**
+ * If you want to test this code, comment 'alignItems.result' from align-items.js
+ */
+ // it('should return start', function (done) {
+ // test.alignItems.ms('flex-start', 'start', done);
+ // });
+
+});
diff --git a/mixins/align-self/align-self.js b/mixins/align-self/align-self.js
new file mode 100644
index 0000000..8af29e5
--- /dev/null
+++ b/mixins/align-self/align-self.js
@@ -0,0 +1,33 @@
+/**
+ * AlignSelf (flexbox) mixin
+ */
+
+var alignSelf = function alignSelf(value) {
+ value = value || 'auto';
+
+ return value;
+};
+
+alignSelf.ms = function msalignSelf(value) {
+ value = value || 'auto';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ } else if (value == 'flex-end') {
+ value = 'end';
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+alignSelf.vendors = ['webkit','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = alignSelf;
\ No newline at end of file
diff --git a/mixins/align-self/align-self.md b/mixins/align-self/align-self.md
new file mode 100644
index 0000000..51baba8
--- /dev/null
+++ b/mixins/align-self/align-self.md
@@ -0,0 +1,27 @@
+### • align-self
+**Summary:**
+
+The align-self CSS property aligns flex items of the current flex line overriding the align-items value. If any of the flex item's cross-axis margin is set to auto, then align-self is ignored.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/align-self)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/align-self/)**
+
+**Syntax:**
+
+Default value: auto
+
+ .align-self(auto | flex-start | flex-end | center | baseline | stretch)
+
+**Example:**
+
+ div {
+ .align-self(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-align-self: flex-start;
+ -ms-align-self: start;
+ align-self: flex-start;
+ }
+
+
diff --git a/mixins/align-self/test.js b/mixins/align-self/test.js
new file mode 100644
index 0000000..7e8e475
--- /dev/null
+++ b/mixins/align-self/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('align-self', function () {
+
+ it('should return start', function (done) {
+ test.alignSelf.ms('flex-start', 'start', done);
+ });
+
+});
diff --git a/mixins/animation-delay/animation-delay.js b/mixins/animation-delay/animation-delay.js
new file mode 100644
index 0000000..305b912
--- /dev/null
+++ b/mixins/animation-delay/animation-delay.js
@@ -0,0 +1,36 @@
+/**
+ * AnimationDelay mixin
+ */
+
+var animationDelay = function animationDelay(value) {
+ value = value || '0';
+ var valueRegex = /(?:\d)(?:ms|s)/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationDelay.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationDelay;
diff --git a/mixins/animation-delay/animation-delay.md b/mixins/animation-delay/animation-delay.md
new file mode 100644
index 0000000..86568f9
--- /dev/null
+++ b/mixins/animation-delay/animation-delay.md
@@ -0,0 +1,38 @@
+### • animation-delay
+**Summary:**
+
+Defines a length of time to elapse before an animation starts, allowing an animation to begin execution some time after it is applied.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-delay)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-delay)**
+
+**Syntax:**
+
+Default value: 0
+
+ .animation-delay(, …)
+
+**Tips and tricks:**
+
+If you omit units after time argument, `animation-delay` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .animation-delay(2, 200);
+ }
+
+ // Result
+ div {
+ -webkit-animation-delay: 2s, 200ms;
+ -moz-animation-delay: 2s, 200ms;
+ -opera-animation-delay: 2s, 200ms;
+ animation-delay: 2s, 200ms;
+ }
+
+
diff --git a/mixins/animation-delay/test.js b/mixins/animation-delay/test.js
new file mode 100644
index 0000000..a3bd75d
--- /dev/null
+++ b/mixins/animation-delay/test.js
@@ -0,0 +1,17 @@
+var assert = require('assert');
+
+describe('animation-delay', function() {
+
+ it('should return the same value', function(done) {
+ test.animationDelay('2s, 4s', '2s, 4s', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationDelay('200ms', '200ms', done);
+ });
+
+ it('should return numbers with second and milisecond value', function(done) {
+ test.animationDelay('9, 200', '9s, 200ms', done);
+ });
+
+});
diff --git a/mixins/animation-direction/animation-direction.js b/mixins/animation-direction/animation-direction.js
new file mode 100644
index 0000000..07ab6a8
--- /dev/null
+++ b/mixins/animation-direction/animation-direction.js
@@ -0,0 +1,19 @@
+/**
+ * animationDirection mixin
+ */
+
+var animationDirection = function animationDirection(value) {
+ return value || 'normal';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationDirection.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationDirection;
\ No newline at end of file
diff --git a/mixins/animation-direction/animation-direction.md b/mixins/animation-direction/animation-direction.md
new file mode 100644
index 0000000..f3ff9be
--- /dev/null
+++ b/mixins/animation-direction/animation-direction.md
@@ -0,0 +1,28 @@
+### • animation-direction
+**Summary:**
+
+The animation-direction CSS property indicates whether the animation should play in reverse on alternate cycles.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-direction)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-direction)**
+
+**Syntax:**
+
+Default value: normal
+
+ .animation-direction(, …)
+
+**Example:**
+
+ div {
+ .animation-direction(reverse, alternate);
+ }
+
+ // Result
+ div {
+ -webkit-animation-direction: reverse, alternate;
+ -moz-animation-direction: reverse, alternate;
+ -opera-animation-direction: reverse, alternate;
+ animation-direction: reverse, alternate;
+ }
+
+
diff --git a/mixins/animation-direction/test.js b/mixins/animation-direction/test.js
new file mode 100644
index 0000000..687f7bb
--- /dev/null
+++ b/mixins/animation-direction/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('animation-direction', function() {
+
+ it('should return the same value', function(done) {
+ test.animationDirection('reverse', 'reverse', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationDirection('reverse, alternate', 'reverse, alternate', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/animation-duration/animation-duration.js b/mixins/animation-duration/animation-duration.js
new file mode 100644
index 0000000..240f16f
--- /dev/null
+++ b/mixins/animation-duration/animation-duration.js
@@ -0,0 +1,36 @@
+/**
+ * animationDuration mixin
+ */
+
+var animationDuration = function animationDuration(value) {
+ value = value || '0';
+ var valueRegex = /ms|s/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationDuration.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationDuration;
diff --git a/mixins/animation-duration/animation-duration.md b/mixins/animation-duration/animation-duration.md
new file mode 100644
index 0000000..018a088
--- /dev/null
+++ b/mixins/animation-duration/animation-duration.md
@@ -0,0 +1,38 @@
+### • animation-duration
+**Summary:**
+
+The animation-duration CSS property specifies the length of time that an animation should take to complete one cycle.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-duration)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-duration)**
+
+**Syntax:**
+
+Default value: 0
+
+ .animation-duration(, …)
+
+**Tips and tricks:**
+
+If you omit units after time argument, `animation-duration` is trying to be smart and add proper value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .animation-duration(2000);
+ }
+
+ // Result
+ div {
+ -webkit-animation-duration: 2000ms;
+ -moz-animation-duration: 2000ms;
+ -opera-animation-duration: 2000ms;
+ animation-duration: 2000ms;
+ }
+
+
diff --git a/mixins/animation-duration/test.js b/mixins/animation-duration/test.js
new file mode 100644
index 0000000..c9cc941
--- /dev/null
+++ b/mixins/animation-duration/test.js
@@ -0,0 +1,21 @@
+var assert = require('assert');
+
+describe('animation-duration', function() {
+
+ it('should return the same value', function(done) {
+ test.animationDuration('2s', '2s', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationDuration('200ms, 400ms', '200ms, 400ms', done);
+ });
+
+ it('should return number with ms', function(done) {
+ test.animationDuration('2000', '2000ms', done);
+ });
+
+ it('should return number with s', function(done) {
+ test.animationDuration('5', '5s', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/animation-fill-mode/animation-fill-mode.js b/mixins/animation-fill-mode/animation-fill-mode.js
new file mode 100644
index 0000000..be093ac
--- /dev/null
+++ b/mixins/animation-fill-mode/animation-fill-mode.js
@@ -0,0 +1,19 @@
+/**
+ * animationFillMode mixin
+ */
+
+var animationFillMode = function animationFillMode(value) {
+ return value || 'none';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationFillMode.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationFillMode;
\ No newline at end of file
diff --git a/mixins/animation-fill-mode/animation-fill-mode.md b/mixins/animation-fill-mode/animation-fill-mode.md
new file mode 100644
index 0000000..b87e9b6
--- /dev/null
+++ b/mixins/animation-fill-mode/animation-fill-mode.md
@@ -0,0 +1,28 @@
+### • animation-fill-mode
+**Summary:**
+
+The animation-fill-mode CSS property specifies how a CSS animation should apply styles to its target before and after it is executing.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-fill-mode)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-fill-mode)**
+
+**Syntax:**
+
+Default value: none
+
+ .animation-fill-mode(, …)
+
+**Example:**
+
+ div {
+ .animation-fill-mode(forwards);
+ }
+
+ // Result
+ div {
+ -webkit-animation-fill-mode: forwards;
+ -moz-animation-fill-mode: forwards;
+ -opera-animation-fill-mode: forwards;
+ animation-fill-mode: forwards;
+ }
+
+
diff --git a/mixins/animation-fill-mode/test.js b/mixins/animation-fill-mode/test.js
new file mode 100644
index 0000000..8515ff8
--- /dev/null
+++ b/mixins/animation-fill-mode/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('animation-fill-mode', function() {
+
+ it('should return the same value', function(done) {
+ test.animationFillMode('forwards', 'forwards', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationFillMode('forwards, both', 'forwards, both', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/animation-iteration-count/animation-iteration-count.js b/mixins/animation-iteration-count/animation-iteration-count.js
new file mode 100644
index 0000000..9a96b2d
--- /dev/null
+++ b/mixins/animation-iteration-count/animation-iteration-count.js
@@ -0,0 +1,19 @@
+/**
+ * animationIterationCount mixin
+ */
+
+var animationIterationCount = function animationIterationCount(value) {
+ return value || '0';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationIterationCount.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationIterationCount;
\ No newline at end of file
diff --git a/mixins/animation-iteration-count/animation-iteration-count.md b/mixins/animation-iteration-count/animation-iteration-count.md
new file mode 100644
index 0000000..64f1b84
--- /dev/null
+++ b/mixins/animation-iteration-count/animation-iteration-count.md
@@ -0,0 +1,28 @@
+### • animation-iteration-count
+**Summary:**
+
+The animation-iteration-count CSS property specifies how a CSS animation should apply styles to its target before and after it is executing.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-iteration-count)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-iteration-count)**
+
+**Syntax:**
+
+Default value: 1
+
+ .animation-iteration-count(, …)
+
+**Example:**
+
+ div {
+ .animation-iteration-count(3);
+ }
+
+ // Result
+ div {
+ -webkit-animation-iteration-count: 3;
+ -moz-animation-iteration-count: 3;
+ -opera-animation-iteration-count: 3;
+ animation-iteration-count: 3;
+ }
+
+
diff --git a/mixins/animation-iteration-count/test.js b/mixins/animation-iteration-count/test.js
new file mode 100644
index 0000000..48eb43e
--- /dev/null
+++ b/mixins/animation-iteration-count/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('animation-iteration-count', function() {
+
+ it('should return the same value', function(done) {
+ test.animationIterationCount('3', '3', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationIterationCount('11, 44', '11, 44', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/animation-name/animation-name.js b/mixins/animation-name/animation-name.js
new file mode 100644
index 0000000..3a27d65
--- /dev/null
+++ b/mixins/animation-name/animation-name.js
@@ -0,0 +1,19 @@
+/**
+ * animationName mixin
+ */
+
+var animationName = function animationName(value) {
+ return value || 'none';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationName.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationName;
\ No newline at end of file
diff --git a/mixins/animation-name/animation-name.md b/mixins/animation-name/animation-name.md
new file mode 100644
index 0000000..4065cfb
--- /dev/null
+++ b/mixins/animation-name/animation-name.md
@@ -0,0 +1,28 @@
+### • animation-name
+**Summary:**
+
+The animation-name CSS property specifies a list of animations that should be applied to the selected element. Each name indicates a @keyframes at-rule that defines the property values for the animation sequence.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-name)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-name)**
+
+**Syntax:**
+
+Default value: none
+
+ .animation-name(, …)
+
+**Example:**
+
+ div {
+ .animation-name(animation-1, animation-2);
+ }
+
+ // Result
+ div {
+ -webkit-animation-name: animation-1, animation-2;
+ -moz-animation-name: animation-1, animation-2;
+ -opera-animation-name: animation-1, animation-2;
+ animation-name: animation-1, animation-2;
+ }
+
+
diff --git a/mixins/animation-name/test.js b/mixins/animation-name/test.js
new file mode 100644
index 0000000..e066ba2
--- /dev/null
+++ b/mixins/animation-name/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('animation-name', function() {
+
+ it('should return the same value', function(done) {
+ test.animationName('brutalAnimation', 'brutalAnimation', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationName('anim-1, anim-2, anim-3', 'anim-1, anim-2, anim-3', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/animation-play-state/animation-play-state.js b/mixins/animation-play-state/animation-play-state.js
new file mode 100644
index 0000000..5e12c82
--- /dev/null
+++ b/mixins/animation-play-state/animation-play-state.js
@@ -0,0 +1,19 @@
+/**
+ * animationPlayState mixin
+ */
+
+var animationPlayState = function animationPlayState(value) {
+ return value || 'running';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationPlayState.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationPlayState;
\ No newline at end of file
diff --git a/mixins/animation-play-state/animation-play-state.md b/mixins/animation-play-state/animation-play-state.md
new file mode 100644
index 0000000..abf0a77
--- /dev/null
+++ b/mixins/animation-play-state/animation-play-state.md
@@ -0,0 +1,28 @@
+### • animation-play-state
+**Summary:**
+
+The animation-play-state CSS property determines whether an animation is running or paused. You can query this property's value to determine whether or not the animation is currently running; in addition, you can set its value to pause and resume playback of an animation.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-play-state)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-play-state)**
+
+**Syntax:**
+
+Default value: running
+
+ .animation-play-state(, …)
+
+**Example:**
+
+ div {
+ .animation-play-state(paused);
+ }
+
+ // Result
+ div {
+ -webkit-animation-play-state: paused;
+ -moz-animation-play-state: paused;
+ -opera-animation-play-state: paused;
+ animation-play-state: paused;
+ }
+
+
diff --git a/mixins/animation-play-state/test.js b/mixins/animation-play-state/test.js
new file mode 100644
index 0000000..a13db13
--- /dev/null
+++ b/mixins/animation-play-state/test.js
@@ -0,0 +1,14 @@
+var assert = require('assert');
+
+describe('animation-play-state', function() {
+
+ it('should return the same value', function(done) {
+ test.animationPlayState('running', 'running', done);
+ });
+
+ it('should return the default value running', function(done) {
+ test.animationPlayState('', 'running', done);
+ });
+
+
+});
\ No newline at end of file
diff --git a/mixins/animation-timing-function/animation-timing-function.js b/mixins/animation-timing-function/animation-timing-function.js
new file mode 100644
index 0000000..8da0c57
--- /dev/null
+++ b/mixins/animation-timing-function/animation-timing-function.js
@@ -0,0 +1,19 @@
+/**
+ * animationTimingFunction mixin
+ */
+
+var animationTimingFunction = function animationTimingFunction(value) {
+ return value || 'ease';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animationTimingFunction.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animationTimingFunction;
\ No newline at end of file
diff --git a/mixins/animation-timing-function/animation-timing-function.md b/mixins/animation-timing-function/animation-timing-function.md
new file mode 100644
index 0000000..43f57b7
--- /dev/null
+++ b/mixins/animation-timing-function/animation-timing-function.md
@@ -0,0 +1,28 @@
+### • animation-timing-function
+**Summary:**
+
+The animation-timing-function CSS property determines whether an animation is running or paused. You can query this property's value to determine whether or not the animation is currently running; in addition, you can set its value to pause and resume playback of an animation.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation-timing-function)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-timing-function)**
+
+**Syntax:**
+
+Default value: ease
+
+ .animation-timing-function(, …)
+
+**Example:**
+
+ div {
+ .animation-timing-function(cubic-bezier(0.1, 0.7, 1.0, 0.1));
+ }
+
+ // Result
+ div {
+ -webkit-animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ -moz-animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ -opera-animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
+ }
+
+
diff --git a/mixins/animation-timing-function/test.js b/mixins/animation-timing-function/test.js
new file mode 100644
index 0000000..e3dc255
--- /dev/null
+++ b/mixins/animation-timing-function/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('animation-timing-function', function() {
+
+ it('should return the same value', function(done) {
+ test.animationTimingFunction('cubic-bezier(0.42,0,0.58,1)', 'cubic-bezier(0.42, 0, 0.58, 1)', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animationTimingFunction('cubic-bezier(0.42,0,0.58,1), cubic-bezier(0.42,0,0.58,1)', 'cubic-bezier(0.42, 0, 0.58, 1), cubic-bezier(0.42, 0, 0.58, 1)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/animation/animation.js b/mixins/animation/animation.js
new file mode 100644
index 0000000..b8d7f73
--- /dev/null
+++ b/mixins/animation/animation.js
@@ -0,0 +1,25 @@
+/**
+ * Animation mixin
+ */
+
+var animation = function animation(value) {
+ value = value || 'none';
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+animation.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = animation;
\ No newline at end of file
diff --git a/mixins/animation/animation.md b/mixins/animation/animation.md
new file mode 100644
index 0000000..4f94fbd
--- /dev/null
+++ b/mixins/animation/animation.md
@@ -0,0 +1,28 @@
+### • animation
+**Summary:**
+
+Shorthand to define a CSS animation, setting all parameters at once.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/animation/animation)**, **[CSS3files](http://www.css3files.com/animation/)**
+
+**Syntax:**
+
+Default value: none
+
+ .animation(animation-name | animation-duration | animation-timing-function | animation-delay | animation-iteration-count | animation-direction | animation-fill-mode , […]*)
+
+**Example:**
+
+ div {
+ .animation(nameAnimation 2s linear alternate);
+ }
+
+ // Result
+ div {
+ -webkit-animation: nameAnimation 2s linear alternate;
+ -moz-animation: nameAnimation 2s linear alternate;
+ -opera-animation: nameAnimation 2s linear alternate;
+ animation: nameAnimation 2s linear alternate;
+ }
+
+
diff --git a/mixins/animation/test.js b/mixins/animation/test.js
new file mode 100644
index 0000000..73f5de4
--- /dev/null
+++ b/mixins/animation/test.js
@@ -0,0 +1,14 @@
+var assert = require('assert');
+
+
+describe('animation', function() {
+
+ it('should add zero before dot and return the same value', function(done) {
+ test.animation('nameAnimation .2s', 'nameAnimation 0.2s', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.animation('nameAnimation 2s linear alternate, nameAnimation2 1s linear alternate', 'nameAnimation 2s linear alternate, nameAnimation2 1s linear alternate', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/appearance/appearance.js b/mixins/appearance/appearance.js
new file mode 100644
index 0000000..067bdfe
--- /dev/null
+++ b/mixins/appearance/appearance.js
@@ -0,0 +1,19 @@
+/**
+ * appearance mixin
+ */
+
+var appearance = function appearance(value) {
+ return value || 'none';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+appearance.vendors = ['webkit', 'moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = appearance;
\ No newline at end of file
diff --git a/mixins/appearance/appearance.md b/mixins/appearance/appearance.md
new file mode 100644
index 0000000..ea8d8b0
--- /dev/null
+++ b/mixins/appearance/appearance.md
@@ -0,0 +1,27 @@
+### • appearance
+**Summary:**
+
+Allows changing the style of any element to platform-based interface elements or vice versa.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/appearance)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/a/appearance/)**
+
+**Syntax:**
+
+Default value: none
+
+ .appearance()
+
+**Example:**
+
+ div {
+ .appearance();
+ }
+
+ // Result
+ div {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ }
+
+
diff --git a/mixins/appearance/test.js b/mixins/appearance/test.js
new file mode 100644
index 0000000..5f591ba
--- /dev/null
+++ b/mixins/appearance/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('appearance', function() {
+
+ it('should return the same value', function(done) {
+ test.appearance('button', 'button', done);
+ });
+
+ it('should return the default value none', function(done) {
+ test.appearance('', 'none', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/backface-visibility/backface-visibility.js b/mixins/backface-visibility/backface-visibility.js
new file mode 100644
index 0000000..36b3124
--- /dev/null
+++ b/mixins/backface-visibility/backface-visibility.js
@@ -0,0 +1,19 @@
+/**
+ * backfaceVisibility mixin
+ */
+
+var backfaceVisibility = function backfaceVisibility(value) {
+ return value || 'visible';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+backfaceVisibility.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = backfaceVisibility;
\ No newline at end of file
diff --git a/mixins/backface-visibility/backface-visibility.md b/mixins/backface-visibility/backface-visibility.md
new file mode 100644
index 0000000..55b87eb
--- /dev/null
+++ b/mixins/backface-visibility/backface-visibility.md
@@ -0,0 +1,29 @@
+### • backface-visibility
+**Summary:**
+
+The CSS backface-visibility property determines whether or not the back face of the element is visible when facing the user. The back face of an element always is a transparent background, letting, when visible, a mirror image of the front face be displayed.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/backface-visibility)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/backface-visibility)**
+
+**Syntax:**
+
+Default value: none
+
+ .backface-visibility(visible | hidden )
+
+**Example:**
+
+ div {
+ .backface-visibility(hidden);
+ }
+
+ // Result
+ div {
+ -webkit-backface-visibility: none;
+ -moz-backface-visibility: none;
+ -o-backface-visibility: none;
+ -ms-backface-visibility: none;
+ backface-visibility: none;
+ }
+
+
diff --git a/mixins/backface-visibility/test.js b/mixins/backface-visibility/test.js
new file mode 100644
index 0000000..e749193
--- /dev/null
+++ b/mixins/backface-visibility/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('backface-visibility', function() {
+
+ it('should return the same value', function(done) {
+ test.backfaceVisibility('hidden', 'hidden', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/background-clip/background-clip.js b/mixins/background-clip/background-clip.js
new file mode 100644
index 0000000..033668e
--- /dev/null
+++ b/mixins/background-clip/background-clip.js
@@ -0,0 +1,19 @@
+/**
+ * backgroundClip mixin
+ */
+
+var backgroundClip = function backgroundClip(value) {
+ return value || 'border-box';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+backgroundClip.vendors = ['webkit', 'moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = backgroundClip;
\ No newline at end of file
diff --git a/mixins/background-clip/background-clip.md b/mixins/background-clip/background-clip.md
new file mode 100644
index 0000000..95594b9
--- /dev/null
+++ b/mixins/background-clip/background-clip.md
@@ -0,0 +1,27 @@
+### • background-clip
+**Summary:**
+
+The background-clip CSS property specifies whether an element's background, either the color or image, extends underneath its border.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/background-clip)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip)**
+
+**Syntax:**
+
+Default value: border-box
+
+ .background-clip()
+
+**Example:**
+
+ div {
+ .background-clip(padding-box);
+ }
+
+ // Result
+ div {
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+ }
+
+
diff --git a/mixins/background-clip/test.js b/mixins/background-clip/test.js
new file mode 100644
index 0000000..0663945
--- /dev/null
+++ b/mixins/background-clip/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('background-clip', function() {
+
+ it('should return the same value', function(done) {
+ test.backgroundClip('padding-box', 'padding-box', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/background-image/background-image.js b/mixins/background-image/background-image.js
new file mode 100644
index 0000000..428df36
--- /dev/null
+++ b/mixins/background-image/background-image.js
@@ -0,0 +1,376 @@
+/**
+ * BackgroundImage mixin
+ */
+
+var backgroundImage = function backgroundImage(value) {
+ value = value || 08121991;
+ if (value == 08121991) {
+ return value;
+ }
+ var values = {
+ top: 'to bottom',
+ right: 'to left',
+ bottom: 'to top',
+ left: 'to right'
+ };
+
+ var values_keys = Object.keys(values);
+ values_keys.some(function(el) {
+ if (value.indexOf(el) >= 0 && !(new RegExp('to\\s+' + el, 'g')).test(value)) {
+ value = value.replace(new RegExp(el), values[el]);
+ return true;
+ }
+ });
+
+ return value;
+};
+
+backgroundImage.webkit = function backgroundImageWebkit(value) {
+ value = value || 08121991;
+ if (value == 08121991) {
+ return value;
+ }
+ var values = {
+ 'to bottom': 'top',
+ 'to left': 'right',
+ 'to top': 'bottom',
+ 'to right': 'left',
+ 'ellipse at center': 'center, ellipse cover',
+ 'circle closest-side': 'center center, circle contain',
+ 'circle farthest-corner': 'center center, circle cover',
+ 'circle farthest-side': 'center center, circle cover',
+ 'ellipse closest-side': 'center center, ellipse contain',
+ 'ellipse farthest-corner': 'center center, ellipse cover',
+ 'ellipse farthest-side': 'center center, ellipse cover'
+ };
+ var radial_regexp = /(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g;
+
+ var values_keys = Object.keys(values);
+ values_keys.some(function(el) {
+ var radial_values = null;
+ if (value.indexOf(el) >= 0) {
+ value = value.replace(new RegExp(el + '(?![ a-z0-9])', 'g'), values[el]);
+ return true;
+ }
+ if (radial_regexp.test(value)) {
+ value = value.replace(radial_regexp, function(match, sub, sub2, sub3, sub4) {
+ return sub.trim() + sub3.trim() + ' ' + sub4.trim() + ',' + sub2.replace(/closest-side/g, 'contain').replace(/farthest-corner/g, 'cover').trim();
+ })
+ }
+ });
+
+ value = value.replace(/(\d+)\s*deg/g, function(match, sub) {
+ return 90 - sub + 'deg';
+ }).replace(/(linear|radial)-gradient/g, '-webkit-$1-gradient');
+
+ return value;
+};
+
+backgroundImage.moz = function backgroundImageMoz(value) {
+ value = value || 08121991;
+ if (value == 08121991) {
+ return value;
+ }
+ var values = {
+ 'to bottom': 'top',
+ 'to left': 'right',
+ 'to top': 'bottom',
+ 'to right': 'left',
+ 'ellipse at center': 'center, ellipse cover',
+ 'circle closest-side': 'center center, circle contain',
+ 'circle farthest-corner': 'center center, circle cover',
+ 'circle farthest-side': 'center center, circle cover',
+ 'ellipse closest-side': 'center center, ellipse contain',
+ 'ellipse farthest-corner': 'center center, ellipse cover',
+ 'ellipse farthest-side': 'center center, ellipse cover'
+ };
+ var radial_regexp = /(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g;
+
+ var values_keys = Object.keys(values);
+ values_keys.some(function(el) {
+ var radial_values = null;
+ if (value.indexOf(el) >= 0) {
+ value = value.replace(new RegExp(el + '(?![ a-z0-9])', 'g'), values[el]);
+ return true;
+ }
+ if (radial_regexp.test(value)) {
+ value = value.replace(radial_regexp, function(match, sub, sub2, sub3, sub4) {
+ return sub.trim() + sub3.trim() + ' ' + sub4.trim() + ',' + sub2.replace(/closest-side/g, 'contain').replace(/farthest-corner/g, 'cover').trim();
+ })
+ }
+ });
+
+ value = value.replace(/(\d+)\s*deg/g, function(match, sub) {
+ return 90 - sub + 'deg';
+ }).replace(/(linear|radial)-gradient/g, '-moz-$1-gradient');
+
+ return value;
+};
+
+backgroundImage.opera = function backgroundImageOpera(value) {
+ value = value || 08121991;
+ if (value == 08121991) {
+ return value;
+ }
+ var values = {
+ 'to bottom': 'top',
+ 'to left': 'right',
+ 'to top': 'bottom',
+ 'to right': 'left',
+ 'ellipse at center': 'center, ellipse cover',
+ 'circle closest-side': 'center center, circle contain',
+ 'circle farthest-corner': 'center center, circle cover',
+ 'circle farthest-side': 'center center, circle cover',
+ 'ellipse closest-side': 'center center, ellipse contain',
+ 'ellipse farthest-corner': 'center center, ellipse cover',
+ 'ellipse farthest-side': 'center center, ellipse cover'
+ };
+ var radial_regexp = /(radial-gradient\()([a-z- ]+)at\s+(\w+)\s*(\w*)/g;
+
+ var values_keys = Object.keys(values);
+ values_keys.some(function(el) {
+ var radial_values = null;
+ if (value.indexOf(el) >= 0) {
+ value = value.replace(new RegExp(el + '(?![ a-z0-9])', 'g'), values[el]);
+ return true;
+ }
+ if (radial_regexp.test(value)) {
+ value = value.replace(radial_regexp, function(match, sub, sub2, sub3, sub4) {
+ return sub.trim() + sub3.trim() + ' ' + sub4.trim() + ',' + sub2.replace(/closest-side/g, 'contain').replace(/farthest-corner/g, 'cover').trim();
+ })
+ }
+ });
+
+ value = value.replace(/(\d+)\s*deg/g, function(match, sub) {
+ return 90 - sub + 'deg';
+ }).replace(/(linear|radial)-gradient/g, '-o-$1-gradient');
+
+ return value;
+};
+
+backgroundImage.ms = function backgroundImageMs(value) {
+ value = value || 08121991;
+ if (value == 08121991) {
+ return value;
+ }
+ var gradients = /linear|radial/g.test(value) && value.split(/,(?=\s*(?:linear|radial))/g);
+ var svg_gradients = [];
+ var values = {
+ 'to bottom': 'x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\"',
+ 'to left': 'x1=\"100%\" y1=\"0%\" x2=\"0%\" y2=\"0%\"',
+ 'to top': 'x1=\"0%\" y1=\"100%\" x2=\"0%\" y2=\"0%\"',
+ 'to right': 'x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"',
+ get 'top' () {
+ return this['to bottom'];
+ },
+ get '180deg' () {
+ return this['to bottom'];
+ },
+ get 'right' () {
+ return this['to left'];
+ },
+ get '270deg' () {
+ return this['to left'];
+ },
+ get 'bottom' () {
+ return this['to top'];
+ },
+ get '0deg' () {
+ return this['to top']
+ },
+ get 'left' () {
+ return this['to right'];
+ },
+ get '90deg' () {
+ return this['to right'];
+ },
+ '-45deg': 'x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\"',
+ '45deg': 'x1=\"0%\" y1=\"100%\" x2=\"100%\" y2=\"0%\"',
+ 'ellipse at center': 'cx=\"50%\" cy=\"50%\" r=\"75%\"'
+ };
+ var svg = {
+ uri_data: 'url(data:image/svg+xml;base64,',
+ xml: '',
+ svg_start: '',
+ linear_gradient_start: '',
+ radial_gradient_end: ' ',
+ rect_linear: ' ',
+ rect_radial: ' ',
+ svg_end: ' '
+ };
+
+ if (gradients.length) {
+ gradients.forEach(function(value, index) {
+ var obj = {};
+ // direction
+ Object.keys(values).some(function(inner_val) {
+ if (value.indexOf(inner_val) >= 0) {
+ obj.svg_direction = values[inner_val];
+ return true;
+ } else {
+ obj.svg_direction = false;
+ }
+ });
+ // type (linear|radial)
+ if (/linear/.test(value)) {
+ obj.svg_type = 'linear';
+ } else if (/radial/.test(value)) {
+ obj.svg_type = 'radial';
+ }
+ // Colors
+ var colors_count = value.match(/rgb|#[a-zA-Z0-9]|hsl/g).length;
+ obj.svg_stops = [];
+ // hex
+ if (value.match(/#[a-zA-Z0-9]/g) && (value.match(/#[a-zA-Z0-9]/g).length == colors_count)) {
+ // Are there percentages?
+ if (value.match((/#[a-zA-Z0-9]+\s+(\d+%)/g)) && value.match((/#[a-zA-Z0-9]+\s+(\d+%)/g)).length == colors_count) {
+ value.match(/#[a-zA-Z0-9]+\s+(\d+%)/g).forEach(function(inner_val) {
+ inner_val = inner_val.split(' ');
+ obj.svg_stops.push('');
+ });
+ } else {
+ var shares = Math.floor(100 / (value.match(/#[a-zA-Z0-9]/g).length - 1));
+ value.match(/#[a-zA-Z0-9]+/g).forEach(function(inner_val, index) {
+ obj.svg_stops.push('');
+ });
+ }
+ }
+ // Rgb(a)
+ if (value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g) && (value.match(/(?:rgb|rgba)?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g).length == colors_count)) {
+ // Are there percentages?
+ if (value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+\d+%+/g) && (value.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+\d+%+/g).length) == colors_count) {
+ value.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s+(\d+%)+/g, function(match, sub, sub_2, sub_3) {
+ obj.svg_stops.push(' ');
+ });
+ } else {
+ var shares = Math.floor(100 / (value.match(/(rgb|rgba)\(/g).length - 1));
+ value.match(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g).forEach(function(element, index) {
+ element.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g, function(match, sub, sub_2, sub_3) {
+ obj.svg_stops.push(' ');
+ });
+ });
+ }
+ }
+ // Hsl(a)
+ if (value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g) && (value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g).length == colors_count)) {
+ // Are there percentages?
+ if (value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g) && (value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g).length) == colors_count) {
+ value.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)+/g, function(match, sub, sub_2, sub_3) {
+ obj.svg_stops.push(' ');
+ });
+ } else {
+ var shares = Math.floor(100 / (value.match(/(hsl|hsla)\(/g).length - 1));
+ value.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g).forEach(function(element, index) {
+ element.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g, function(match, sub, sub_2, sub_3) {
+ obj.svg_stops.push(' ');
+ });
+ });
+ }
+ }
+
+ // save to array
+ svg_gradients.push(obj);
+ });
+
+ // Glue it together
+ var syntax = [];
+ var passed = svg_gradients.every(function(element) {
+ for (var i in element) {
+ if (element[i] == false || (element[i].length == 0)) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ if (!passed) {
+ return 08121991;
+ }
+ svg_gradients.forEach(function(element, index) {
+ syntax[index] = (svg.xml + svg.svg_start);
+ if (element.svg_type == 'linear') {
+ syntax[index] += svg.linear_gradient_start + ' ' + element.svg_direction + '>';
+ element.svg_stops.forEach(function(value) {
+ syntax[index] += value;
+ });
+ syntax[index] += svg.linear_gradient_end;
+ syntax[index] += svg.rect_linear;
+ syntax[index] += svg.svg_end;
+ } else if (element.svg_type == 'radial') {
+ syntax[index] += svg.radial_gradient_start + ' ' + element.svg_direction + '>';
+ element.svg_stops.forEach(function(value) {
+ syntax[index] += value;
+ });
+ syntax[index] += svg.radial_gradient_end;
+ syntax[index] += svg.rect_radial;
+ syntax[index] += svg.svg_end;
+ }
+ });
+
+ syntax.forEach(function(element, index) {
+ syntax[index] = svg.uri_data + base64_encode(element) + ')';
+ });
+
+ value = syntax.join(',');
+
+ }
+
+ function base64_encode(data) {
+ var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+ var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
+ ac = 0,
+ enc = '',
+ tmp_arr = [];
+
+ if (!data) {
+ return data;
+ }
+
+ do { // pack three octets into four hexets
+ o1 = data.charCodeAt(i++);
+ o2 = data.charCodeAt(i++);
+ o3 = data.charCodeAt(i++);
+
+ bits = o1 << 16 | o2 << 8 | o3;
+
+ h1 = bits >> 18 & 0x3f;
+ h2 = bits >> 12 & 0x3f;
+ h3 = bits >> 6 & 0x3f;
+ h4 = bits & 0x3f;
+
+ // use hexets to index into b64, and append result to encoded string
+ tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
+ } while (i < data.length);
+
+ enc = tmp_arr.join('');
+
+ var r = data.length % 3;
+
+ return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
+
+ }
+
+ return value;
+};
+
+/**
+ * Result properties aren't prefixed
+ */
+
+backgroundImage.result = {
+ prefixed: false
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+backgroundImage.vendors = ['ms', 'webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = backgroundImage;
diff --git a/mixins/background-image/background-image.md b/mixins/background-image/background-image.md
new file mode 100644
index 0000000..f8d001c
--- /dev/null
+++ b/mixins/background-image/background-image.md
@@ -0,0 +1,38 @@
+### • background-image
+**Summary:**
+
+With the background-image you can create prefixed linear or radial gradients. The CSS (linear|radial)-gradient() function creates an `` which represents a linear|radial gradient of colors. The result of this function is an object of the CSS `` data type. Like any other gradient, a CSS linear gradient is not a CSS `` but an image with no intrinsic dimensions; that is, it has neither natural or preferred size, nor ratio. Its concrete size will match the one of the element it applies to.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/functions/linear-gradient)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient)**
+
+**Syntax:**
+
+Default value: none
+
+ .background-image(, ...)
+
+**Tips and tricks:**
+
+The `background-image` mixin is the most robust mixin of all.
+It generates `SVG` for Internet Explorer 9, old webkit, moz and opera syntax.
+Always use W3C syntax for the mixin. It can recalculate angle for older syntax, transform `to top` to `bottom` syntax and it can omit SVG syntax if it's impossible to express SVG e.g. when you call mixin with 55deg.
+If you call mixin without arguments, LESS Hat does not generate anything.
+Great online gradient [generator](http://www.colorzilla.com/gradient-editor/).
+
+
+**Example:**
+
+ div {
+ .background-image(linear-gradient(to bottom, #fb83fa 0%,#e93cec 100%));
+ }
+
+ // Result
+ div {
+ background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMSAxIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj48bGluZWFyR3JhZGllbnQgaWQ9Imxlc3NoYXQtZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiNmYjgzZmEiIHN0b3Atb3BhY2l0eT0iMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U5M2NlYyIgc3RvcC1vcGFjaXR5PSIxIi8+PC9saW5lYXJHcmFkaWVudD48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBmaWxsPSJ1cmwoI2xlc3NoYXQtZ2VuZXJhdGVkKSIgLz48L3N2Zz4=);
+ background-image: -webkit-linear-gradient(top, #fb83fa 0%, #e93cec 100%);
+ background-image: -moz-linear-gradient(top, #fb83fa 0%, #e93cec 100%);
+ background-image: -o-linear-gradient(top, #fb83fa 0%, #e93cec 100%);
+ background-image: linear-gradient(to bottom, #fb83fa 0%, #e93cec 100%);
+ }
+
+
diff --git a/mixins/background-image/test.js b/mixins/background-image/test.js
new file mode 100644
index 0000000..f089fd4
--- /dev/null
+++ b/mixins/background-image/test.js
@@ -0,0 +1,29 @@
+var assert = require('assert');
+
+describe('background-image', function () {
+
+ /**
+ * If you want to test gradients, just remove 'prefixed: false' from background-image.js file
+ */
+
+ // it('should return the same value', function (done) {
+ // test.backgroundImage('linear-gradient(right, #1e5799 0%, #7db9e8 100%)', 'linear-gradient(to left, #1e5799 0%, #7db9e8 100%)', done);
+ // });
+
+ // it('should add prefix and return the value', function (done) {
+ // test.backgroundImage.webkit('linear-gradient(to right, #1e5799 0%, #7db9e8 100%)', '-webkit-linear-gradient(left, #1e5799 0%, #7db9e8 100%)', done);
+ // });
+
+ // it('should convert angle for older webkit syntax', function (done) {
+ // test.backgroundImage.webkit('linear-gradient(40deg, #1e5799 0%, #7db9e8 100%)', '-webkit-linear-gradient(50deg, #1e5799 0%, #7db9e8 100%)', done);
+ // });
+
+ // it('should convert new radial gradient syntax to older version', function (done) {
+ // test.backgroundImage.webkit('radial-gradient(circle closest-side at 20px 30px, #000000 0%, #ffffff 25%)', '-webkit-radial-gradient(20px 30px,circle contain, #000000 0%, #ffffff 25%)', done);
+ // });
+
+ // it('should add prefix, convert new radial gradient syntax to older version and convert angle for linear gradient', function (done) {
+ // test.backgroundImage.webkit('radial-gradient(circle closest-side at 20px 30px, #000000 0%, #ffffff 25%), linear-gradient(40deg, #1e5799 0%, #7db9e8 100%)', '-webkit-radial-gradient(20px 30px,circle contain, #000000 0%, #ffffff 25%), -webkit-linear-gradient(50deg, #1e5799 0%, #7db9e8 100%)', done);
+ // });
+
+});
\ No newline at end of file
diff --git a/mixins/background-origin/background-origin.js b/mixins/background-origin/background-origin.js
new file mode 100644
index 0000000..7d78eb2
--- /dev/null
+++ b/mixins/background-origin/background-origin.js
@@ -0,0 +1,19 @@
+/**
+ * backgroundOrigin mixin
+ */
+
+var backgroundOrigin = function backgroundOrigin(value) {
+ return value || 'padding-box';
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+backgroundOrigin.vendors = ['webkit', 'moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = backgroundOrigin;
\ No newline at end of file
diff --git a/mixins/background-origin/background-origin.md b/mixins/background-origin/background-origin.md
new file mode 100644
index 0000000..c98b977
--- /dev/null
+++ b/mixins/background-origin/background-origin.md
@@ -0,0 +1,27 @@
+### • background-origin
+**Summary:**
+
+The background-origin CSS property determines the background positioning area, that is the position of the origin of an image specified using the background-image CSS property.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/background-origin)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background-origin)**
+
+**Syntax:**
+
+Default value: padding-box
+
+ .background-origin()
+
+**Example:**
+
+ div {
+ .background-origin(content-box);
+ }
+
+ // Result
+ div {
+ -webkit-background-origin: content-box;
+ -moz-background-origin: content-box;
+ background-origin: content-box;
+ }
+
+
diff --git a/mixins/background-origin/test.js b/mixins/background-origin/test.js
new file mode 100644
index 0000000..25702a3
--- /dev/null
+++ b/mixins/background-origin/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('background-origin', function() {
+
+ it('should return the same value', function(done) {
+ test.backgroundOrigin('content-box', 'content-box', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/background-size/background-size.js b/mixins/background-size/background-size.js
new file mode 100644
index 0000000..06e2634
--- /dev/null
+++ b/mixins/background-size/background-size.js
@@ -0,0 +1,29 @@
+/**
+ * backgroundSize mixin
+ */
+
+var backgroundSize = function backgroundSize(value) {
+ value = value || 'auto auto';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+backgroundSize.vendors = ['webkit', 'moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = backgroundSize;
diff --git a/mixins/background-size/background-size.md b/mixins/background-size/background-size.md
new file mode 100644
index 0000000..9034741
--- /dev/null
+++ b/mixins/background-size/background-size.md
@@ -0,0 +1,31 @@
+### • background-size
+**Summary:**
+
+The background-size CSS property specifies the size of the background images. The size of the image can be fully constrained or only partially in order to preserve its intrinsic ratio.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/background-size)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/background-size)**
+
+**Syntax:**
+
+Default value: auto auto
+
+ .background-size(, ...)
+
+**Tips and tricks:**
+
+If you omit units, `background-size` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .background-size(cover, 100%);
+ }
+
+ // Result
+ div {
+ -webkit-background-size: cover, 100%;
+ -moz-background-size: cover, 100%;
+ background-size: cover, 100%;
+ }
+
+
diff --git a/mixins/background-size/test.js b/mixins/background-size/test.js
new file mode 100644
index 0000000..13c5cbb
--- /dev/null
+++ b/mixins/background-size/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('background-size', function() {
+
+ it('should return the same value', function(done) {
+ test.backgroundSize('cover, 100%', 'cover, 100%', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.backgroundSize('400, 300', '400px, 300px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/blur/blur.js b/mixins/blur/blur.js
new file mode 100644
index 0000000..a343912
--- /dev/null
+++ b/mixins/blur/blur.js
@@ -0,0 +1,38 @@
+/**
+ * Blur mixin
+ */
+
+var blur = function blur(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+blur.result = {
+ property: 'filter',
+ value: 'blur({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+blur.vendors = ['webkit', 'moz', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = blur;
diff --git a/mixins/blur/blur.md b/mixins/blur/blur.md
new file mode 100644
index 0000000..d98c9c7
--- /dev/null
+++ b/mixins/blur/blur.md
@@ -0,0 +1,32 @@
+### • blur (shorthand for filter property)
+**Summary:**
+
+Applies a Gaussian blur to the input image. The value of ‘radius’ defines the value of the standard deviation to the Gaussian function, or how many pixels on the screen blend into each other, so a larger value will create more blur. If no parameter is provided, then a value 0 is used. The parameter is specified as a CSS length, but does not accept percentage values.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .blur(length)
+
+**Tips and tricks:**
+
+If you omit units, `blur` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .blur(5px);
+ }
+
+ // Result
+ div {
+ -webkit-filter: blur(5px);
+ -moz-filter: blur(5px);
+ -ms-filter: blur(5px);
+ filter: blur(5px);
+ }
+
+
diff --git a/mixins/blur/test.js b/mixins/blur/test.js
new file mode 100644
index 0000000..2c81281
--- /dev/null
+++ b/mixins/blur/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('blur', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'filter';
+ test.blur('10', 'blur(10px)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/border-bottom-left-radius/border-bottom-left-radius.js b/mixins/border-bottom-left-radius/border-bottom-left-radius.js
new file mode 100644
index 0000000..b56e0e8
--- /dev/null
+++ b/mixins/border-bottom-left-radius/border-bottom-left-radius.js
@@ -0,0 +1,53 @@
+/**
+ * borderBottomLeftRadius mixin
+ */
+
+var borderBottomLeftRadius = function borderBottomLeftRadius(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Syntax property for moz is non-standard
+ */
+
+borderBottomLeftRadius.result = {
+ moz: {
+ property: 'border-radius-bottomleft',
+ }
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+borderBottomLeftRadius.vendors = ['webkit', 'moz'];
+
+/**
+ * Append CSS
+ */
+
+borderBottomLeftRadius.appendCSS = {
+ all: 'background-clip: padding-box',
+ webkit: '-webkit-background-clip: padding-box',
+ moz: '-moz-background-clip: padding'
+};
+
+/**
+ * Export mixin
+ */
+
+module.exports = borderBottomLeftRadius;
diff --git a/mixins/border-bottom-left-radius/border-bottom-left-radius.md b/mixins/border-bottom-left-radius/border-bottom-left-radius.md
new file mode 100644
index 0000000..e22d5f7
--- /dev/null
+++ b/mixins/border-bottom-left-radius/border-bottom-left-radius.md
@@ -0,0 +1,33 @@
+### • border-bottom-left-radius
+**Summary:**
+
+The border-bottom-left-radius CSS property sets the rounding of the bottom-left corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-left-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-bottom-left-radius(length | percentage)
+
+**Tips and tricks:**
+
+If you omit units, `border-bottom-left-radius` adds `px` automatically.
+If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-bottom-left-radius(10px);
+ }
+
+ // Result
+ div {
+ -webkit-border-bottom-left-radius: 10px;
+ -moz-border-radius-bottomleft: 10px;
+ border-bottom-left-radius: 10px;
+ }
+
+
diff --git a/mixins/border-bottom-left-radius/test.js b/mixins/border-bottom-left-radius/test.js
new file mode 100644
index 0000000..36938fb
--- /dev/null
+++ b/mixins/border-bottom-left-radius/test.js
@@ -0,0 +1,18 @@
+var assert = require('assert');
+
+describe('border-bottom-left-radius', function() {
+
+ it('should return the same value', function(done) {
+ test.borderBottomLeftRadius('10px', '10px', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.borderBottomLeftRadius('20', '20px', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.resultProperty = 'border-radius-bottomleft';
+ test.borderBottomLeftRadius.moz('20', '20px', done);
+ });
+
+});
diff --git a/mixins/border-bottom-right-radius/border-bottom-right-radius.js b/mixins/border-bottom-right-radius/border-bottom-right-radius.js
new file mode 100644
index 0000000..4048602
--- /dev/null
+++ b/mixins/border-bottom-right-radius/border-bottom-right-radius.js
@@ -0,0 +1,53 @@
+/**
+ * borderBottomRightRadius mixin
+ */
+
+var borderBottomRightRadius = function borderBottomRightRadius(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Syntax property for moz is non-standard
+ */
+
+borderBottomRightRadius.result = {
+ moz: {
+ property: 'border-radius-bottomright',
+ }
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+borderBottomRightRadius.vendors = ['webkit', 'moz'];
+
+/**
+ * Append CSS
+ */
+
+borderBottomRightRadius.appendCSS = {
+ all: 'background-clip: padding-box',
+ webkit: '-webkit-background-clip: padding-box',
+ moz: '-moz-background-clip: padding'
+};
+
+/**
+ * Export mixin
+ */
+
+module.exports = borderBottomRightRadius;
diff --git a/mixins/border-bottom-right-radius/border-bottom-right-radius.md b/mixins/border-bottom-right-radius/border-bottom-right-radius.md
new file mode 100644
index 0000000..41338c2
--- /dev/null
+++ b/mixins/border-bottom-right-radius/border-bottom-right-radius.md
@@ -0,0 +1,33 @@
+### • border-bottom-right-radius
+**Summary:**
+
+The border-bottom-right-radius CSS property sets the rounding of the bottom-left corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-bottom-right-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-bottom-right-radius(length | percentage)
+
+**Tips and tricks:**
+
+If you omit units, `border-bottom-right-radius` adds `px` automatically.
+If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-bottom-right-radius(10px);
+ }
+
+ // Result
+ div {
+ -webkit-border-bottom-right-radius: 10px;
+ -moz-border-radius-bottomright: 10px;
+ border-bottom-right-radius: 10px;
+ }
+
+
diff --git a/mixins/border-bottom-right-radius/test.js b/mixins/border-bottom-right-radius/test.js
new file mode 100644
index 0000000..5e86579
--- /dev/null
+++ b/mixins/border-bottom-right-radius/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('border-bottom-right-radius', function() {
+
+ it('should return the same value', function(done) {
+ test.borderBottomRightRadius('10px', '10px', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.borderBottomRightRadius('20', '20px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/border-image/border-image.js b/mixins/border-image/border-image.js
new file mode 100644
index 0000000..0b56fd0
--- /dev/null
+++ b/mixins/border-image/border-image.js
@@ -0,0 +1,25 @@
+/**
+ * borderImage mixin
+ */
+
+var borderImage = function borderImage(value) {
+ value = value || 08121991;
+
+ if (/^[a-z(.)]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+borderImage.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = borderImage;
diff --git a/mixins/border-image/border-image.md b/mixins/border-image/border-image.md
new file mode 100644
index 0000000..0f22704
--- /dev/null
+++ b/mixins/border-image/border-image.md
@@ -0,0 +1,33 @@
+### • border-image
+**Summary:**
+
+The border-image CSS property allows drawing an image on the borders of elements. This makes drawing complex looking widgets much simpler than it has been and removes the need for nine boxes in some cases.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-image)**
+
+**Syntax:**
+
+Default value: based on individual properties
+
+ .border-image(border-image-source border-image-slice border-image-width border-image-outset border-image-repeat)
+
+**Tips and tricks:**
+
+ If you call mixin without arguments, LESS Hat does not generate anything.
+ Good border-image online [generator](http://border-image.com/).
+
+**Example:**
+
+ div {
+ .border-image(url(border.png) 61 45 62 54 repeat);
+ }
+
+ // Result
+ div {
+ -webkit-border-image: url(border.png) 61 45 62 54 repeat;
+ -moz-border-image: url(border.png) 61 45 62 54 repeat;
+ -opera-border-image: url(border.png) 61 45 62 54 repeat;
+ border-image: url(border.png) 61 45 62 54 repeat;
+ }
+
+
diff --git a/mixins/border-image/test.js b/mixins/border-image/test.js
new file mode 100644
index 0000000..4132283
--- /dev/null
+++ b/mixins/border-image/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('border-image', function() {
+
+ it('should return the same value', function(done) {
+ test.borderImage('url(border.png) 61 45 62 54 repeat', 'url(border.png) 61 45 62 54 repeat', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/border-radius/border-radius.js b/mixins/border-radius/border-radius.js
new file mode 100644
index 0000000..93ad79f
--- /dev/null
+++ b/mixins/border-radius/border-radius.js
@@ -0,0 +1,43 @@
+/**
+ * borderRadius mixin
+ */
+
+var borderRadius = function borderRadius(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+borderRadius.vendors = ['webkit', 'moz'];
+
+/**
+ * Append CSS
+ */
+
+borderRadius.appendCSS = {
+ all: 'background-clip: padding-box',
+ webkit: '-webkit-background-clip: padding-box',
+ moz: '-moz-background-clip: padding'
+};
+
+/**
+ * Export mixin
+ */
+
+module.exports = borderRadius;
diff --git a/mixins/border-radius/border-radius.md b/mixins/border-radius/border-radius.md
new file mode 100644
index 0000000..45c4a59
--- /dev/null
+++ b/mixins/border-radius/border-radius.md
@@ -0,0 +1,33 @@
+### • border-radius
+**Summary:**
+
+The border-radius CSS property allows Web authors to define how rounded border corners are. The curve of each corner is defined using one or two radii, defining its shape: circle or ellipse.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-radius(length | percentage | length / length | percentage / percentage)
+
+**Tips and tricks:**
+
+ If you omit units, `border-radius` adds `px` automatically.
+ If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+ Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-radius(5px);
+ }
+
+ // Result
+ div {
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ }
+
+
diff --git a/mixins/border-radius/test.js b/mixins/border-radius/test.js
new file mode 100644
index 0000000..8124385
--- /dev/null
+++ b/mixins/border-radius/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('border-radius', function() {
+
+ it('should return the same value', function(done) {
+ test.borderRadius('10px', '10px', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.borderRadius('20 30', '20px 30px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/border-top-left-radius/border-top-left-radius.js b/mixins/border-top-left-radius/border-top-left-radius.js
new file mode 100644
index 0000000..1865d0e
--- /dev/null
+++ b/mixins/border-top-left-radius/border-top-left-radius.js
@@ -0,0 +1,53 @@
+/**
+ * borderTopLeftRadius mixin
+ */
+
+var borderTopLeftRadius = function borderTopLeftRadius(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Syntax property for moz is non-standard
+ */
+
+borderTopLeftRadius.result = {
+ moz: {
+ property: 'border-radius-topleft',
+ }
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+borderTopLeftRadius.vendors = ['webkit', 'moz'];
+
+/**
+ * Append CSS
+ */
+
+borderTopLeftRadius.appendCSS = {
+ all: 'background-clip: padding-box',
+ webkit: '-webkit-background-clip: padding-box',
+ moz: '-moz-background-clip: padding'
+};
+
+/**
+ * Export mixin
+ */
+
+module.exports = borderTopLeftRadius;
diff --git a/mixins/border-top-left-radius/border-top-left-radius.md b/mixins/border-top-left-radius/border-top-left-radius.md
new file mode 100644
index 0000000..48bc857
--- /dev/null
+++ b/mixins/border-top-left-radius/border-top-left-radius.md
@@ -0,0 +1,33 @@
+### • border-top-left-radius
+**Summary:**
+
+The border-top-left-radius CSS property sets the rounding of the top-left corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-top-left-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-top-left-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-top-left-radius(length | percentage)
+
+**Tips and tricks:**
+
+ If you omit units, `border-top-left-radius` adds `px` automatically.
+ If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+ Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-top-left-radius(5px);
+ }
+
+ // Result
+ div {
+ -webkit-border-top-left-radius: 5px;
+ -moz-border-top-left-radius: 5px;
+ border-top-left-radius: 5px;
+ }
+
+
diff --git a/mixins/border-top-left-radius/test.js b/mixins/border-top-left-radius/test.js
new file mode 100644
index 0000000..dbf50a3
--- /dev/null
+++ b/mixins/border-top-left-radius/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('border-top-left-radius', function() {
+
+ it('should return the same value', function(done) {
+ test.borderTopLeftRadius('10px', '10px', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.borderTopLeftRadius('20', '20px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/border-top-right-radius/border-top-right-radius.js b/mixins/border-top-right-radius/border-top-right-radius.js
new file mode 100644
index 0000000..08c7bd2
--- /dev/null
+++ b/mixins/border-top-right-radius/border-top-right-radius.js
@@ -0,0 +1,54 @@
+/**
+ * borderTopRightRadius mixin
+ */
+
+var borderTopRightRadius = function borderTopRightRadius(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Syntax property for moz is non-standard
+ */
+
+borderTopRightRadius.result = {
+ moz: {
+ property: 'border-radius-topright',
+ }
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+borderTopRightRadius.vendors = ['webkit', 'moz'];
+
+/**
+ * Append CSS
+ */
+
+borderTopRightRadius.appendCSS = {
+ all: 'background-clip: padding-box',
+ webkit: '-webkit-background-clip: padding-box',
+ moz: '-moz-background-clip: padding'
+};
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = borderTopRightRadius;
diff --git a/mixins/border-top-right-radius/border-top-right-radius.md b/mixins/border-top-right-radius/border-top-right-radius.md
new file mode 100644
index 0000000..d859dde
--- /dev/null
+++ b/mixins/border-top-right-radius/border-top-right-radius.md
@@ -0,0 +1,33 @@
+### • border-top-right-radius
+**Summary:**
+
+The border-top-right-radius CSS property sets the rounding of the top-right corner of the element. The rounding can be a circle or an ellipse, or if one of the value is 0 no rounding is done and the corner is square.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/border-top-right-radius)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/border-top-right-radius)**
+
+**Syntax:**
+
+Default value: 0
+
+ .border-top-right-radius(length | percentage)
+
+**Tips and tricks:**
+
+ If you omit units, `border-top-right-radius` adds `px` automatically.
+ If you want to use syntax like `10px \ 5px`, you have to interpolate argument `~''` or LESS CSS divides it (yeah awesome feature!).
+ Also LESS Hat adds `background-clip: padding-box`, because it fixes problem with older Safari. Here is some [resource](http://tumble.sneak.co.nz/post/928998513/fixing-the-background-bleed).
+
+**Example:**
+
+ div {
+ .border-top-right-radius(5px);
+ }
+
+ // Result
+ div {
+ -webkit-border-top-right-radius: 5px;
+ -moz-border-top-right-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+
+
diff --git a/mixins/border-top-right-radius/test.js b/mixins/border-top-right-radius/test.js
new file mode 100644
index 0000000..567886a
--- /dev/null
+++ b/mixins/border-top-right-radius/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('border-top-right-radius', function() {
+
+ it('should return the same value', function(done) {
+ test.borderTopRightRadius('10px', '10px', done);
+ });
+
+ it('should return numbers with px', function(done) {
+ test.borderTopRightRadius('20', '20px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/box-shadow/box-shadow.js b/mixins/box-shadow/box-shadow.js
new file mode 100644
index 0000000..c59e2e8
--- /dev/null
+++ b/mixins/box-shadow/box-shadow.js
@@ -0,0 +1,33 @@
+/**
+ * boxShadow mixin
+ */
+
+boxShadow = function boxShadow(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+boxShadow.vendors = ['webkit', 'moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = boxShadow;
diff --git a/mixins/box-shadow/box-shadow.md b/mixins/box-shadow/box-shadow.md
new file mode 100644
index 0000000..0c01952
--- /dev/null
+++ b/mixins/box-shadow/box-shadow.md
@@ -0,0 +1,31 @@
+### • box-shadow
+**Summary:**
+
+The box-shadow CSS property describes one or more shadow effects as a comma-separated list. It allows casting a drop shadow from the frame of almost any element. If a border-radius is specified on the element with a box shadow, the box shadow takes on the same rounded corners. The z-ordering of multiple box shadows is the same as multiple text shadows (the first specified shadow is on top).
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/box-shadow)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow)**
+
+**Syntax:**
+
+Default value: none
+
+ .box-shadow(offset-x offset-y blur-radius color, offset-x offset-y blur-radius color)
+
+**Tips and tricks:**
+
+ If you omit units, `box-shadow` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .box-shadow(0 1px 10px rgba(20,20,20,0.5));
+ }
+
+ // Result
+ div {
+ -webkit-box-shadow: 0 1px 10px rgba(20,20,20,0.5);
+ -moz-box-shadow: 0 1px 10px rgba(20,20,20,0.5);
+ box-shadow: 0 1px 10px rgba(20,20,20,0.5);
+ }
+
+
diff --git a/mixins/box-shadow/test.js b/mixins/box-shadow/test.js
new file mode 100644
index 0000000..0014a68
--- /dev/null
+++ b/mixins/box-shadow/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('box-shadow', function() {
+
+ it('should return the same value', function(done) {
+ test.boxShadow('0 1px 10px rgba(20,20,20,0.5)', '0px 1px 10px rgba(20, 20, 20, 0.5)', done);
+ });
+
+ it('should add px for numbers', function(done) {
+ test.boxShadow('5 4 100 rgba(20,20,20,0.5)', '5px 4px 100px rgba(20, 20, 20, 0.5)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/box-sizing/box-sizing.js b/mixins/box-sizing/box-sizing.js
new file mode 100644
index 0000000..29b8107
--- /dev/null
+++ b/mixins/box-sizing/box-sizing.js
@@ -0,0 +1,22 @@
+/**
+ * BoxSizing mixin
+ */
+
+var boxSizing = function boxSizing(value) {
+ value = value || 'content-box';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+boxSizing.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = boxSizing;
\ No newline at end of file
diff --git a/mixins/box-sizing/box-sizing.md b/mixins/box-sizing/box-sizing.md
new file mode 100644
index 0000000..d1789ec
--- /dev/null
+++ b/mixins/box-sizing/box-sizing.md
@@ -0,0 +1,27 @@
+### • box-sizing
+**Summary:**
+
+The box-sizing CSS property is used to alter the default CSS box model used to calculate widths and heights of elements. It is possible to use this property to emulate the behavior of browsers that do not correctly support the CSS box model specification.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/box-sizing)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing)**
+
+**Syntax:**
+
+Default value: content-box
+
+ .box-sizing(content-box | padding-box | border-box)
+
+**Example:**
+
+ div {
+ .box-sizing(padding-box);
+ }
+
+ // Result
+ div {
+ -webkit-box-sizing: padding-box;
+ -moz-box-sizing: padding-box;
+ box-sizing: padding-box;
+ }
+
+
diff --git a/mixins/box-sizing/test.js b/mixins/box-sizing/test.js
new file mode 100644
index 0000000..425d819
--- /dev/null
+++ b/mixins/box-sizing/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('box-sizing', function() {
+
+ it('should return the same value', function(done) {
+ test.boxSizing('border-box', 'border-box', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/brightness/brightness.js b/mixins/brightness/brightness.js
new file mode 100644
index 0000000..c556bb9
--- /dev/null
+++ b/mixins/brightness/brightness.js
@@ -0,0 +1,30 @@
+/**
+ * Brightness mixin
+ */
+
+var brightness = function brightness(value) {
+ value = value || '1';
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+brightness.result = {
+ property: 'filter',
+ value: 'brightness({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+brightness.vendors = ['webkit', 'moz', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = brightness;
\ No newline at end of file
diff --git a/mixins/brightness/brightness.md b/mixins/brightness/brightness.md
new file mode 100644
index 0000000..569dffd
--- /dev/null
+++ b/mixins/brightness/brightness.md
@@ -0,0 +1,28 @@
+### • brightness (shorthand for filter property)
+**Summary:**
+
+Applies a linear multiplier to input image, making it appear more or less bright. A value of 0% will create an image that is completely black. A value of 100% leaves the input unchanged. Other values are linear multipliers on the effect. Values of an amount over 100% are allowed, providing brighter results. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .brightness(amount)
+
+**Example:**
+
+ div {
+ .brightness(0.5);
+ }
+
+ // Result
+ div {
+ -webkit-filter: brightness(0.5);
+ -moz-filter: brightness(0.5);
+ -ms-filter: brightness(0.5);
+ filter: brightness(0.5);
+ }
+
+
diff --git a/mixins/brightness/test.js b/mixins/brightness/test.js
new file mode 100644
index 0000000..a33ed42
--- /dev/null
+++ b/mixins/brightness/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('brightness', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'filter';
+ test.brightness('.5', 'brightness(0.5)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/calc/calc.js b/mixins/calc/calc.js
new file mode 100644
index 0000000..6db6ea6
--- /dev/null
+++ b/mixins/calc/calc.js
@@ -0,0 +1,86 @@
+/**
+ * Keyframes mixin
+ */
+
+var calc = function calc(value) {
+
+ // States
+ // 1 - all
+ // 2 - webkit, moz
+ // 3 - webkit, w3c
+ // 4 - webkit
+ // 5 - moz, w3c
+ // 6 - moz
+ // 7 - w3c
+
+ value = value || 08121991;
+ var state = '@{state}';
+ var value_temp = value;
+ if (value == 08121991) {
+ return value;
+ }
+
+ switch (state) {
+ case '1':
+ syntax('-webkit-calc', 'start');
+ syntax('-moz-calc');
+ syntax('calc');
+ break;
+ case '2':
+ syntax('-webkit-calc', 'start');
+ syntax('-moz-calc');
+ break;
+ case '3':
+ syntax('-webkit-calc', 'start');
+ syntax('calc');
+ break;
+ case '4':
+ syntax('-webkit-calc', 'start');
+ break;
+ case '5':
+ syntax('-moz-calc', 'start');
+ syntax('calc');
+ break;
+ case '6':
+ syntax('-moz-calc', 'start');
+ break;
+ case '7':
+ syntax('calc', 'start');
+ break;
+ }
+
+ function syntax(property, start) {
+ var end = ');\n';
+ var definition = value_temp.split(',');
+ var syntax = definition[0] + ':' + property + '(' + (definition[1].trim() || 0) + end;
+
+ if (start == 'start') {
+ value = '0;\n' + syntax;
+ } else {
+ value = value + syntax;
+ }
+ }
+
+ value = value.replace(/;$/g,'');
+
+ return value;
+};
+
+
+/**
+ * We want totally custom result definition, because calc mixin is tricky one (not recommended, it's not testable)
+ */
+
+calc.result = 'result.less';
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+calc.vendors = ['webkit', 'moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = calc;
diff --git a/mixins/calc/calc.md b/mixins/calc/calc.md
new file mode 100644
index 0000000..ef04061
--- /dev/null
+++ b/mixins/calc/calc.md
@@ -0,0 +1,27 @@
+### • calc
+**Summary:**
+
+The calc() CSS function can be used anywhere a ``, ``, ``, ``, ``, or `` is required.With calc(), you can perform calculations to determine CSS property values.
+
+**THIS MIXIN MUST BE INTERPOLATED ~''**
+The `-lh-property: 0` junk line of code is a neccesary sacrifice due to the hack nature of this set of mixins. (via [less-properties](https://github.com/borodean/less-properties))
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/calc)**
+
+**Syntax:**
+
+ .calc(, ~'')
+
+**Example:**
+
+ div {
+ .calc(width, ~'100% - 33px');
+ }
+
+ // Result
+ div {
+ -lh-property: 0;
+ width:-webkit-calc(100% - 33px);
+ width:-moz-calc(100% - 33px);
+ width:calc(100% - 33px);
+ }
diff --git a/mixins/calc/result.less b/mixins/calc/result.less
new file mode 100644
index 0000000..0167678
--- /dev/null
+++ b/mixins/calc/result.less
@@ -0,0 +1,18 @@
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 2; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 3; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 4; -lh-property: @process; }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 5; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state: 6; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 7; -lh-property: @process; }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@w3c_local = true) {}
+ .inception(@arguments);
diff --git a/mixins/column-count/column-count.js b/mixins/column-count/column-count.js
new file mode 100644
index 0000000..c2e5b44
--- /dev/null
+++ b/mixins/column-count/column-count.js
@@ -0,0 +1,22 @@
+/**
+ * ColumnCount mixin
+ */
+
+var columnCount = function columnCount(value) {
+ value = value || 'auto';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+columnCount.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = columnCount;
\ No newline at end of file
diff --git a/mixins/column-count/column-count.md b/mixins/column-count/column-count.md
new file mode 100644
index 0000000..5b18d47
--- /dev/null
+++ b/mixins/column-count/column-count.md
@@ -0,0 +1,27 @@
+### • column-count
+**Summary:**
+
+The column-count CSS property describes the number of columns of the element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-count)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-count)**
+
+**Syntax:**
+
+Default value: auto
+
+ .column-count( | auto)
+
+**Example:**
+
+ div {
+ .column-count(3);
+ }
+
+ // Result
+ div {
+ -webkit-column-count: 0.5;
+ -moz-column-count: 0.5;
+ column-count: 0.5;
+ }
+
+
diff --git a/mixins/column-count/test.js b/mixins/column-count/test.js
new file mode 100644
index 0000000..811dfa4
--- /dev/null
+++ b/mixins/column-count/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('column-count', function() {
+
+ it('should return the same value ', function(done) {
+ test.columnCount('3', '3', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/column-gap/column-gap.js b/mixins/column-gap/column-gap.js
new file mode 100644
index 0000000..b30a4c9
--- /dev/null
+++ b/mixins/column-gap/column-gap.js
@@ -0,0 +1,30 @@
+/**
+ * ColumnGap mixin
+ */
+
+var columnGap = function columnGap(value) {
+ value = value || 'normal';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+columnGap.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = columnGap;
diff --git a/mixins/column-gap/column-gap.md b/mixins/column-gap/column-gap.md
new file mode 100644
index 0000000..4015182
--- /dev/null
+++ b/mixins/column-gap/column-gap.md
@@ -0,0 +1,31 @@
+### • column-gap
+**Summary:**
+
+The column-gap CSS property sets the size of the gap between columns for elements which are specified to display as a multi-column element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-gap)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap)**
+
+**Syntax:**
+
+Default value: normal
+
+ .column-gap( | normal)
+
+**Tips and tricks:**
+
+ If you omit units, `column-gap` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .column-gap(30);
+ }
+
+ // Result
+ div {
+ -webkit-column-gap: 30px;
+ -moz-column-gap: 30px;
+ column-gap: 30px;
+ }
+
+
diff --git a/mixins/column-gap/test.js b/mixins/column-gap/test.js
new file mode 100644
index 0000000..0630b84
--- /dev/null
+++ b/mixins/column-gap/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('column-gap', function() {
+
+ it('should return the same value', function(done) {
+ test.columnGap('40px', '40px', done);
+ });
+
+ it('should add default unit and return the same value', function(done) {
+ test.columnGap('22', '22px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/column-rule/column-rule.js b/mixins/column-rule/column-rule.js
new file mode 100644
index 0000000..56d5f66
--- /dev/null
+++ b/mixins/column-rule/column-rule.js
@@ -0,0 +1,34 @@
+/**
+ * ColumnRule mixin
+ */
+
+var columnRule = function columnRule(value) {
+ value = value || 'medium none black';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+columnRule.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = columnRule;
diff --git a/mixins/column-rule/column-rule.md b/mixins/column-rule/column-rule.md
new file mode 100644
index 0000000..082ac8d
--- /dev/null
+++ b/mixins/column-rule/column-rule.md
@@ -0,0 +1,31 @@
+### • column-rule
+**Summary:**
+
+In multi-column layouts, the column-rule CSS property specifies a straight line, or "rule", to be drawn between each column.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-rule)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-rule)**
+
+**Syntax:**
+
+Default value: medium none black
+
+ .column-rule( | | )
+
+**Tips and tricks:**
+
+ If you omit units, `column-rule` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .column-rule(5 outset #ff00ff);
+ }
+
+ // Result
+ div {
+ -webkit-column-rule: 5px outset #ff00ff;
+ -moz-column-rule: 5px outset #ff00ff;
+ column-rule: 5px outset #ff00ff;
+ }
+
+
diff --git a/mixins/column-rule/test.js b/mixins/column-rule/test.js
new file mode 100644
index 0000000..0be7289
--- /dev/null
+++ b/mixins/column-rule/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('column-rule', function() {
+
+ it('should return the same value', function(done) {
+ test.columnRule('3px outset #ff00ff', '3px outset #ff00ff', done);
+ });
+
+ it('should add default unit and return the same value', function(done) {
+ test.columnRule('5 outset #ff00ff', '5px outset #ff00ff', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/column-width/column-width.js b/mixins/column-width/column-width.js
new file mode 100644
index 0000000..08df500
--- /dev/null
+++ b/mixins/column-width/column-width.js
@@ -0,0 +1,30 @@
+/**
+ * ColumnWidth mixin
+ */
+
+var columnWidth = function columnWidth(value) {
+ value = value || 'auto';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+columnWidth.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = columnWidth;
diff --git a/mixins/column-width/column-width.md b/mixins/column-width/column-width.md
new file mode 100644
index 0000000..66b6526
--- /dev/null
+++ b/mixins/column-width/column-width.md
@@ -0,0 +1,31 @@
+### • column-width
+**Summary:**
+
+The column-width CSS property suggests an optimal column width. This is not a absolute value but a mere hint. Browser will adjust the width of the column around that suggested value, allowing to achieve scalable designs that fit different screen size.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/column-width)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/column-width)**
+
+**Syntax:**
+
+Default value: auto
+
+ .column-width( | auto)
+
+**Tips and tricks:**
+
+ If you omit units, `column-width` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .column-width(100px);
+ }
+
+ // Result
+ div {
+ -webkit-column-width: 100px;
+ -moz-column-width: 100px;
+ column-width: 100px;
+ }
+
+
diff --git a/mixins/column-width/test.js b/mixins/column-width/test.js
new file mode 100644
index 0000000..067f3e4
--- /dev/null
+++ b/mixins/column-width/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('column-width', function() {
+
+ it('should return the same value', function(done) {
+ test.columnWidth('100px', '100px', done);
+ });
+
+ it('should add default unit and return the same value', function(done) {
+ test.columnWidth('150', '150px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/columns/columns.js b/mixins/columns/columns.js
new file mode 100644
index 0000000..4e8f08f
--- /dev/null
+++ b/mixins/columns/columns.js
@@ -0,0 +1,32 @@
+/**
+ * Columns mixin
+ */
+
+var columns = function columns(value) {
+ value = value || 'auto auto';
+ var numRegex = /^\d+$/;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ value = value.split(' ');
+ }
+
+ if (numRegex.test(value[0])) {
+ value[0] = value[0] + 'px';
+ }
+
+ return value.join(' ');
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+columns.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = columns;
\ No newline at end of file
diff --git a/mixins/columns/columns.md b/mixins/columns/columns.md
new file mode 100644
index 0000000..a9d6485
--- /dev/null
+++ b/mixins/columns/columns.md
@@ -0,0 +1,31 @@
+### • columns
+**Summary:**
+
+The columns CSS property is a shorthand property allowing to set both the column-width and the column-count properties at the same time.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/columns)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/columns)**
+
+**Syntax:**
+
+Default value: auto
+
+ .columns( | )
+
+**Tips and tricks:**
+
+ If you omit units for column-width argument, `columns` adds `px` to it automatically.
+
+**Example:**
+
+ div {
+ .columns(100 3);
+ }
+
+ // Result
+ div {
+ -webkit-columns: 100px 3;
+ -moz-columns: 100px 3;
+ columns: 100px 3;
+ }
+
+
diff --git a/mixins/columns/test.js b/mixins/columns/test.js
new file mode 100644
index 0000000..144e87a
--- /dev/null
+++ b/mixins/columns/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('columns', function() {
+
+ it('should return the same value', function(done) {
+ test.columns('200px 3', '200px 3', done);
+ });
+
+ it('should add default units and return same value', function(done) {
+ test.columns('150 2', '150px 2', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/contrast/contrast.js b/mixins/contrast/contrast.js
new file mode 100644
index 0000000..4b1a79e
--- /dev/null
+++ b/mixins/contrast/contrast.js
@@ -0,0 +1,38 @@
+/**
+ * Contrast mixin
+ */
+
+var contrast = function contrast(value) {
+ value = value || '100%';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+contrast.result = {
+ property: 'filter',
+ value: '~"contrast({{ escape_result }})"',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+contrast.vendors = ['webkit', 'moz', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = contrast;
diff --git a/mixins/contrast/contrast.md b/mixins/contrast/contrast.md
new file mode 100644
index 0000000..dbde866
--- /dev/null
+++ b/mixins/contrast/contrast.md
@@ -0,0 +1,32 @@
+### • contrast
+**Summary:**
+
+Adjusts the contrast of the input. A value of 0% will create an image that is completely black. A value of 100% leaves the input unchanged. Values of amount over 100% are allowed, providing results with less contrast. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 100%
+
+ .contrast()
+
+**Tips and tricks:**
+
+ If you omit units, `contrast` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .contrast(200);
+ }
+
+ // Result
+ div {
+ -webkit-filter: contrast(200%);
+ -moz-filter: contrast(200%);
+ -ms-filter: contrast(200%);
+ filter: contrast(200%);
+ }
+
+
diff --git a/mixins/contrast/test.js b/mixins/contrast/test.js
new file mode 100644
index 0000000..ca6a712
--- /dev/null
+++ b/mixins/contrast/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('contrast', function() {
+
+ it('should add default unit and return the value', function(done) {
+ test.resultProperty = 'filter';
+ test.contrast('200', 'contrast(200%)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/display/display.js b/mixins/display/display.js
new file mode 100644
index 0000000..34654e3
--- /dev/null
+++ b/mixins/display/display.js
@@ -0,0 +1,78 @@
+/**
+ * Display (flexbox) mixin
+ */
+
+var display = function display(value) {
+
+ if (value != 'flex' || value != 'inline-flex') {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+display.oldwebkit = function displayWebkit(value) {
+
+ if (value == 'flex' || value == 'inline-flex') {
+ value = '-webkit-box';
+ } else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+display.moz = function displayWebkit(value) {
+
+ if (value == 'flex') {
+ value = '-ms-flexbox';
+ } else if (value == 'inline-flex') {
+ value = '-ms-inline-flexbox';
+ } else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+display.ms = function displayWebkit(value) {
+
+ if (value == 'flex' || value == 'inline-flex') {
+ value = '-moz-box';
+ } else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+display.webkit = function displayWebkit(value) {
+
+ if (value == 'flex' || value == 'inline-flex') {
+ value = '-webkit-' + value;
+ } else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+/**
+ * We don't want to prefix display property
+ */
+
+display.result = {
+ prefixed: false,
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+display.vendors = ['oldwebkit', 'moz', 'webkit', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = display;
\ No newline at end of file
diff --git a/mixins/display/display.md b/mixins/display/display.md
new file mode 100644
index 0000000..988c5c2
--- /dev/null
+++ b/mixins/display/display.md
@@ -0,0 +1,26 @@
+### • display
+**Summary:**
+
+The display CSS property specifies the type of rendering box used for an element. This mixin is specifically for flexbox purpose.
+
+Resources: **[CSS-Tricks](http://css-tricks.com/snippets/css/a-guide-to-flexbox/)**
+
+**Syntax:**
+
+ .display( | )
+
+**Example:**
+
+ div {
+ .display(flex);
+ }
+
+ // Result
+ div {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: -moz-box;
+ }
+
+
diff --git a/mixins/display/test.js b/mixins/display/test.js
new file mode 100644
index 0000000..57ecce5
--- /dev/null
+++ b/mixins/display/test.js
@@ -0,0 +1,16 @@
+var assert = require('assert');
+
+describe('display', function () {
+
+ /**
+ * If you want to test this code, comment 'prefixed:false' from display.js
+ */
+ // it('should prefix and return value', function (done) {
+ // test.display.webkit('flex', '-webkit-flex', done);
+ // });
+
+ // it('should prefix and return value', function (done) {
+ // test.display.oldwebkit('flex', '-webkit-box', done);
+ // });
+
+});
\ No newline at end of file
diff --git a/mixins/drop-shadow/drop-shadow.js b/mixins/drop-shadow/drop-shadow.js
new file mode 100644
index 0000000..c7f6cec
--- /dev/null
+++ b/mixins/drop-shadow/drop-shadow.js
@@ -0,0 +1,45 @@
+/**
+ * DropShadow mixin
+ */
+
+var dropShadow = function dropShadow(value) {
+ value = value || 08121991;
+ if (value == 08121991) {
+ return value;
+ }
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9()]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+dropShadow.result = {
+ property: 'filter',
+ value: 'drop-shadow({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+dropShadow.vendors = ['webkit', 'moz', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = dropShadow;
diff --git a/mixins/drop-shadow/drop-shadow.md b/mixins/drop-shadow/drop-shadow.md
new file mode 100644
index 0000000..fcfa255
--- /dev/null
+++ b/mixins/drop-shadow/drop-shadow.md
@@ -0,0 +1,30 @@
+### • drop-shadow
+**Summary:**
+
+Applies a drop shadow effect to the input image. A drop shadow is effectively a blurred, offset version of the input image's alpha mask drawn in a particular color, composited below the image.
+
+Resources: **MDN **
+
+**Syntax:**
+
+ .drop-shadow( [ | | ])
+
+**Tips and tricks:**
+
+ If you omit units, `drop-shadow` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .drop-shadow(16 16 10 black);
+ }
+
+ // Result
+ div {
+ -webkit-filter: drop-shadow(16px 16px 10px #000000);
+ -moz-filter: drop-shadow(16px 16px 10px #000000);
+ -ms-filter: drop-shadow(16px 16px 10px #000000);
+ filter: drop-shadow(16px 16px 10px #000000);
+ }
+
+
diff --git a/mixins/drop-shadow/test.js b/mixins/drop-shadow/test.js
new file mode 100644
index 0000000..7c757ac
--- /dev/null
+++ b/mixins/drop-shadow/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('drop-shadow', function() {
+
+ it('should add default unit and return the value', function(done) {
+ test.resultProperty = 'filter';
+ test.dropShadow('16 16 10 black', 'drop-shadow(16px 16px 10px #000000)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/filter/filter.js b/mixins/filter/filter.js
new file mode 100644
index 0000000..f7ec831
--- /dev/null
+++ b/mixins/filter/filter.js
@@ -0,0 +1,26 @@
+/**
+ * Filter mixin
+ */
+
+var filter = function filter(value) {
+ value = value || 'none';
+
+ if (/^[-a-zA-Z0-9().]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+filter.vendors = ['webkit', 'moz', 'ms'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = filter;
\ No newline at end of file
diff --git a/mixins/filter/filter.md b/mixins/filter/filter.md
new file mode 100644
index 0000000..75c7384
--- /dev/null
+++ b/mixins/filter/filter.md
@@ -0,0 +1,28 @@
+### • filter
+**Summary:**
+
+The CSS filter property provides for effects like blurring or color shifting on an element’s rendering before the element is displayed. Filters are commonly used to adjust the rendering of an image, a background, or a border.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/filter)**
+
+**Syntax:**
+
+Default value: none
+
+ .filter(*)
+
+**Example:**
+
+ div {
+ .filter(grayscale(0.5) blur(10px));
+ }
+
+ // Result
+ div {
+ -webkit-filter: grayscale(0.5) blur(10px);
+ -moz-filter: grayscale(0.5) blur(10px);
+ -ms-filter: grayscale(0.5) blur(10px);
+ filter: grayscale(0.5) blur(10px);
+ }
+
+
diff --git a/mixins/filter/test.js b/mixins/filter/test.js
new file mode 100644
index 0000000..34007eb
--- /dev/null
+++ b/mixins/filter/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('filter', function() {
+
+ it('should return the same value', function(done) {
+ test.filter('grayscale(0.5) blur(10px)', 'grayscale(0.5) blur(10px)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/flex-basis/flex-basis.js b/mixins/flex-basis/flex-basis.js
new file mode 100644
index 0000000..89544bb
--- /dev/null
+++ b/mixins/flex-basis/flex-basis.js
@@ -0,0 +1,29 @@
+/**
+ * FlexBasis mixin
+ */
+
+var flexBasis = function flexBasis(value) {
+ value = value || 'auto';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+flexBasis.vendors = ['webkit'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = flexBasis;
diff --git a/mixins/flex-basis/flex-basis.md b/mixins/flex-basis/flex-basis.md
new file mode 100644
index 0000000..2a26a67
--- /dev/null
+++ b/mixins/flex-basis/flex-basis.md
@@ -0,0 +1,30 @@
+### • flex-basis
+**Summary:**
+
+The CSS flex-basis property specifies the flex basis which is the initial main size of a flex item.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-basis/)**
+
+**Syntax:**
+
+Default value: auto
+
+ .flex-basis()
+
+**Tips and tricks:**
+
+ If you omit units, `flex-basis` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .flex-basis(100);
+ }
+
+ // Result
+ div {
+ -webkit-flex-basis: 100;
+ flex-basis: 100px;
+ }
+
+
diff --git a/mixins/flex-basis/test.js b/mixins/flex-basis/test.js
new file mode 100644
index 0000000..4552310
--- /dev/null
+++ b/mixins/flex-basis/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('flex-basis', function () {
+
+ it('should add unit and return same value', function (done) {
+ test.flexBasis('100', '100px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/flex-direction/flex-direction.js b/mixins/flex-direction/flex-direction.js
new file mode 100644
index 0000000..10e4978
--- /dev/null
+++ b/mixins/flex-direction/flex-direction.js
@@ -0,0 +1,104 @@
+/**
+ * FlexDirection mixin
+ */
+
+var flexDirection = function flexDirection(value) {
+ value = value || 'row';
+
+ return value;
+};
+
+flexDirection.oldestwebkit = function oldestwebkitFlexDirection(value) {
+
+ if (value == 'row'|| value == 'column') {
+ value = 'normal';
+ }
+ else if (value == 'row-reverse' || value == 'column-reverse') {
+ value = 'reverse';
+ }
+ else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+flexDirection.oldermoz = function oldermozFlexDirection(value) {
+
+ if (value == 'row'|| value == 'column') {
+ value = 'normal';
+ }
+ else if (value == 'row-reverse' || value == 'column-reverse') {
+ value = 'reverse';
+ }
+ else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+flexDirection.olderwebkit = function olderwebkitFlexDirection(value) {
+
+ if (value == 'row' || value == 'row-reverse') {
+ value = 'horizontal';
+ }
+ else if (value == 'column' || value == 'column-reverse') {
+ value = 'vertical';
+ }
+ else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+flexDirection.moz = function oldermozFlexDirection(value) {
+
+ if (value == 'row' || value == 'row-reverse') {
+ value = 'horizontal';
+ }
+ else if (value == 'column' || value == 'column-reverse') {
+ value = 'vertical';
+ }
+ else {
+ value = 08121991;
+ }
+
+ return value;
+};
+
+/**
+ * Older syntax have different properties
+ */
+
+flexDirection.result = {
+ oldestwebkit: {
+ property: '-webkit-box-direction',
+ prefixed: false
+ },
+ oldermoz: {
+ property: '-moz-box-direction',
+ prefixed: false
+ },
+ olderwebkit: {
+ property: '-webkit-box-orient',
+ prefixed: false
+ },
+ moz: {
+ property: '-moz-box-orient',
+ prefixed: false
+ }
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+flexDirection.vendors = ['oldestwebkit','oldermoz','olderwebkit','moz','webkit', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = flexDirection;
\ No newline at end of file
diff --git a/mixins/flex-direction/flex-direction.md b/mixins/flex-direction/flex-direction.md
new file mode 100644
index 0000000..512000b
--- /dev/null
+++ b/mixins/flex-direction/flex-direction.md
@@ -0,0 +1,31 @@
+### • flex-direction
+**Summary:**
+
+The CSS flex-direction property specifies how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-direction/)**
+
+**Syntax:**
+
+Default value: row
+
+ .flex-direction(row | row-reverse | column | column-reverse)
+
+**Example:**
+
+ div {
+ .flex-direction(row);
+ }
+
+ // Result
+ div {
+ -webkit-box-direction: normal;
+ -moz-box-direction: normal;
+ -webkit-box-orient: horizontal;
+ -moz-box-orient: horizontal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ }
+
+
diff --git a/mixins/flex-direction/test.js b/mixins/flex-direction/test.js
new file mode 100644
index 0000000..d5aad1a
--- /dev/null
+++ b/mixins/flex-direction/test.js
@@ -0,0 +1,16 @@
+var assert = require('assert');
+
+describe('flex-direction', function () {
+
+ /**
+ * If you want to test this code, comment 'flexDirection.result' from flex-direction.js
+ */
+ // it('should return horizontal', function (done) {
+ // test.flexDirection.moz('row', 'horizontal', done);
+ // });
+
+ // it('should return the same value', function (done) {
+ // test.flexDirection.oldestwebkit('column-reverse', 'reverse', done);
+ // });
+
+});
\ No newline at end of file
diff --git a/mixins/flex-grow/flex-grow.js b/mixins/flex-grow/flex-grow.js
new file mode 100644
index 0000000..9436095
--- /dev/null
+++ b/mixins/flex-grow/flex-grow.js
@@ -0,0 +1,21 @@
+/**
+ * FlexGrow mixin
+ */
+
+var flexGrow = function flexGrow(value) {
+ value = value || '0';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+flexGrow.vendors = ['webkit'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = flexGrow;
\ No newline at end of file
diff --git a/mixins/flex-grow/flex-grow.md b/mixins/flex-grow/flex-grow.md
new file mode 100644
index 0000000..e38b999
--- /dev/null
+++ b/mixins/flex-grow/flex-grow.md
@@ -0,0 +1,26 @@
+### • flex-grow
+**Summary:**
+
+The CSS flex-grow property specifies the flex grow factor of a flex item.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-grow/)**
+
+**Syntax:**
+
+Default value: 0
+
+ .flex-grow()
+
+**Example:**
+
+ div {
+ .flex-grow(2);
+ }
+
+ // Result
+ div {
+ -webkit-flex-grow: 2;
+ flex-grow: 2;
+ }
+
+
diff --git a/mixins/flex-grow/test.js b/mixins/flex-grow/test.js
new file mode 100644
index 0000000..3d4f712
--- /dev/null
+++ b/mixins/flex-grow/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('flex-grow', function () {
+
+ it('should return the same value', function (done) {
+ test.flexGrow('2', '2', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/flex-shrink/flex-shrink.js b/mixins/flex-shrink/flex-shrink.js
new file mode 100644
index 0000000..1f89043
--- /dev/null
+++ b/mixins/flex-shrink/flex-shrink.js
@@ -0,0 +1,21 @@
+/**
+ * FlexShrink mixin
+ */
+
+var flexShrink = function flexShrink(value) {
+ value = value || '1';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+flexShrink.vendors = ['webkit'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = flexShrink;
\ No newline at end of file
diff --git a/mixins/flex-shrink/flex-shrink.md b/mixins/flex-shrink/flex-shrink.md
new file mode 100644
index 0000000..4fa109a
--- /dev/null
+++ b/mixins/flex-shrink/flex-shrink.md
@@ -0,0 +1,26 @@
+### • flex-shrink
+**Summary:**
+
+The CSS flex-shrink property specifies the flex shrink factor of a flex item.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-shrink/)**
+
+**Syntax:**
+
+Default value: 1
+
+ .flex-shrink()
+
+**Example:**
+
+ div {
+ .flex-shrink(2);
+ }
+
+ // Result
+ div {
+ -webkit-flex-shrink: 2;
+ flex-shrink: 2;
+ }
+
+
diff --git a/mixins/flex-shrink/test.js b/mixins/flex-shrink/test.js
new file mode 100644
index 0000000..bb2e011
--- /dev/null
+++ b/mixins/flex-shrink/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('flex-shrink', function () {
+
+ it('should return the same value', function (done) {
+ test.flexShrink('something', 'something', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/flex-wrap/flex-wrap.js b/mixins/flex-wrap/flex-wrap.js
new file mode 100644
index 0000000..91ecec0
--- /dev/null
+++ b/mixins/flex-wrap/flex-wrap.js
@@ -0,0 +1,21 @@
+/**
+ * FlexWrap mixin
+ */
+
+var flexWrap = function flexWrap(value) {
+ value = value || 'nowrap';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+flexWrap.vendors = ['webkit','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = flexWrap;
\ No newline at end of file
diff --git a/mixins/flex-wrap/flex-wrap.md b/mixins/flex-wrap/flex-wrap.md
new file mode 100644
index 0000000..0324630
--- /dev/null
+++ b/mixins/flex-wrap/flex-wrap.md
@@ -0,0 +1,27 @@
+### • flex-wrap
+**Summary:**
+
+The CSS flex-wrap property specifies whether the children are forced into a single line or if the items can be flowed on multiple lines.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex-wrap/)**
+
+**Syntax:**
+
+Default value: nowrap
+
+ .flex-wrap(nowrap | wrap | wrap-reverse)
+
+**Example:**
+
+ div {
+ .flex-wrap(wrap-reverse);
+ }
+
+ // Result
+ div {
+ -webkit-flex-wrap: 2;
+ -ms-flex-wrap: 2;
+ flex-wrap: 2;
+ }
+
+
diff --git a/mixins/flex-wrap/test.js b/mixins/flex-wrap/test.js
new file mode 100644
index 0000000..3dca205
--- /dev/null
+++ b/mixins/flex-wrap/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('flex-wrap', function () {
+
+ it('should return the same value', function (done) {
+ test.flexWrap('wrap-reverse', 'wrap-reverse', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/flex/flex.js b/mixins/flex/flex.js
new file mode 100644
index 0000000..981a96a
--- /dev/null
+++ b/mixins/flex/flex.js
@@ -0,0 +1,52 @@
+/**
+ * Flex mixin
+ */
+
+var flex = function flex(value) {
+ value = value || '0 1 auto';
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ return value;
+};
+
+flex.olderwebkit = function olderwebkitflex(value) {
+ value = value.match(/^\d+/)[0] || '0';
+
+ return value;
+};
+
+flex.moz = function mozflex(value) {
+ value = value.match(/^\d+/)[0] || '0';
+
+ return value;
+};
+
+/**
+ * Older syntax have different properties
+ */
+
+flex.result = {
+ olderwebkit: {
+ property: '-webkit-box-flex',
+ prefixed: false
+ },
+ moz: {
+ property: '-moz-box-flex',
+ prefixed: false
+ },
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+flex.vendors = ['olderwebkit','moz','webkit','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = flex;
diff --git a/mixins/flex/flex.md b/mixins/flex/flex.md
new file mode 100644
index 0000000..1465d3d
--- /dev/null
+++ b/mixins/flex/flex.md
@@ -0,0 +1,29 @@
+### • flex
+**Summary:**
+
+The flex CSS property specifies ability of a flex item to alter their dimensions to fill the available space. Flex items can be stretched to use available space proportional to their flex grow factor or their flex shrink factor to prevent overflow.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/flex)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/f/flex/)**
+
+**Syntax:**
+
+Default value: 0 1 auto
+
+ .flex(none | [ | ])
+
+**Example:**
+
+ div {
+ .flex(1 3 100px);
+ }
+
+ // Result
+ div {
+ -webkit-box-flex: 1;
+ -moz-box-flex: 1;
+ -webkit-flex: 1 3 100px;
+ -ms-flex: 1 3 100px;
+ flex: 1 3 100px;
+ }
+
+
diff --git a/mixins/flex/test.js b/mixins/flex/test.js
new file mode 100644
index 0000000..deb4d26
--- /dev/null
+++ b/mixins/flex/test.js
@@ -0,0 +1,12 @@
+var assert = require('assert');
+
+describe('flex', function () {
+
+ /**
+ * If you want to test this code, comment 'flex.result' from flex.js
+ */
+ // it('should return first value', function (done) {
+ // test.flex.moz('1 3 100px', '1', done);
+ // });
+
+});
diff --git a/mixins/font-face/font-face.less b/mixins/font-face/font-face.less
new file mode 100644
index 0000000..714aae7
--- /dev/null
+++ b/mixins/font-face/font-face.less
@@ -0,0 +1,12 @@
+.font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal) {
+
+ font-family: "@{fontname}";
+ src: url("@{fontfile}-webfont.eot");
+ src: url("@{fontfile}-webfont.eot?#iefix") format("embedded-opentype"),
+ url("@{fontfile}-webfont.woff") format("woff"),
+ url("@{fontfile}-webfont.ttf") format("truetype"),
+ url("@{fontfile}-webfont.svg#@{fontname}") format("svg");
+ font-weight: @fontweight;
+ font-style: @fontstyle;
+
+}
\ No newline at end of file
diff --git a/mixins/font-face/font-face.md b/mixins/font-face/font-face.md
new file mode 100644
index 0000000..f447367
--- /dev/null
+++ b/mixins/font-face/font-face.md
@@ -0,0 +1,27 @@
+### • font-face
+**Summary:**
+
+The @font-face CSS at-rule allows authors to specify online fonts to display text on their web pages.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face)**
+
+**Syntax:**
+
+ .font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal)
+
+**Example:**
+
+ div {
+ .font-face(Hipster, ~'../fonts/hipster', bold, italic);
+ }
+
+ // Result
+ div {
+ font-family: "Hipster";
+ src: url("../fonts/hipster.eot");
+ src: url("../fonts/hipster.eot?#iefix") format("embedded-opentype"), url("../fonts/hipster.woff") format("woff"), url("../fonts/hipster.ttf") format("truetype"), url("../fonts/hipster.svg#Hipster") format("svg");
+ font-weight: bold;
+ font-style: italic;
+ }
+
+
diff --git a/mixins/footer.less b/mixins/footer.less
new file mode 100644
index 0000000..2113aed
--- /dev/null
+++ b/mixins/footer.less
@@ -0,0 +1 @@
+// What is the magic number 08121991?
\ No newline at end of file
diff --git a/mixins/grayscale/grayscale.js b/mixins/grayscale/grayscale.js
new file mode 100644
index 0000000..df54101
--- /dev/null
+++ b/mixins/grayscale/grayscale.js
@@ -0,0 +1,38 @@
+/**
+ * GrayScale mixin
+ */
+
+var grayScale = function grayScale(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+grayScale.result = {
+ property: 'filter',
+ value: 'grayscale({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+grayScale.vendors = ['webkit', 'moz', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = grayScale;
diff --git a/mixins/grayscale/grayscale.md b/mixins/grayscale/grayscale.md
new file mode 100644
index 0000000..8d14005
--- /dev/null
+++ b/mixins/grayscale/grayscale.md
@@ -0,0 +1,32 @@
+### • grayscale
+**Summary:**
+
+Converts the input image to grayscale. The value of ‘amount’ defines the proportion of the conversion. A value of 100% is completely grayscale. A value of 0% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .grayscale()
+
+**Tips and tricks:**
+
+ If you omit units, `grayscale` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .grayscale(50);
+ }
+
+ // Result
+ div {
+ -webkit-filter: grayscale(50%);
+ -moz-filter: grayscale(50%);
+ -ms-filter: grayscale(50%);
+ filter: grayscale(50%);
+ }
+
+
diff --git a/mixins/grayscale/test.js b/mixins/grayscale/test.js
new file mode 100644
index 0000000..b8ea055
--- /dev/null
+++ b/mixins/grayscale/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('grayscale', function() {
+
+ it('should add default unit and return the value', function(done) {
+ test.resultProperty = 'filter';
+ test.grayscale('50', 'grayscale(50%)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/header.less b/mixins/header.less
new file mode 100644
index 0000000..90eda1d
--- /dev/null
+++ b/mixins/header.less
@@ -0,0 +1,9 @@
+// * =========================================================== *
+// < LESSHat >
+// * =========================================================== *
+//
+// Made with Energy drinks in Prague, Czech Republic.
+// Handcrafted by Petr Brzek, lesshat.com
+// Works great with CSS Hat csshat.com
+
+// version: v{{ version }}
diff --git a/mixins/hue-rotate/hue-rotate.js b/mixins/hue-rotate/hue-rotate.js
new file mode 100644
index 0000000..9c09c12
--- /dev/null
+++ b/mixins/hue-rotate/hue-rotate.js
@@ -0,0 +1,38 @@
+/**
+ * HueRotate mixin
+ */
+
+var hueRotate = function hueRotate(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+hueRotate.result = {
+ property: 'filter',
+ value: 'hue-rotate({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+hueRotate.vendors = ['webkit', 'moz', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = hueRotate;
diff --git a/mixins/hue-rotate/hue-rotate.md b/mixins/hue-rotate/hue-rotate.md
new file mode 100644
index 0000000..c2d5bf0
--- /dev/null
+++ b/mixins/hue-rotate/hue-rotate.md
@@ -0,0 +1,32 @@
+### • hue-rotate
+**Summary:**
+
+Applies a hue rotation on the input image. The value of ‘angle’ defines the number of degrees around the color circle the input samples will be adjusted. A value of 0deg leaves the input unchanged. If the ‘angle’ parameter is missing, a value of 0deg is used. Maximum value is 360deg.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .hue-rotate()
+
+**Tips and tricks:**
+
+ If you omit units, `hue-rotate` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .hue-rotate(50);
+ }
+
+ // Result
+ div {
+ -webkit-filter: hue-rotate(50deg);
+ -moz-filter: hue-rotate(50deg);
+ -ms-filter: hue-rotate(50deg);
+ filter: hue-rotate(50deg);
+ }
+
+
diff --git a/mixins/hue-rotate/test.js b/mixins/hue-rotate/test.js
new file mode 100644
index 0000000..dc84330
--- /dev/null
+++ b/mixins/hue-rotate/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('hue-rotate', function () {
+
+ it('should add default unit and return the value', function (done) {
+ test.resultProperty = 'filter';
+ test.hueRotate('50', 'hue-rotate(50deg)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/invert/invert.js b/mixins/invert/invert.js
new file mode 100644
index 0000000..a25299e
--- /dev/null
+++ b/mixins/invert/invert.js
@@ -0,0 +1,38 @@
+/**
+ * Invert mixin
+ */
+
+var invert = function invert (value) {
+ value = value || '100%';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+invert.result = {
+ property: 'filter',
+ value: 'invert({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+invert.vendors = ['webkit','moz','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = invert;
diff --git a/mixins/invert/invert.md b/mixins/invert/invert.md
new file mode 100644
index 0000000..96944fc
--- /dev/null
+++ b/mixins/invert/invert.md
@@ -0,0 +1,32 @@
+### • invert
+**Summary:**
+
+Inverts the samples in the input image. The value of ‘amount’ defines the proportion of the conversion. A value of 100% is completely inverted. A value of 0% leaves the input unchanged. Values between 0% and 100% are linear multipliers on the effect. If the ‘amount’ parameter is missing, a value of 100% is used.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0
+
+ .invert()
+
+**Tips and tricks:**
+
+ If you omit units, `invert` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .invert(100);
+ }
+
+ // Result
+ div {
+ -webkit-filter: invert(100%);
+ -moz-filter: invert(100%);
+ -ms-filter: invert(100%);
+ filter: invert(100%);
+ }
+
+
diff --git a/mixins/invert/test.js b/mixins/invert/test.js
new file mode 100644
index 0000000..9d3a8c0
--- /dev/null
+++ b/mixins/invert/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('invert', function () {
+
+ it('should add default units and return the value', function (done) {
+ test.resultProperty = 'filter';
+ test.invert('50', 'invert(50%)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/justify-content/justify-content.js b/mixins/justify-content/justify-content.js
new file mode 100644
index 0000000..9368f99
--- /dev/null
+++ b/mixins/justify-content/justify-content.js
@@ -0,0 +1,91 @@
+/**
+ * JustifyContent (flexbox) mixin
+ */
+
+var justifyContent = function justifyContent(value) {
+ value = value || 'flex-start';
+
+ return value;
+};
+
+justifyContent.oldestWebkit = function oldestWebkitjustifyContent(value) {
+ value = value || 'start';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ }
+ else if (value == 'flex-end') {
+ value = 'end';
+ }
+ else if (value == 'space-between' || value == 'space-around') {
+ value = 'justify';
+ }
+
+ return value;
+};
+
+justifyContent.moz = function mozjustifyContent(value) {
+ value = value || 'start';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ }
+ else if (value == 'flex-end') {
+ value = 'end';
+ }
+ else if (value == 'space-between' || value == 'space-around') {
+ value = 'justify';
+ }
+
+ return value;
+};
+
+justifyContent.ms = function msjustifyContent(value) {
+ value = value || 'start';
+
+ if (value == 'flex-start') {
+ value = 'start';
+ }
+ else if (value == 'flex-end') {
+ value = 'end';
+ }
+ else if (value == 'space-between') {
+ value = 'justify';
+ }
+ else if (value == 'space-around') {
+ value = 'distribute';
+ }
+
+ return value;
+};
+
+/**
+ * Older syntax have different properties
+ */
+
+ justifyContent.result = {
+ oldestwebkit: {
+ property: '-webkit-box-pack',
+ prefixed: false
+ },
+ moz: {
+ property: '-moz-box-pack',
+ prefixed: false
+ },
+ ms: {
+ property: '-ms-flex-pack',
+ prefixed: false
+ }
+ };
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+justifyContent.vendors = ['oldestwebkit','moz','webkit','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = justifyContent;
\ No newline at end of file
diff --git a/mixins/justify-content/justify-content.md b/mixins/justify-content/justify-content.md
new file mode 100644
index 0000000..9c78b20
--- /dev/null
+++ b/mixins/justify-content/justify-content.md
@@ -0,0 +1,29 @@
+### • justify-content
+**Summary:**
+
+The CSS justify-content property defines how a browser distributes available space between and around elements when aligning flex items in the main-axis of the current line.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/j/justify-content/)**
+
+**Syntax:**
+
+Default value: flex-start
+
+ .justify-content(flex-start | flex-end | center | space-between | space-around)
+
+**Example:**
+
+ div {
+ .justify-content(flex-start);
+ }
+
+ // Result
+ div {
+ -webkit-box-pack: flex-start;
+ -moz-box-pack: start;
+ -webkit-justify-content: start;
+ -ms-flex-pack: flex-start;
+ justify-content: flex-start;
+ }
+
+
diff --git a/mixins/justify-content/test.js b/mixins/justify-content/test.js
new file mode 100644
index 0000000..080c356
--- /dev/null
+++ b/mixins/justify-content/test.js
@@ -0,0 +1,12 @@
+var assert = require('assert');
+
+describe('justify-content', function () {
+
+ /**
+ * If you want to test this code, comment 'justifyContent.result' from justify-content.js
+ */
+ // it('should return distribute value', function (done) {
+ // test.justifyContent.ms('space-around', 'distribute', done);
+ // });
+
+});
\ No newline at end of file
diff --git a/mixins/keyframes/keyframes.js b/mixins/keyframes/keyframes.js
new file mode 100644
index 0000000..53af715
--- /dev/null
+++ b/mixins/keyframes/keyframes.js
@@ -0,0 +1,134 @@
+/**
+ * Keyframes mixin
+ */
+
+var keyframes = function keyframes(value) {
+
+ // States
+ // 1 - all
+ // 2 - webkit, moz, w3c
+ // 3 - webkit, moz
+ // 4 - webkit, opera
+ // 5 - webkit, w3c
+ // 6 - webkit
+ // 7 - moz, opera, w3c
+ // 8 - moz, opera
+ // 9 - moz, w3c
+ // 10 - moz
+ // 11 - opera, w3c
+ // 12 - opera
+ // 13 - w3c
+
+ value = value || 08121991;
+ var state = '@{state}';
+ var value_temp = value;
+ if (value == 08121991) {
+ return value;
+ }
+ var prefixedProperties = ['animation', 'background-size', 'box-shadow', 'column', 'transform', 'filter'];
+
+ switch (state) {
+ case '1':
+ syntax('start', '@-webkit-keyframes', '-webkit-');
+ syntax(null, '@-moz-keyframes', '-moz-');
+ syntax(null, '@-o-keyframes', '-o-');
+ syntax('end', '@keyframes');
+ break;
+ case '2':
+ syntax('start', '@-webkit-keyframes', '-webkit-');
+ syntax(null, '@-moz-keyframes', '-moz-');
+ syntax('end', '@keyframes');
+ break;
+ case '3':
+ syntax('start', '@-webkit-keyframes', '-webkit-');
+ syntax('end', '@-moz-keyframes', '-moz-');
+ break;
+ case '4':
+ syntax('start', '@-webkit-keyframes', '-webkit-');
+ syntax('end', '@-o-keyframes', '-o-');
+ break;
+ case '5':
+ syntax('start', '@-webkit-keyframes', '-webkit-');
+ syntax('end', '@keyframes');
+ break;
+ case '6':
+ syntax('startend', '@-webkit-keyframes', '-webkit-');
+ break;
+ case '7':
+ syntax('start', '@-moz-keyframes', '-moz-');
+ syntax(null, '@-o-keyframes', '-o-');
+ syntax('end', '@keyframes');
+ break;
+ case '8':
+ syntax('start', '@-moz-keyframes', '-moz-');
+ syntax('end', '@-o-keyframes', '-o-');
+ break;
+ case '9':
+ syntax('start', '@-moz-keyframes', '-moz-');
+ syntax('end', '@keyframes');
+ break;
+ case '10':
+ syntax('startend', '@-moz-keyframes', '-moz-');
+ break;
+ case '11':
+ syntax('start', '@-o-keyframes', '-o-');
+ syntax('end', '@keyframes');
+ break;
+ case '12':
+ syntax('startend', '@-o-keyframes', '-o-');
+ break;
+ case '13':
+ syntax('startend', '@keyframes');
+ break;
+ }
+
+ function syntax(start, selector, prefix) {
+ var end = '}\n';
+ var definition = value_temp.split(/([a-zA-Z0-9-]+),/g);
+ var keyframes = selector + ' ' + definition[1] + '{';
+
+ if (prefix) {
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ definition[2] = definition[2].replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+ }
+
+ keyframes += definition[2] + end;
+
+ if (start == 'start') {
+ value = '0; } \n' + keyframes;
+ } else if (start == 'startend') {
+ value = '0; } \n' + keyframes.replace(end, '');
+ } else if (start == 'end') {
+ value = value + keyframes.replace(end, '');
+ } else {
+ value = value + keyframes;
+ }
+
+ }
+
+ return value;
+};
+
+
+/**
+ * We want totally custom result definition, because keyframes mixin is tricky one (not recommended, it's not testable)
+ */
+
+keyframes.result = 'result.less';
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+keyframes.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = keyframes;
diff --git a/mixins/keyframes/keyframes.md b/mixins/keyframes/keyframes.md
new file mode 100644
index 0000000..5bd0264
--- /dev/null
+++ b/mixins/keyframes/keyframes.md
@@ -0,0 +1,43 @@
+### • keyframes
+**Summary:**
+
+The @keyframes CSS at-rule lets authors control the intermediate steps in a CSS animation sequence by establishing keyframes (or waypoints) along the animation sequence that must be reached by certain points during the animation.
+
+LESS CSS isn't great for complicated mixin like this one, so it's little bit tricky.
+LESS CSS compiler doesn't allow to have properties in the root. It's better to understand the problem on the example.
+
+ // There is no selector
+ color: red;
+
+ SyntaxError: properties must be inside selector blocks, they cannot be in the root.
+
+ div { color: red; } // This is correct
+
+Therefore LESS Hat generates **placeholder** selector `lesshat-selector { -lh-property: 0; }` with unknown property, which browsers ignore and after that, there is actually keyframes syntax.
+
+And also because of bad architecture of LESS CSS language, keyframes definition has to be on single line.
+
+**THIS MIXIN MUST BE INTERPOLATED `~''`**
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/atrules/@keyframes)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@keyframes)**
+
+**Syntax:**
+
+ .keyframes(~', ')
+
+**Tips and tricks:**
+
+ Properties inside `` are automatically prefixed, if it's needed.
+
+**Example:**
+
+ .keyframes(~'animationName, 0%{ transform: scale(1.5); color: blue; } 100%{ transform: scale(2); color: red }');
+
+ // Result
+ lesshat-selector {-lh-property: 0; }
+ @-webkit-keyframes animationName{ 0%{ -webkit-transform: scale(1.5); color: blue; } 100%{ -webkit-transform: scale(2); color: red }}
+ @-moz-keyframes animationName{ 0%{ -moz-transform: scale(1.5); color: blue; } 100%{ -moz-transform: scale(2); color: red }}
+ @-o-keyframes animationName{ 0%{ -o-transform: scale(1.5); color: blue; } 100%{ -o-transform: scale(2); color: red }}
+ @keyframes animationName{ 0%{ transform: scale(1.5); color: blue; } 100%{ transform: scale(2); color: red };}
+
+
diff --git a/mixins/keyframes/result.less b/mixins/keyframes/result.less
new file mode 100644
index 0000000..e6d7dc2
--- /dev/null
+++ b/mixins/keyframes/result.less
@@ -0,0 +1,31 @@
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:2; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:3; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:4; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:5; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:6; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:7; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:8; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:9; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:10; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:11; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:12; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and (@opera_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:12; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@webkit_local = true) and not (@moz_local = true) and not (@opera_local = true) and not (@w3c_local = true) {}
+
+ .inception(@arguments);
diff --git a/mixins/opacity/opacity.js b/mixins/opacity/opacity.js
new file mode 100644
index 0000000..33c9ef3
--- /dev/null
+++ b/mixins/opacity/opacity.js
@@ -0,0 +1,49 @@
+/**
+ * Opacity mixin
+ */
+
+var opacity = function opacity(value) {
+ value = value || '1';
+
+ return value;
+};
+
+opacity.ms = function opacity(value) {
+ value = value || 'filter: alpha(opacity=100)';
+
+ return 'alpha(opacity=' + Math.floor(value * 100) + ')';
+};
+
+/**
+ * Result settings
+ */
+
+opacity.result = {
+ ms: {
+ property: 'filter',
+ prefixed: false,
+ }
+}
+
+/**
+ * PrependCSS
+ */
+
+opacity.prependCSS = {
+ ms: 'zoom: 1',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+opacity.vendors = ['ms', 'webkit', 'moz'];
+
+// Don't want ms filter syntax by default
+opacity.vendors.ms = false;
+
+/**
+ * Export mixin
+ */
+
+module.exports = opacity;
\ No newline at end of file
diff --git a/mixins/opacity/opacity.md b/mixins/opacity/opacity.md
new file mode 100644
index 0000000..b3879e4
--- /dev/null
+++ b/mixins/opacity/opacity.md
@@ -0,0 +1,33 @@
+### • opacity
+**Summary:**
+
+The opacity CSS property specifies the transparency of an element, that is, the degree to which the background behind the element is overlaid.
+
+This is not shorthand method for filter opacity.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/opacity)**
+
+**Syntax:**
+
+Default value: 1
+
+ .opacity()
+
+**Tips and tricks:**
+
+ You can enable old filter syntax for IE6, just set `@ms_local: true`.
+
+**Example:**
+
+ div {
+ .opacity(.5);
+ }
+
+ // Result
+ div {
+ -webkit-opacity: 0.5;
+ -moz-opacity: 0.5;
+ opacity: 0.5;
+ }
+
+
diff --git a/mixins/opacity/test.js b/mixins/opacity/test.js
new file mode 100644
index 0000000..a4cc386
--- /dev/null
+++ b/mixins/opacity/test.js
@@ -0,0 +1,15 @@
+var assert = require('assert');
+
+describe('opacity', function() {
+
+ it('should return the same value', function(done) {
+ test.opacity('0.5', '0.5', done);
+ });
+
+ // Doesn't work now, because we set opacity.vendors.ms = false
+ // it('should return filter property for IE', function(done) {
+ // test.resultProperty = 'filter';
+ // test.opacity('0.5', 'alpha(opacity=50)', done);
+ // });
+
+});
\ No newline at end of file
diff --git a/mixins/order/order.js b/mixins/order/order.js
new file mode 100644
index 0000000..d6b11a9
--- /dev/null
+++ b/mixins/order/order.js
@@ -0,0 +1,40 @@
+/**
+ * Order mixin
+ */
+
+var order = function order(value) {
+ value = value || '0';
+
+ return value;
+};
+
+/**
+ * Older syntax have different properties
+ */
+
+order.result = {
+ olderwebkit: {
+ property: '-webkit-box-ordinal-group',
+ prefixed: false
+ },
+ moz: {
+ property: '-moz-box-ordinal-group',
+ prefixed: false
+ },
+ ms: {
+ property: '-ms-flex-order',
+ prefixed: false
+ }
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+order.vendors = ['olderwebkit', 'moz', 'ms', 'webkit'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = order;
\ No newline at end of file
diff --git a/mixins/order/order.md b/mixins/order/order.md
new file mode 100644
index 0000000..af5d9c2
--- /dev/null
+++ b/mixins/order/order.md
@@ -0,0 +1,29 @@
+### • order
+**Summary:**
+
+The CSS order property specifies the order used to lay out flex items in their flex container.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/order)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/o/order/)**
+
+**Syntax:**
+
+Default value: 0
+
+ .order()
+
+**Example:**
+
+ div {
+ .order(1);
+ }
+
+ // Result
+ div {
+ -webkit-box-ordinal-group: 1;
+ -moz-box-ordinal-group: 1;
+ -ms-flex-order: 1;
+ -webkit-order: 1;
+ order: 1;
+ }
+
+
diff --git a/mixins/order/test.js b/mixins/order/test.js
new file mode 100644
index 0000000..491da5a
--- /dev/null
+++ b/mixins/order/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('order', function () {
+
+ it('should return the same value', function (done) {
+ test.order('1', '1', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/perspective-origin/perspective-origin.js b/mixins/perspective-origin/perspective-origin.js
new file mode 100644
index 0000000..9927435
--- /dev/null
+++ b/mixins/perspective-origin/perspective-origin.js
@@ -0,0 +1,34 @@
+/**
+ * PerspectiveOrigin mixin
+ */
+
+var perspectiveOrigin = function perspectiveOrigin(value) {
+ value = value || '50% 50%';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+perspectiveOrigin.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = perspectiveOrigin;
diff --git a/mixins/perspective-origin/perspective-origin.md b/mixins/perspective-origin/perspective-origin.md
new file mode 100644
index 0000000..ee40b94
--- /dev/null
+++ b/mixins/perspective-origin/perspective-origin.md
@@ -0,0 +1,31 @@
+### • perspective-origin
+**Summary:**
+
+The perspective-origin CSS property determines the position the viewer is looking at. It is used as the vanishing point by the perspective property.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/perspective-origin)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/p/perspective-origin/)**
+
+**Syntax:**
+
+Default value: 50% 50%
+
+ .perspective-origin( | | constants | inherit)
+
+**Tips and tricks:**
+
+ If you omit units, `perspective-origin` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .perspective-origin(top left);
+ }
+
+ // Result
+ div {
+ -moz-perspective-origin: top left;
+ -webkit-perspective-origin: top left;
+ perspective-origin: top left;
+ }
+
+
diff --git a/mixins/perspective-origin/test.js b/mixins/perspective-origin/test.js
new file mode 100644
index 0000000..4a643e5
--- /dev/null
+++ b/mixins/perspective-origin/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('perspective-origin', function() {
+
+ it('should return the same value', function(done) {
+ test.perspectiveOrigin('top left', 'top left', done);
+ });
+
+ it('should add percentage units and return the same value', function(done) {
+ test.perspectiveOrigin('50 50', '50% 50%', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/perspective/perspective.js b/mixins/perspective/perspective.js
new file mode 100644
index 0000000..9972d57
--- /dev/null
+++ b/mixins/perspective/perspective.js
@@ -0,0 +1,30 @@
+/**
+ * Perspective mixin
+ */
+
+var perspective = function perspective(value) {
+ value = value || 'none';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+perspective.vendors = ['webkit', 'moz'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = perspective;
diff --git a/mixins/perspective/perspective.md b/mixins/perspective/perspective.md
new file mode 100644
index 0000000..9936c58
--- /dev/null
+++ b/mixins/perspective/perspective.md
@@ -0,0 +1,31 @@
+### • perspective
+**Summary:**
+
+The perspective CSS property determines the distance between the z=0 plane and the user in order to give to the 3D-positioned element some perspective.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/perspective)**, **[CSS-Tricks](http://css-tricks.com/almanac/properties/p/perspective/)**
+
+**Syntax:**
+
+Default value: none
+
+ .perspective(none | )
+
+**Tips and tricks:**
+
+ If you omit units, `perspective` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .perspective(1000);
+ }
+
+ // Result
+ div {
+ -moz-perspective: 1000px;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
+ }
+
+
diff --git a/mixins/perspective/test.js b/mixins/perspective/test.js
new file mode 100644
index 0000000..753ffff
--- /dev/null
+++ b/mixins/perspective/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('perspective', function() {
+
+ it('should return the same value', function(done) {
+ test.perspective('500px', '500px', done);
+ });
+
+ it('should add default unit and return the same value', function(done) {
+ test.perspective('1000', '1000px', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/placeholder/placeholder.less b/mixins/placeholder/placeholder.less
new file mode 100644
index 0000000..b0f1d15
--- /dev/null
+++ b/mixins/placeholder/placeholder.less
@@ -0,0 +1,31 @@
+.placeholder(@color:hotpink, @element: 08121991) {
+ .inception (@arguments) when not (@element = 08121991) {
+ @{element}::-webkit-input-placeholder {
+ color: @color;
+ }
+ @{element}:-moz-placeholder {
+ color: @color;
+ }
+ @{element}::-moz-placeholder {
+ color: @color;
+ }
+ @{element}:-ms-input-placeholder {
+ color: @color;
+ }
+ }
+ .inception (@arguments) when (@element = 08121991) {
+ &::-webkit-input-placeholder {
+ color: @color;
+ }
+ &:-moz-placeholder {
+ color: @color;
+ }
+ &::-moz-placeholder {
+ color: @color;
+ }
+ &:-ms-input-placeholder {
+ color: @color;
+ }
+ }
+ .inception(@arguments);
+}
diff --git a/mixins/placeholder/placeholder.md b/mixins/placeholder/placeholder.md
new file mode 100644
index 0000000..b6b5f12
--- /dev/null
+++ b/mixins/placeholder/placeholder.md
@@ -0,0 +1,67 @@
+### • placeholder
+**Summary:**
+
+Placeholder is the short hint displayed in the input field before the user clicked to it.
+Default placeholder text in inputs has a light gray color (so far).
+
+Resources: **[CSS-Tricks](http://css-tricks.com/snippets/css/style-placeholder-text/)**
+
+**Syntax:**
+
+ .placeholder(, [])
+
+**Example:**
+
+ div {
+ .placeholder(#666666);
+ }
+
+ // Result
+ div::-webkit-input-placeholder {
+ color: #666666;
+ }
+ div:-moz-placeholder {
+ color: #666666;
+ }
+ div::-moz-placeholder {
+ color: #666666;
+ }
+ div:-ms-input-placeholder {
+ color: #666666;
+ }
+
+ // In root (outside of selectors)
+ .placeholder(#333333);
+
+ // Result
+ ::-webkit-input-placeholder {
+ color: #666666;
+ }
+ :-moz-placeholder {
+ color: #666666;
+ }
+ ::-moz-placeholder {
+ color: #666666;
+ }
+ :-ms-input-placeholder {
+ color: #666666;
+ }
+
+ // In root (outside of selectors)
+ .placeholder(#333333, textarea);
+
+ // Result
+ textarea::-webkit-input-placeholder {
+ color: #666666;
+ }
+ textarea:-moz-placeholder {
+ color: #666666;
+ }
+ textarea::-moz-placeholder {
+ color: #666666;
+ }
+ textarea:-ms-input-placeholder {
+ color: #666666;
+ }
+
+
diff --git a/mixins/properties.doc b/mixins/properties.doc
new file mode 100644
index 0000000..7ba35c9
--- /dev/null
+++ b/mixins/properties.doc
@@ -0,0 +1,8 @@
+mixin = fn
+mixin[vendor] = fn
+mixin.alias = string|[...]
+mixin.vendors = []
+mixin.vendors[vendor] = boolean
+mixin.result = { property: '...', value: '...{{ result| escape_result }}...', prefixed: boolean, strip: '...', [vendor]: { ... } } | string (less file url)
+mixin.appendCSS = { all: '...', [vendor]: '...' }
+mixin.prependCSS = { all: '...', [vendor]: '...' }
diff --git a/mixins/rotate/rotate.js b/mixins/rotate/rotate.js
new file mode 100644
index 0000000..f6d3e6f
--- /dev/null
+++ b/mixins/rotate/rotate.js
@@ -0,0 +1,38 @@
+/**
+ * Rotate mixin
+ */
+
+var rotate = function rotate(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+rotate.result = {
+ property: 'transform',
+ value: 'rotate({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+rotate.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = rotate;
diff --git a/mixins/rotate/rotate.md b/mixins/rotate/rotate.md
new file mode 100644
index 0000000..157542d
--- /dev/null
+++ b/mixins/rotate/rotate.md
@@ -0,0 +1,32 @@
+### • rotate
+**Summary:**
+
+Rotates the element clockwise around its origin by the specified angle.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotate)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotate()
+
+**Tips and tricks:**
+
+ If you omit units, `rotate` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotate(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -opera-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+ }
+
diff --git a/mixins/rotate/test.js b/mixins/rotate/test.js
new file mode 100644
index 0000000..955f8c7
--- /dev/null
+++ b/mixins/rotate/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('rotate', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'transform';
+ test.rotate('20', 'rotate(20deg)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/rotate3d/rotate3d.js b/mixins/rotate3d/rotate3d.js
new file mode 100644
index 0000000..9100d9d
--- /dev/null
+++ b/mixins/rotate3d/rotate3d.js
@@ -0,0 +1,33 @@
+/**
+ * Rotate3d mixin
+ */
+
+var rotate3d = function rotate3d(value) {
+ value = value || '0, 0, 0, 0';
+ value = value.replace(/,\s*\d+$/, function(match) {
+ return match + 'deg';
+ });
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+rotate3d.result = {
+ property: 'transform',
+ value: 'rotate3d({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+rotate3d.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = rotate3d;
\ No newline at end of file
diff --git a/mixins/rotate3d/rotate3d.md b/mixins/rotate3d/rotate3d.md
new file mode 100644
index 0000000..228fec8
--- /dev/null
+++ b/mixins/rotate3d/rotate3d.md
@@ -0,0 +1,33 @@
+### • rotate3d
+**Summary:**
+
+The rotate3d()CSS function defines a transformation that moves the element around a fixed axe without deforming it.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 0, 0, 0, 0
+
+ .rotate3d(, , , )
+
+**Tips and tricks:**
+
+ If you omit angle unit, `rotate3d` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotate3d(1, 0, 0, 50);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotate3d(1, 0, 0, 50deg);
+ -moz-transform: rotate3d(1, 0, 0, 50deg);
+ -opera-transform: rotate3d(1, 0, 0, 50deg);
+ -ms-transform: rotate3d(1, 0, 0, 50deg);
+ transform: rotate3d(1, 0, 0, 50deg);
+ }
+
+
diff --git a/mixins/rotate3d/test.js b/mixins/rotate3d/test.js
new file mode 100644
index 0000000..6573ace
--- /dev/null
+++ b/mixins/rotate3d/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('rotate3d', function() {
+
+ it('should add unit for last number and return the value', function(done) {
+ test.resultProperty = 'transform';
+ test.rotate3d('1, 0, 0, 50', 'rotate3d(1, 0, 0, 50deg)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/rotateX/rotateX.js b/mixins/rotateX/rotateX.js
new file mode 100644
index 0000000..687ad54
--- /dev/null
+++ b/mixins/rotateX/rotateX.js
@@ -0,0 +1,38 @@
+/**
+ * RotateX mixin
+ */
+
+var rotateX = function rotateX(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+rotateX.result = {
+ property: 'transform',
+ value: 'rotateX({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+rotateX.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = rotateX;
diff --git a/mixins/rotateX/rotateX.md b/mixins/rotateX/rotateX.md
new file mode 100644
index 0000000..aae2f49
--- /dev/null
+++ b/mixins/rotateX/rotateX.md
@@ -0,0 +1,32 @@
+### • rotateX
+**Summary:**
+
+The rotateX() CSS function defines a transformation that moves the element around the abscissa without deforming it.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotateX)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotateX()
+
+**Tips and tricks:**
+
+ If you omit units, `rotateX` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotateX(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotateX(45deg);
+ -moz-transform: rotateX(45deg);
+ -opera-transform: rotateX(45deg);
+ -ms-transform: rotateX(45deg);
+ transform: rotateX(45deg);
+ }
+
diff --git a/mixins/rotateX/test.js b/mixins/rotateX/test.js
new file mode 100644
index 0000000..d6b8d5e
--- /dev/null
+++ b/mixins/rotateX/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('rotateX', function() {
+
+ it('should return value with units', function(done) {
+ test.resultProperty = 'transform';
+ test.rotateX('20', 'rotateX(20deg)', done);
+ });
+
+});
diff --git a/mixins/rotateY/rotateY.js b/mixins/rotateY/rotateY.js
new file mode 100644
index 0000000..29ea73a
--- /dev/null
+++ b/mixins/rotateY/rotateY.js
@@ -0,0 +1,38 @@
+/**
+ * RotateY mixin
+ */
+
+var rotateY = function rotateY(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+rotateY.result = {
+ property: 'transform',
+ value: 'rotateY({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+rotateY.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = rotateY;
diff --git a/mixins/rotateY/rotateY.md b/mixins/rotateY/rotateY.md
new file mode 100644
index 0000000..1fec1bc
--- /dev/null
+++ b/mixins/rotateY/rotateY.md
@@ -0,0 +1,32 @@
+### • rotateY
+**Summary:**
+
+The rotateY() CSS function defines a transformation that moves the element around the ordinate without deforming it.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotateY)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotateY()
+
+**Tips and tricks:**
+
+ If you omit units, `rotateY` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotateY(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotateY(45deg);
+ -moz-transform: rotateY(45deg);
+ -opera-transform: rotateY(45deg);
+ -ms-transform: rotateY(45deg);
+ transform: rotateY(45deg);
+ }
+
diff --git a/mixins/rotateY/test.js b/mixins/rotateY/test.js
new file mode 100644
index 0000000..7bc8202
--- /dev/null
+++ b/mixins/rotateY/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('rotateY', function() {
+
+ it('should return value with units', function(done) {
+ test.resultProperty = 'transform';
+ test.rotateY('20', 'rotateY(20deg)', done);
+ });
+
+});
diff --git a/mixins/rotateZ/rotateZ.js b/mixins/rotateZ/rotateZ.js
new file mode 100644
index 0000000..d425b41
--- /dev/null
+++ b/mixins/rotateZ/rotateZ.js
@@ -0,0 +1,38 @@
+/**
+ * RotateZ mixin
+ */
+
+var rotateZ = function rotateZ(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+rotateZ.result = {
+ property: 'transform',
+ value: 'rotateZ({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+rotateZ.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = rotateZ;
diff --git a/mixins/rotateZ/rotateZ.md b/mixins/rotateZ/rotateZ.md
new file mode 100644
index 0000000..a672b1d
--- /dev/null
+++ b/mixins/rotateZ/rotateZ.md
@@ -0,0 +1,33 @@
+### • rotateZ
+**Summary:**
+
+The rotateZ() CSS function defines a transformation that moves the element around the z-axis without deforming it.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#rotateZ)**
+
+**Syntax:**
+
+Default value: 0
+
+ .rotateZ()
+
+**Tips and tricks:**
+
+ If you omit units, `rotateZ` adds `deg` automatically.
+
+**Example:**
+
+ div {
+ .rotateZ(45);
+ }
+
+ // Result
+ div {
+ -webkit-transform: rotateZ(45deg);
+ -moz-transform: rotateZ(45deg);
+ -opera-transform: rotateZ(45deg);
+ -ms-transform: rotateZ(45deg);
+ transform: rotateZ(45deg);
+ }
+
+
diff --git a/mixins/rotateZ/test.js b/mixins/rotateZ/test.js
new file mode 100644
index 0000000..f6168b8
--- /dev/null
+++ b/mixins/rotateZ/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('rotateZ', function() {
+
+ it('should return value with units', function(done) {
+ test.resultProperty = 'transform';
+ test.rotateZ('20', 'rotateZ(20deg)', done);
+ });
+
+});
diff --git a/mixins/saturate/saturate.js b/mixins/saturate/saturate.js
new file mode 100644
index 0000000..062a49e
--- /dev/null
+++ b/mixins/saturate/saturate.js
@@ -0,0 +1,38 @@
+/**
+ * Saturate mixin
+ */
+
+var saturate = function saturate(value) {
+ value = value || '100%';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+saturate.result = {
+ property: 'filter',
+ value: '~"saturate({{ escape_result }})"',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+saturate.vendors = ['webkit','moz','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = saturate;
diff --git a/mixins/saturate/saturate.md b/mixins/saturate/saturate.md
new file mode 100644
index 0000000..24cfa84
--- /dev/null
+++ b/mixins/saturate/saturate.md
@@ -0,0 +1,32 @@
+### • saturate
+ **Summary:**
+
+ Saturates the input image. The value of ‘amount’ defines the proportion of the conversion.
+
+ Resources: **MDN **
+
+ **Syntax:**
+
+ Default value: 100%
+
+ .saturate()
+
+ **Tips and tricks:**
+
+ If you omit units, `saturate` adds `%` automatically.
+
+ **Example:**
+
+ div {
+ .saturate(45);
+ }
+
+ // Result
+ div {
+ -webkit-filter: saturate(45deg);
+ -moz-filter: saturate(45deg);
+ -ms-filter: saturate(45deg);
+ filter: saturate(45deg);
+ }
+
+
diff --git a/mixins/saturate/test.js b/mixins/saturate/test.js
new file mode 100644
index 0000000..ff2fe06
--- /dev/null
+++ b/mixins/saturate/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('saturate', function () {
+
+ it('should add default units and return the value', function (done) {
+ test.resultProperty = 'filter';
+ test.saturate('50', 'saturate(50%)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/scale/scale.js b/mixins/scale/scale.js
new file mode 100644
index 0000000..a487d8e
--- /dev/null
+++ b/mixins/scale/scale.js
@@ -0,0 +1,30 @@
+/**
+ * Scale mixin
+ */
+
+var scale = function scale(value) {
+ value = value || '1';
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+scale.result = {
+ property: 'transform',
+ value: 'scale({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+scale.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = scale;
\ No newline at end of file
diff --git a/mixins/scale/scale.md b/mixins/scale/scale.md
new file mode 100644
index 0000000..b49ac38
--- /dev/null
+++ b/mixins/scale/scale.md
@@ -0,0 +1,28 @@
+### • scale
+**Summary:**
+
+Specifies a 2D scaling operation described by [sx, sy]. If sy isn't specified, it is assumed to be equal to sx.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#scale)**
+
+**Syntax:**
+
+Default value: 1
+
+ .scale([, ])
+
+**Example:**
+
+ div {
+ .scale(2);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scale(2);
+ -moz-transform: scale(2);
+ -opera-transform: scale(2);
+ -ms-transform: scale(2);
+ transform: scale(2);
+ }
+
diff --git a/mixins/scale/test.js b/mixins/scale/test.js
new file mode 100644
index 0000000..5767445
--- /dev/null
+++ b/mixins/scale/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('scale', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'transform';
+ test.scale('1.5', 'scale(1.5)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/scale3d/scale3d.js b/mixins/scale3d/scale3d.js
new file mode 100644
index 0000000..46580f9
--- /dev/null
+++ b/mixins/scale3d/scale3d.js
@@ -0,0 +1,30 @@
+/**
+ * Scale3d mixin
+ */
+
+var scale3d = function scale3d(value) {
+ value = value || '1, 1, 1';
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+scale3d.result = {
+ property: 'transform',
+ value: 'scale3d({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+scale3d.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = scale3d;
\ No newline at end of file
diff --git a/mixins/scale3d/scale3d.md b/mixins/scale3d/scale3d.md
new file mode 100644
index 0000000..a06c576
--- /dev/null
+++ b/mixins/scale3d/scale3d.md
@@ -0,0 +1,29 @@
+### • scale3d
+**Summary:**
+
+The scale3d() CSS function modifies the size of an element. Because the amount of scaling is defined by a vector, it can resize different dimensions at different scales.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 1, 1, 1
+
+ .scale3d(, , )
+
+**Example:**
+
+ div {
+ .scale3d(1.5, .2, 3);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scale3d(1.5, 0.2, 3);
+ -moz-transform: scale3d(1.5, 0.2, 3);
+ -opera-transform: scale3d(1.5, 0.2, 3);
+ -ms-transform: scale3d(1.5, 0.2, 3);
+ transform: scale3d(1.5, 0.2, 3);
+ }
+
+
diff --git a/mixins/scale3d/test.js b/mixins/scale3d/test.js
new file mode 100644
index 0000000..855a04c
--- /dev/null
+++ b/mixins/scale3d/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('scale3d', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'transform';
+ test.scale3d('1.5, .2, 3', 'scale3d(1.5, 0.2, 3)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/scaleX/scaleX.js b/mixins/scaleX/scaleX.js
new file mode 100644
index 0000000..9997b13
--- /dev/null
+++ b/mixins/scaleX/scaleX.js
@@ -0,0 +1,30 @@
+/**
+ * ScaleX mixin
+ */
+
+var scaleX = function scaleX(value) {
+ value = value || '1';
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+scaleX.result = {
+ property: 'transform',
+ value: 'scaleX({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+scaleX.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = scaleX;
\ No newline at end of file
diff --git a/mixins/scaleX/scaleX.md b/mixins/scaleX/scaleX.md
new file mode 100644
index 0000000..27f777e
--- /dev/null
+++ b/mixins/scaleX/scaleX.md
@@ -0,0 +1,28 @@
+### • scaleX
+**Summary:**
+
+Specifies a scale operation using the vector [sx, 1].
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#scaleX)**
+
+**Syntax:**
+
+Default value: 1
+
+ .scaleX()
+
+**Example:**
+
+ div {
+ .scaleX(1.5);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scaleX(1.5);
+ -moz-transform: scaleX(1.5);
+ -opera-transform: scaleX(1.5);
+ -ms-transform: scaleX(1.5);
+ transform: scaleX(1.5);
+ }
+
diff --git a/mixins/scaleX/test.js b/mixins/scaleX/test.js
new file mode 100644
index 0000000..c4ef6bb
--- /dev/null
+++ b/mixins/scaleX/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('scaleX', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'transform';
+ test.scaleX('1.5', 'scaleX(1.5)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/scaleY/scaleY.js b/mixins/scaleY/scaleY.js
new file mode 100644
index 0000000..d3787e0
--- /dev/null
+++ b/mixins/scaleY/scaleY.js
@@ -0,0 +1,30 @@
+/**
+ * ScaleY mixin
+ */
+
+var scaleY = function scaleY(value) {
+ value = value || '1';
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+scaleY.result = {
+ property: 'transform',
+ value: 'scaleY({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+scaleY.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = scaleY;
\ No newline at end of file
diff --git a/mixins/scaleY/scaleY.md b/mixins/scaleY/scaleY.md
new file mode 100644
index 0000000..eefe0c3
--- /dev/null
+++ b/mixins/scaleY/scaleY.md
@@ -0,0 +1,28 @@
+### • scaleY
+**Summary:**
+
+Specifies a scale operation using the vector [1, sy].
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#scaleY)**
+
+**Syntax:**
+
+Default value: 1
+
+ .scaleY()
+
+**Example:**
+
+ div {
+ .scaleY(1.5);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scaleY(1.5);
+ -moz-transform: scaleY(1.5);
+ -opera-transform: scaleY(1.5);
+ -ms-transform: scaleY(1.5);
+ transform: scaleY(1.5);
+ }
+
diff --git a/mixins/scaleY/test.js b/mixins/scaleY/test.js
new file mode 100644
index 0000000..62dfda6
--- /dev/null
+++ b/mixins/scaleY/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('scaleY', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'transform';
+ test.scaleY('1.5', 'scaleY(1.5)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/scaleZ/scaleZ.js b/mixins/scaleZ/scaleZ.js
new file mode 100644
index 0000000..2dd25e0
--- /dev/null
+++ b/mixins/scaleZ/scaleZ.js
@@ -0,0 +1,30 @@
+/**
+ * ScaleZ mixin
+ */
+
+var scaleZ = function scaleZ(value) {
+ value = value || '1';
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+scaleZ.result = {
+ property: 'transform',
+ value: 'scaleZ({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+scaleZ.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = scaleZ;
\ No newline at end of file
diff --git a/mixins/scaleZ/scaleZ.md b/mixins/scaleZ/scaleZ.md
new file mode 100644
index 0000000..3d31c05
--- /dev/null
+++ b/mixins/scaleZ/scaleZ.md
@@ -0,0 +1,29 @@
+### • scaleZ
+**Summary:**
+
+The scaleZ() CSS function modifies the z-coordinate of each element point by a constant facto, except if this scale factor is 1, in which case the function is the identity transform.
+
+Resources: **MDN **
+
+**Syntax:**
+
+Default value: 1
+
+ .scaleZ()
+
+**Example:**
+
+ div {
+ .scaleZ(1.5);
+ }
+
+ // Result
+ div {
+ -webkit-transform: scaleZ(1.5);
+ -moz-transform: scaleZ(1.5);
+ -opera-transform: scaleZ(1.5);
+ -ms-transform: scaleZ(1.5);
+ transform: scaleZ(1.5);
+ }
+
+
diff --git a/mixins/scaleZ/test.js b/mixins/scaleZ/test.js
new file mode 100644
index 0000000..00c76d8
--- /dev/null
+++ b/mixins/scaleZ/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('scaleZ', function() {
+
+ it('should return the same value', function(done) {
+ test.resultProperty = 'transform';
+ test.scaleZ('1.5', 'scaleZ(1.5)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/selection/result.less b/mixins/selection/result.less
new file mode 100644
index 0000000..61a9ad4
--- /dev/null
+++ b/mixins/selection/result.less
@@ -0,0 +1,11 @@
+ @state: 69; // Yeah totally random number
+
+ .inception (@arguments) when (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state: 1; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@moz_local = true) and (@w3c_local = true) and not (@process = 08121991) { @state:2; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when not (@moz_local = true) and (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when (@moz_local = true) and not (@w3c_local = true) and not (@process = 08121991) { @state:3; lesshat-selector { -lh-property: @process; } }
+ .inception (@arguments) when (@moz_local = true) and not (@w3c_local = true) and (@process = 08121991) {}
+ .inception (@arguments) when not (@moz_local = true) and not (@w3c_local = true) {}
+
+ .inception(@arguments);
diff --git a/mixins/selection/selection.js b/mixins/selection/selection.js
new file mode 100644
index 0000000..f195330
--- /dev/null
+++ b/mixins/selection/selection.js
@@ -0,0 +1,68 @@
+/**
+ * Selection mixin
+ */
+
+var selection = function selection(value) {
+ // States
+ // 1 - all
+ // 2 - w3c
+ // 3 - moz
+
+ value = value || 08121991;
+ var state = '@{state}';
+ var value_temp = value;
+ if (value == 08121991) {
+ return value;
+ }
+
+ switch (state) {
+ case '1':
+ syntax('start', '::selection');
+ syntax('end', '::-moz-selection');
+ break;
+ case '2':
+ syntax('startend', '::selection');
+ break;
+ case '3':
+ syntax('startend', '::-moz-selection');
+ break;
+ }
+
+ function syntax(start, selector) {
+ var end = '}\n';
+ var definition = value_temp.split(',');
+ var syntax = (definition[1] || '') + selector + '{' + definition[0] + end;
+
+ if (start == 'start') {
+ value = '0; } \n' + syntax;
+ } else if (start == 'startend') {
+ value = '0; } \n' + syntax.replace(end, '');
+ } else if (start == 'end') {
+ value = value + syntax.replace(end, '');
+ } else {
+ value = value + syntax;
+ }
+ }
+
+ value = value.replace(/;$/g,'');
+
+ return value;
+};
+
+/**
+ * We want totally custom result definition, because selection mixin is tricky one (not recommended, it's not testable)
+ */
+
+selection.result = 'result.less';
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+selection.vendors = ['moz'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = selection;
diff --git a/mixins/selection/selection.md b/mixins/selection/selection.md
new file mode 100644
index 0000000..a6b7d28
--- /dev/null
+++ b/mixins/selection/selection.md
@@ -0,0 +1,35 @@
+### • selection
+**Summary:**
+
+The ::selection CSS pseudo-element applies rules to the portion of a document that has been highlighted.
+LESS CSS compiler doesn't allow to have properties in the root. It's better to understand the problem on the example.
+
+ // There is no selector
+ color: red;
+
+ SyntaxError: properties must be inside selector blocks, they cannot be in the root.
+
+ div { color: red; } // This is correct
+
+Therefore LESS Hat generates **placeholder** selector `lesshat-selector { -lh-property: 0; }` with unknown property, which browsers ignore and after that, there is actually selection syntax.
+
+**THIS MIXIN MUST BE INTERPOLATED `~''`**
+
+Use this mixin outside of CSS selectors
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/::selection)**
+
+**Syntax:**
+
+ .selection([, ])
+
+**Example:**
+
+ .selection(~'color: blue; background: red');
+
+ // Result
+ lesshat-selector {-lh-property: 0;}
+ ::selection{color: blue; background: red}
+ ::-moz-selection{color: blue; background: red;}
+
+
diff --git a/mixins/sepia/sepia.js b/mixins/sepia/sepia.js
new file mode 100644
index 0000000..f620772
--- /dev/null
+++ b/mixins/sepia/sepia.js
@@ -0,0 +1,38 @@
+/**
+ * Sepia mixin
+ */
+
+var sepia = function sepia(value) {
+ value = value || '100%';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+sepia.result = {
+ property: 'filter',
+ value: 'sepia({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+sepia.vendors = ['webkit','moz','ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = sepia;
diff --git a/mixins/sepia/sepia.md b/mixins/sepia/sepia.md
new file mode 100644
index 0000000..b38f178
--- /dev/null
+++ b/mixins/sepia/sepia.md
@@ -0,0 +1,29 @@
+### • sepia
+**Summary:**
+
+Converts the input image to Instagram like effect.
+
+Resources: **MDN **
+
+**Syntax:**
+
+ .sepia()
+
+**Tips and tricks:**
+
+ If you omit units, `sepia` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .sepia(50);
+ }
+
+ // Result
+ div {
+ -webkit-filter: sepia(50%);
+ -moz-filter: sepia(50%);
+ filter: sepia(50%);
+ }
+
+
diff --git a/mixins/sepia/test.js b/mixins/sepia/test.js
new file mode 100644
index 0000000..0511153
--- /dev/null
+++ b/mixins/sepia/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('sepia', function () {
+
+ it('should add default units and return the value', function (done) {
+ test.resultProperty = 'filter';
+ test.sepia('50', 'sepia(50%)', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/size/size.less b/mixins/size/size.less
new file mode 100644
index 0000000..4f4b42b
--- /dev/null
+++ b/mixins/size/size.less
@@ -0,0 +1,41 @@
+.size(@square) {
+ @unit: 'px';
+ .process(@square) when (ispixel(@square)), (isem(@square)), (ispercentage(@square)) {
+ width: @square;
+ height: @square;
+ }
+
+ .process(@square) when not (ispixel(@square)) and not (isem(@square)) and not (ispercentage(@square)) {
+ width: ~`@{square} + @{unit}`;
+ height: ~`@{square} + @{unit}`;
+ }
+
+ .process(@square);
+
+}
+
+.size(@width, @height) {
+ @unit: 'px';
+ .process(@width, @height) when (ispixel(@width)) and (ispixel(@height)), (isem(@width)) and (isem(@height)), (ispercentage(@width)) and (ispercentage(@height)), (ispixel(@width)) and (ispercentage(@height)), (ispixel(@width)) and (isem(@height)), (ispercentage(@width)) and (ispixel(@height)), (ispercentage(@width)) and (isem(@height)), (isem(@width)) and (ispixel(@height)), (isem(@width)) and (ispercentage(@height)) {
+ width: @width;
+ height: @height;
+ }
+
+ .process(@width, @height) when not (ispixel(@width)) and not (ispixel(@height)) and not (ispercentage(@width)) and not (ispercentage(@height)) and not (isem(@width)) and not (isem(@height)) {
+ width: ~`@{width} + @{unit}`;
+ height: ~`@{height} + @{unit}`;
+ }
+
+ .process(@width, @height) when not (ispixel(@width)) and not (ispercentage(@width)) and not (isem(@width)) {
+ width: ~`@{width} + @{unit}`;
+ height: @height;
+ }
+
+ .process(@width, @height) when not (ispixel(@height)) and not (ispercentage(@height)) and not (isem(@height)) {
+ width: @width;
+ height: ~`@{height} + @{unit}`;
+ }
+
+ .process(@width, @height);
+
+}
diff --git a/mixins/size/size.md b/mixins/size/size.md
new file mode 100644
index 0000000..ea0f818
--- /dev/null
+++ b/mixins/size/size.md
@@ -0,0 +1,27 @@
+### • size
+**Summary:**
+
+This is helper mixin for fast dimensions setup.
+
+**Syntax:**
+
+ .size(, [])
+
+**Tips and tricks:**
+
+ When you call mixin with only one argument, second will be the same.
+ Also you can omit units and `size` adds it automatically.
+
+**Example:**
+
+ div {
+ .size(50);
+ }
+
+ // Result
+ div {
+ width: 50px;
+ height: 50px;
+ }
+
+
diff --git a/mixins/skew/skew.js b/mixins/skew/skew.js
new file mode 100644
index 0000000..2df560a
--- /dev/null
+++ b/mixins/skew/skew.js
@@ -0,0 +1,38 @@
+/**
+ * Skew mixin
+ */
+
+var skew = function skew(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+skew.result = {
+ property: 'transform',
+ value: 'skew({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+skew.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = skew;
diff --git a/mixins/skew/skew.md b/mixins/skew/skew.md
new file mode 100644
index 0000000..ec70ad4
--- /dev/null
+++ b/mixins/skew/skew.md
@@ -0,0 +1,32 @@
+### • skew
+**Summary:**
+
+Skews the element along the X and Y axes by the specified angles. If ay isn't provided, no skew is performed on the Y axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#skew)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .skew([, ])
+
+**Tips and tricks:**
+
+ If you omit units, `skew` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .skew(20, 30);
+ }
+
+ // Result
+ div {
+ -webkit-transform: skew(20deg, 30deg);
+ -moz-transform: skew(20deg, 30deg);
+ -opera-transform: skew(20deg, 30deg);
+ -ms-transform: skew(20deg, 30deg);
+ transform: skew(20deg, 30deg);
+ }
+
diff --git a/mixins/skew/test.js b/mixins/skew/test.js
new file mode 100644
index 0000000..3d52dda
--- /dev/null
+++ b/mixins/skew/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('skew', function() {
+
+ it('should return default units and value', function(done) {
+ test.resultProperty = 'transform';
+ test.skew('20, 30', 'skew(20deg, 30deg)', done);
+ });
+
+});
diff --git a/mixins/skewX/skewX.js b/mixins/skewX/skewX.js
new file mode 100644
index 0000000..e5cfca1
--- /dev/null
+++ b/mixins/skewX/skewX.js
@@ -0,0 +1,38 @@
+/**
+ * SkewX mixin
+ */
+
+var skewX = function skewX(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+skewX.result = {
+ property: 'transform',
+ value: 'skewX({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+skewX.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = skewX;
diff --git a/mixins/skewX/skewX.md b/mixins/skewX/skewX.md
new file mode 100644
index 0000000..1bb08ae
--- /dev/null
+++ b/mixins/skewX/skewX.md
@@ -0,0 +1,32 @@
+### • skewX
+**Summary:**
+
+Skews the element along the X axis by the given angle.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#skewX)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .skewX()
+
+**Tips and tricks:**
+
+ If you omit units, `skewX` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .skewX(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: skewX(20deg);
+ -moz-transform: skewX(20deg);
+ -opera-transform: skewX(20deg);
+ -ms-transform: skewX(20deg);
+ transform: skewX(20deg);
+ }
+
diff --git a/mixins/skewX/test.js b/mixins/skewX/test.js
new file mode 100644
index 0000000..a0c9ff3
--- /dev/null
+++ b/mixins/skewX/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('skewX', function() {
+
+ it('should return value with units', function(done) {
+ test.resultProperty = 'transform';
+ test.skewX('20', 'skewX(20deg)', done);
+ });
+
+});
diff --git a/mixins/skewY/skewY.js b/mixins/skewY/skewY.js
new file mode 100644
index 0000000..bd49233
--- /dev/null
+++ b/mixins/skewY/skewY.js
@@ -0,0 +1,38 @@
+/**
+ * SkewY mixin
+ */
+
+var skewY = function skewY(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'deg';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+skewY.result = {
+ property: 'transform',
+ value: 'skewY({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+skewY.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = skewY;
diff --git a/mixins/skewY/skewY.md b/mixins/skewY/skewY.md
new file mode 100644
index 0000000..8cd608f
--- /dev/null
+++ b/mixins/skewY/skewY.md
@@ -0,0 +1,33 @@
+### • skewY
+**Summary:**
+
+Skews the element along the Y axis by the given angle.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#skewY)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .skewY()
+
+**Tips and tricks:**
+
+ If you omit units, `skewY` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .skewY(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: skewY(20deg);
+ -moz-transform: skewY(20deg);
+ -opera-transform: skewY(20deg);
+ -ms-transform: skewY(20deg);
+ transform: skewY(20deg);
+ }
+
+
diff --git a/mixins/skewY/test.js b/mixins/skewY/test.js
new file mode 100644
index 0000000..626c1c2
--- /dev/null
+++ b/mixins/skewY/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('skewY', function() {
+
+ it('should return value with units', function(done) {
+ test.resultProperty = 'transform';
+ test.skewY('20', 'skewY(20deg)', done);
+ });
+
+});
diff --git a/mixins/transform-origin/test.js b/mixins/transform-origin/test.js
new file mode 100644
index 0000000..ea1ed59
--- /dev/null
+++ b/mixins/transform-origin/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('transform-origin', function() {
+
+ it('should return the same value', function(done) {
+ test.transformOrigin('-10em -30em', '-10em -30em', done);
+ });
+
+ it('should add default unit and return the same value', function(done) {
+ test.transformOrigin('50 50', '50% 50%', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/transform-origin/transform-origin.js b/mixins/transform-origin/transform-origin.js
new file mode 100644
index 0000000..162f451
--- /dev/null
+++ b/mixins/transform-origin/transform-origin.js
@@ -0,0 +1,34 @@
+/**
+ * TransformOrigin mixin
+ */
+
+var transformOrigin = function transformOrigin(value) {
+ value = value || '50% 50% 0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-zA-Z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + '%';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transformOrigin.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transformOrigin;
diff --git a/mixins/transform-origin/transform-origin.md b/mixins/transform-origin/transform-origin.md
new file mode 100644
index 0000000..6b5995f
--- /dev/null
+++ b/mixins/transform-origin/transform-origin.md
@@ -0,0 +1,33 @@
+### • transform-origin
+**Summary:**
+
+The transform-origin CSS property lets you modify the origin for transformations of an element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transform-origin)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin)**
+
+**Syntax:**
+
+ Default value: 50% 50% 0
+
+ .transform-origin( | | )
+
+**Tips and tricks:**
+
+ If you omit units, `transform-origin` adds `%` automatically.
+
+**Example:**
+
+ div {
+ .transform-origin(50 50);
+ }
+
+ // Result
+ div {
+ -webkit-transform-origin: 50% 50%;
+ -moz-transform-origin: 50% 50%;
+ -opera-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ }
+
+
diff --git a/mixins/transform-style/test.js b/mixins/transform-style/test.js
new file mode 100644
index 0000000..235e7d5
--- /dev/null
+++ b/mixins/transform-style/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('transform-style', function() {
+
+ it('should return the same value', function(done) {
+ test.transformStyle('preserve-3d', 'preserve-3d', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/transform-style/transform-style.js b/mixins/transform-style/transform-style.js
new file mode 100644
index 0000000..43df24b
--- /dev/null
+++ b/mixins/transform-style/transform-style.js
@@ -0,0 +1,22 @@
+/**
+ * TransformStyle mixin
+ */
+
+var transformStyle = function transformStyle(value) {
+ value = value || 'flat';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transformStyle.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transformStyle;
\ No newline at end of file
diff --git a/mixins/transform-style/transform-style.md b/mixins/transform-style/transform-style.md
new file mode 100644
index 0000000..538a743
--- /dev/null
+++ b/mixins/transform-style/transform-style.md
@@ -0,0 +1,29 @@
+### • transform-style
+**Summary:**
+
+The transform-style CSS property determines if the children of the element are positioned in the 3D-space or are flattened in the plane of the element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transform-style)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-style)**
+
+**Syntax:**
+
+ Default value: flat
+
+ .transform-style(flat | preserve-3d)
+
+**Example:**
+
+ div {
+ .transform-style(preserve-3d);
+ }
+
+ // Result
+ div {
+ -webkit-transform-style: preserve-3d;
+ -moz-transform-style: preserve-3d;
+ -opera-transform-style: preserve-3d;
+ -ms-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+ }
+
+
diff --git a/mixins/transform/test.js b/mixins/transform/test.js
new file mode 100644
index 0000000..0e1c6d0
--- /dev/null
+++ b/mixins/transform/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('transform', function() {
+
+ it('should return the same value with units', function(done) {
+ test.transform('scale(.5) translate(10, 20)', 'scale(0.5) translate(10px, 20px)', done);
+ });
+
+});
diff --git a/mixins/transform/transform.js b/mixins/transform/transform.js
new file mode 100644
index 0000000..c205c7d
--- /dev/null
+++ b/mixins/transform/transform.js
@@ -0,0 +1,47 @@
+/**
+ * Transform mixin
+ */
+
+var transform = function transform(value) {
+ value = value || 'none';
+ var functions = {
+ translate: 'px',
+ rotate: 'deg',
+ rotate3d: 'deg',
+ skew: 'deg'
+ };
+
+ if (/^\w*\(?[a-z0-9.]*\)?/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ for (var i in functions) {
+ if (value.indexOf(i) >= 0) {
+ // check if there is unit
+ value = value.replace(new RegExp(i + '[\\w]?\\([a-z0-9, %]*\\)'), function(match) {
+ var regex = /(\d+\.?\d*)(?!\w|%)/g;
+ if (i == 'rotate3d') {
+ regex = /,\s*\d+$/;
+ }
+ return match.replace(regex, function(innerMatch) {
+ return innerMatch + functions[i];
+ });
+ });
+ }
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transform.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transform;
\ No newline at end of file
diff --git a/mixins/transform/transform.md b/mixins/transform/transform.md
new file mode 100644
index 0000000..4be0236
--- /dev/null
+++ b/mixins/transform/transform.md
@@ -0,0 +1,38 @@
+### • transform
+**Summary:**
+
+The CSS transform property lets you modify the coordinate space of the CSS visual formatting model.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transform)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform)**
+
+**Syntax:**
+
+ Default value: none
+
+ .transform(none | +)
+
+**Tips and tricks:**
+
+ If you omit units, `transform` can adds correct unit automatically.
+
+ translate: 'px',
+ rotate: 'deg',
+ rotate3d: 'deg',
+ skew: 'deg'
+
+**Example:**
+
+ div {
+ .transform(scale(.5) translate(10, 20));
+ }
+
+ // Result
+ div {
+ -webkit-transform: scale(.5) translate(10, 20);
+ -moz-transform: scale(.5) translate(10, 20);
+ -opera-transform: scale(.5) translate(10, 20);
+ -ms-transform: scale(.5) translate(10, 20);
+ transform: scale(.5) translate(10, 20);
+ }
+
+
diff --git a/mixins/transition-delay/test.js b/mixins/transition-delay/test.js
new file mode 100644
index 0000000..4cfa962
--- /dev/null
+++ b/mixins/transition-delay/test.js
@@ -0,0 +1,17 @@
+var assert = require('assert');
+
+describe('transition-delay', function() {
+
+ it('should return the same value', function(done) {
+ test.transitionDelay('2s, 4s', '2s, 4s', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.transitionDelay('200ms', '200ms', done);
+ });
+
+ it('should return numbers with properly value', function(done) {
+ test.transitionDelay('9, 200', '9s, 200ms', done);
+ });
+
+});
diff --git a/mixins/transition-delay/transition-delay.js b/mixins/transition-delay/transition-delay.js
new file mode 100644
index 0000000..b076eec
--- /dev/null
+++ b/mixins/transition-delay/transition-delay.js
@@ -0,0 +1,37 @@
+/**
+ * TransitionDelay mixin
+ */
+
+var transitionDelay = function transitionDelay(value) {
+ value = value || '0';
+ var valueRegex = /(?:\d)(?:ms|s)/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transitionDelay.vendors = ['webkit', 'moz', 'opera'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transitionDelay;
diff --git a/mixins/transition-delay/transition-delay.md b/mixins/transition-delay/transition-delay.md
new file mode 100644
index 0000000..a2e2d0c
--- /dev/null
+++ b/mixins/transition-delay/transition-delay.md
@@ -0,0 +1,38 @@
+### • transition-delay
+**Summary:**
+
+The transition-delay CSS property specifies the amount of time to wait between a change being requested to a property that is to be transitioned and the start of the transition effect.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-delay)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-delay)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .transition-delay()
+
+**Tips and tricks:**
+
+ If you omit units after time argument, `transition-delay` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .transition-delay(200);
+ }
+
+ // Result
+ div {
+ -webkit-transition-delay: 200ms;
+ -moz-transition-delay: 200ms;
+ -o-transition-delay: 200ms;
+ transition-delay: 200ms;
+ }
+
+
diff --git a/mixins/transition-duration/test.js b/mixins/transition-duration/test.js
new file mode 100644
index 0000000..7d1215a
--- /dev/null
+++ b/mixins/transition-duration/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('transition-duration', function() {
+
+ it('should add default unit and return the value', function(done) {
+ test.transitionDuration('2', '2s', done);
+ });
+
+ it('should add default units and return the value', function(done) {
+ test.transitionDuration('2, 130', '2s, 130ms', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/transition-duration/transition-duration.js b/mixins/transition-duration/transition-duration.js
new file mode 100644
index 0000000..1454a3f
--- /dev/null
+++ b/mixins/transition-duration/transition-duration.js
@@ -0,0 +1,37 @@
+/**
+ * TransitionDuration mixin
+ */
+
+var transitionDuration = function transitionDuration(value) {
+ value = value || '0';
+ var valueRegex = /ms|s/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transitionDuration.vendors = ['webkit', 'moz', 'opera'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transitionDuration;
diff --git a/mixins/transition-duration/transition-duration.md b/mixins/transition-duration/transition-duration.md
new file mode 100644
index 0000000..082ab2c
--- /dev/null
+++ b/mixins/transition-duration/transition-duration.md
@@ -0,0 +1,38 @@
+### • transition-duration
+**Summary:**
+
+The transition-duration CSS property specifies the number of seconds or milliseconds a transition animation should take to complete. By default, the value is 0s, meaning that no animation will occur.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-duration)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-duration)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .transition-duration()
+
+**Tips and tricks:**
+
+ If you omit units after time argument, `transition-duration` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+**Example:**
+
+ div {
+ .transition-duration(6);
+ }
+
+ // Result
+ div {
+ -webkit-transition-duration: 6s;
+ -moz-transition-duration: 6s;
+ -o-transition-duration: 6s;
+ transition-duration: 6s;
+ }
+
+
diff --git a/mixins/transition-property/test.js b/mixins/transition-property/test.js
new file mode 100644
index 0000000..aee7113
--- /dev/null
+++ b/mixins/transition-property/test.js
@@ -0,0 +1,13 @@
+var assert = require('assert');
+
+describe('transition-property', function() {
+
+ it('should return the same value', function(done) {
+ test.transitionProperty('box-shadow', 'box-shadow', done);
+ });
+
+ it('should prefix property and return value', function(done) {
+ test.transitionProperty.webkit('box-shadow', '-webkit-box-shadow', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/transition-property/transition-property.js b/mixins/transition-property/transition-property.js
new file mode 100644
index 0000000..65c7e1d
--- /dev/null
+++ b/mixins/transition-property/transition-property.js
@@ -0,0 +1,86 @@
+/**
+ * TransitionProperty mixin
+ */
+
+var transitionProperty = function transitionProperty(value) {
+ value = value || 'all';
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ return value;
+};
+
+transitionProperty.webkit = function transitionProperty(value) {
+ value = value || 'all';
+ var prefixedProperties = ['background-size', 'border-', 'box-shadow', 'column', 'transform', 'filter'];
+ var prefix = '-webkit-';
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ value = value.replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+
+ return value;
+};
+
+transitionProperty.moz = function transitionProperty(value) {
+ value = value || 'all';
+ var prefixedProperties = ['background-size', 'box-shadow', 'column', 'transform', 'filter'];
+ var prefix = '-moz-';
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ value = value.replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+
+ return value;
+};
+
+transitionProperty.opera = function transitionProperty(value) {
+ value = value || 'all';
+ var prefixedProperties = ['transform'];
+ var prefix = '-o-';
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ value = value.replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transitionProperty.vendors = ['webkit', 'moz', 'opera'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transitionProperty;
diff --git a/mixins/transition-property/transition-property.md b/mixins/transition-property/transition-property.md
new file mode 100644
index 0000000..896e23d
--- /dev/null
+++ b/mixins/transition-property/transition-property.md
@@ -0,0 +1,32 @@
+### • transition-property
+**Summary:**
+
+The transition-property CSS property is used to specify the names of CSS properties to which a transition effect should be applied.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-property)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-property)**
+
+**Syntax:**
+
+ Default value: all
+
+ .transition-property( | all | none)
+
+**Tips and tricks:**
+
+ And also properties inside `transition-property` definition are automatically prefixed, if it is needed.
+
+**Example:**
+
+ div {
+ .transition-property(box-shadow);
+ }
+
+ // Result
+ div {
+ -webkit-transition-property: -webkit-box-shadow;
+ -moz-transition-property: -moz-box-shadow;
+ -o-transition-property: box-shadow;
+ transition-property: box-shadow;
+ }
+
+
diff --git a/mixins/transition-timing-function/test.js b/mixins/transition-timing-function/test.js
new file mode 100644
index 0000000..012fec2
--- /dev/null
+++ b/mixins/transition-timing-function/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('transition-timing-function', function() {
+
+ it('should return the same value', function(done) {
+ test.transitionTimingFunction('cubic-bezier(0,0,1,1), ease', 'cubic-bezier(0, 0, 1, 1), ease', done);
+ });
+
+});
\ No newline at end of file
diff --git a/mixins/transition-timing-function/transition-timing-function.js b/mixins/transition-timing-function/transition-timing-function.js
new file mode 100644
index 0000000..2c3a95f
--- /dev/null
+++ b/mixins/transition-timing-function/transition-timing-function.js
@@ -0,0 +1,22 @@
+/**
+ * TransitionTimingFunction mixin
+ */
+
+var transitionTimingFunction = function transitionTimingFunction(value) {
+ value = value || 'ease';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transitionTimingFunction.vendors = ['webkit', 'moz', 'opera'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = transitionTimingFunction;
\ No newline at end of file
diff --git a/mixins/transition-timing-function/transition-timing-function.md b/mixins/transition-timing-function/transition-timing-function.md
new file mode 100644
index 0000000..a12cc80
--- /dev/null
+++ b/mixins/transition-timing-function/transition-timing-function.md
@@ -0,0 +1,28 @@
+### • transition-timing-function
+**Summary:**
+
+The CSS transition-timing-function property is used to describe how the intermediate values of the CSS properties being affected by a transition effect are calculated. This in essence lets you establish an acceleration curve, so that the speed of the transition can vary over its duration.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition-timing-function)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition-timing-function)**
+
+**Syntax:**
+
+ Default value: ease
+
+ .transition-timing-function(, ...)
+
+**Example:**
+
+ div {
+ .transition-timing-function(cubic-bezier(0,0,1,1), ease);
+ }
+
+ // Result
+ div {
+ -webkit-transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ -moz-transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ -o-transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ transition-timing-function: cubic-bezier(0, 0, 1, 1), ease;
+ }
+
+
diff --git a/mixins/transition/test.js b/mixins/transition/test.js
new file mode 100644
index 0000000..d3ffdf3
--- /dev/null
+++ b/mixins/transition/test.js
@@ -0,0 +1,21 @@
+var assert = require('assert');
+
+describe('transition', function() {
+
+ it('should return the same value', function(done) {
+ test.transition('box-shadow 0.2s cubic-bezier(.17,.67,.83,.67)', 'box-shadow 0.2s cubic-bezier(0.17, 0.67, 0.83, 0.67)', done);
+ });
+
+ it('should return the same value', function(done) {
+ test.transition('box-shadow 0.2s linear, color .4s .2s ease', 'box-shadow 0.2s linear, color 0.4s 0.2s ease', done);
+ });
+
+ it('should return prefixed value', function(done) {
+ test.transition.webkit('box-shadow .2 linear, filter .5 .2 ease', '-webkit-box-shadow 0.2s linear, -webkit-filter 0.5s 0.2s ease', done);
+ });
+
+ it('should return prefixed value', function(done) {
+ test.transition.moz('box-shadow .2 linear, filter .5 .2 ease', '-moz-box-shadow 0.2s linear, -moz-filter 0.5s 0.2s ease', done);
+ });
+
+});
diff --git a/mixins/transition/transition.js b/mixins/transition/transition.js
new file mode 100644
index 0000000..0531009
--- /dev/null
+++ b/mixins/transition/transition.js
@@ -0,0 +1,145 @@
+/**
+ * Transition mixin
+ */
+
+var transition = function transition(value) {
+ value = value || 'all 0 ease 0';
+ var valueRegex = /(?:\d)(?:ms|s)/gi;
+ var numWithoutValue = /(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+transition.webkit = function transition(value) {
+ value = value || 'all 0 ease 0';
+ var prefixedProperties = ['background-size', 'border-', 'box-shadow', 'column', 'transform', 'filter'];
+ var prefix = '-webkit-';
+ var valueRegex = /(?:\d)(?:ms|s)/gi;
+ var numWithoutValue = /(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ value = value.replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+transition.moz = function transition(value) {
+ value = value || 'all 0 ease 0';
+ var prefixedProperties = ['background-size', 'box-shadow', 'column', 'transform', 'filter'];
+ var prefix = '-moz-';
+ var valueRegex = /(?:\d)(?:ms|s)/gi;
+ var numWithoutValue = /(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ value = value.replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+transition.opera = function transition(value) {
+ value = value || 'all 0 ease 0';
+ var prefixedProperties = ['transform'];
+ var prefix = '-o-';
+ var valueRegex = /(?:\d)(?:ms|s)/gi;
+ var numWithoutValue = /(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (/^[-a-z0-9]*,/.test(value)) {
+ value = value.replace(/(?:,)(?![^(]*\))/g, '');
+ }
+
+ prefixedProperties.forEach(function(property, index) {
+ if (value.indexOf(property) !== -1) {
+ value = value.replace(new RegExp(property, 'g'), function(match) {
+ return prefix + match;
+ })
+ }
+ });
+
+ if (!valueRegex.test(value) && value !== '0') {
+ value = value.replace(numWithoutValue, function(match) {
+
+ if (parseFloat(match, 10) > 10) {
+ match += 'ms';
+ } else {
+ match += 's';
+ }
+
+ return match;
+ });
+ }
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+transition.vendors = ['webkit', 'moz', 'opera'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = transition;
diff --git a/mixins/transition/transition.md b/mixins/transition/transition.md
new file mode 100644
index 0000000..5b5b816
--- /dev/null
+++ b/mixins/transition/transition.md
@@ -0,0 +1,40 @@
+### • transition
+**Summary:**
+
+The CSS transition property is a shorthand property for transition-property, transition-duration, transition-timing-function, and transition-delay. It allows to define the transition between two states of an element.
+
+Resources: **[WebPlatform](http://docs.webplatform.org/wiki/css/properties/transition)**, **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transition)**
+
+**Syntax:**
+
+ Default value: all 0 ease 0
+
+ .transition([ none | ] | | | )
+
+**Tips and tricks:**
+
+ If you omit units after time argument, `transition` is trying to be smart and add properly value.
+
+ if (time > 10) {
+ time += 'ms';
+ } else {
+ time += 's';
+ }
+
+ And also properties inside `transition` definition are automatically prefixed, if it is needed.
+
+**Example:**
+
+ div {
+ .transition(box-shadow 0.2s linear, color .4s .2s ease);
+ }
+
+ // Result
+ div {
+ -webkit-transition: -webkit-box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ -moz-transition: -moz-box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ -o-transition: box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ transition: box-shadow 0.2s linear, color 0.4s 0.2s ease;
+ }
+
+
diff --git a/mixins/translate/test.js b/mixins/translate/test.js
new file mode 100644
index 0000000..07f44db
--- /dev/null
+++ b/mixins/translate/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('translate', function() {
+
+ it('should return default units and value', function(done) {
+ test.resultProperty = 'transform';
+ test.translate('20', 'translate(20px)', done);
+ });
+
+});
diff --git a/mixins/translate/translate.js b/mixins/translate/translate.js
new file mode 100644
index 0000000..416d3e4
--- /dev/null
+++ b/mixins/translate/translate.js
@@ -0,0 +1,38 @@
+/**
+ * Translate mixin
+ */
+
+var translate = function translate(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+translate.result = {
+ property: 'transform',
+ value: 'translate({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+translate.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = translate;
diff --git a/mixins/translate/translate.md b/mixins/translate/translate.md
new file mode 100644
index 0000000..b1671c1
--- /dev/null
+++ b/mixins/translate/translate.md
@@ -0,0 +1,31 @@
+### • translate
+**Summary:**
+
+Specifies a 2D translation by the vector [tx, ty]. If ty isn't specified, its value is assumed to be zero.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translate)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translate([, ])
+
+**Tips and tricks:**
+
+ If you omit units, `translate` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translate(200);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translate(200px);
+ -moz-transform: translate(200px);
+ -o-transform: translate(200px);
+ transform: translate(200px);
+ }
+
diff --git a/mixins/translate3d/test.js b/mixins/translate3d/test.js
new file mode 100644
index 0000000..c11885f
--- /dev/null
+++ b/mixins/translate3d/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('translate3d', function() {
+
+ it('should return default units and value', function(done) {
+ test.resultProperty = 'transform';
+ test.translate3d('20, 30, 10', 'translate3d(20px, 30px, 10px)', done);
+ });
+
+});
diff --git a/mixins/translate3d/translate3d.js b/mixins/translate3d/translate3d.js
new file mode 100644
index 0000000..47c3b2b
--- /dev/null
+++ b/mixins/translate3d/translate3d.js
@@ -0,0 +1,38 @@
+/**
+ * Translate3d mixin
+ */
+
+var translate3d = function translate3d(value) {
+ value = value || '0, 0, 0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+translate3d.result = {
+ property: 'transform',
+ value: 'translate3d({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+translate3d.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = translate3d;
diff --git a/mixins/translate3d/translate3d.md b/mixins/translate3d/translate3d.md
new file mode 100644
index 0000000..1eaefda
--- /dev/null
+++ b/mixins/translate3d/translate3d.md
@@ -0,0 +1,32 @@
+### • translate3d
+**Summary:**
+
+The translate3d() CSS function moves the position of the element in the 3D space.
+
+Resources: **MDN **
+
+**Syntax:**
+
+ Default value: 0
+
+ .translate3d(, , )
+
+**Tips and tricks:**
+
+ If you omit units, `translate3d` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translate3d(20, 30, 10);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translate3d(20px, 30px, 10px);
+ -moz-transform: translate3d(20px, 30px, 10px);
+ -o-transform: translate3d(20px, 30px, 10px);
+ transform: translate3d(20px, 30px, 10px);
+ }
+
+
diff --git a/mixins/translateX/test.js b/mixins/translateX/test.js
new file mode 100644
index 0000000..cee578f
--- /dev/null
+++ b/mixins/translateX/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('translateX', function() {
+
+ it('should return default units and value', function(done) {
+ test.resultProperty = 'transform';
+ test.translateX('20', 'translateX(20px)', done);
+ });
+
+});
diff --git a/mixins/translateX/translateX.js b/mixins/translateX/translateX.js
new file mode 100644
index 0000000..446c762
--- /dev/null
+++ b/mixins/translateX/translateX.js
@@ -0,0 +1,38 @@
+/**
+ * TranslateX mixin
+ */
+
+var translateX = function translateX(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+translateX.result = {
+ property: 'transform',
+ value: 'translateX({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+translateX.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = translateX;
diff --git a/mixins/translateX/translateX.md b/mixins/translateX/translateX.md
new file mode 100644
index 0000000..dacf5d1
--- /dev/null
+++ b/mixins/translateX/translateX.md
@@ -0,0 +1,31 @@
+### • translateX
+**Summary:**
+
+Translates the element by the given amount along the X axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translateX)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translateX()
+
+**Tips and tricks:**
+
+ If you omit units, `translateX` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translateX(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translateX(20px);
+ -moz-transform: translateX(20px);
+ -o-transform: translateX(20px);
+ transform: translateX(20px);
+ }
+
diff --git a/mixins/translateY/test.js b/mixins/translateY/test.js
new file mode 100644
index 0000000..19e9806
--- /dev/null
+++ b/mixins/translateY/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('translateY', function() {
+
+ it('should return default units and value', function(done) {
+ test.resultProperty = 'transform';
+ test.translateY('20', 'translateY(20px)', done);
+ });
+
+});
diff --git a/mixins/translateY/translateY.js b/mixins/translateY/translateY.js
new file mode 100644
index 0000000..8b3fd8d
--- /dev/null
+++ b/mixins/translateY/translateY.js
@@ -0,0 +1,38 @@
+/**
+ * TranslateY mixin
+ */
+
+var translateY = function translateY(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+translateY.result = {
+ property: 'transform',
+ value: 'translateY({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+translateY.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = translateY;
diff --git a/mixins/translateY/translateY.md b/mixins/translateY/translateY.md
new file mode 100644
index 0000000..1ee818c
--- /dev/null
+++ b/mixins/translateY/translateY.md
@@ -0,0 +1,31 @@
+### • translateY
+**Summary:**
+
+Translates the element by the given amount along the Y axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translateY)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translateY()
+
+**Tips and tricks:**
+
+ If you omit units, `translateY` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translateY(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translateY(20px);
+ -moz-transform: translateY(20px);
+ -o-transform: translateY(20px);
+ transform: translateY(20px);
+ }
+
diff --git a/mixins/translateZ/test.js b/mixins/translateZ/test.js
new file mode 100644
index 0000000..56980cd
--- /dev/null
+++ b/mixins/translateZ/test.js
@@ -0,0 +1,10 @@
+var assert = require('assert');
+
+describe('translateZ', function() {
+
+ it('should return default units and value', function(done) {
+ test.resultProperty = 'transform';
+ test.translateZ('20', 'translateZ(20px)', done);
+ });
+
+});
diff --git a/mixins/translateZ/translateZ.js b/mixins/translateZ/translateZ.js
new file mode 100644
index 0000000..6609cd0
--- /dev/null
+++ b/mixins/translateZ/translateZ.js
@@ -0,0 +1,38 @@
+/**
+ * TranslateZ mixin
+ */
+
+var translateZ = function translateZ(value) {
+ value = value || '0';
+ var numRegex = /\d/gi;
+ var numWithoutValue = /(?:\s|^)(\d+\.?\d*)(?![^(]*\)|\w|%)/gi;
+
+ if (numRegex.test(value)) {
+ value = value.replace(numWithoutValue, function(match) {
+ return match + 'px';
+ });
+ }
+
+ return value;
+};
+
+/**
+ * Result settings
+ */
+
+translateZ.result = {
+ property: 'transform',
+ value: 'translateZ({{ result }})',
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+translateZ.vendors = ['webkit', 'moz', 'opera', 'ms'];
+
+/**
+ * Export mixin
+ */
+
+module.exports = translateZ;
diff --git a/mixins/translateZ/translateZ.md b/mixins/translateZ/translateZ.md
new file mode 100644
index 0000000..1ed0d32
--- /dev/null
+++ b/mixins/translateZ/translateZ.md
@@ -0,0 +1,32 @@
+### • translateZ
+**Summary:**
+
+Translates the element by the given amount along the Z axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/transform#translateZ)**
+
+**Syntax:**
+
+ Default value: 0
+
+ .translateZ()
+
+**Tips and tricks:**
+
+ If you omit units, `translateZ` adds `px` automatically.
+
+**Example:**
+
+ div {
+ .translateZ(20);
+ }
+
+ // Result
+ div {
+ -webkit-transform: translateZ(20px);
+ -moz-transform: translateZ(20px);
+ -o-transform: translateZ(20px);
+ transform: translateZ(20px);
+ }
+
+
diff --git a/mixins/user-select/test.js b/mixins/user-select/test.js
new file mode 100644
index 0000000..4d9af9c
--- /dev/null
+++ b/mixins/user-select/test.js
@@ -0,0 +1,9 @@
+var assert = require('assert');
+
+describe('user-select', function() {
+
+ it('should return the same value', function(done) {
+ test.userSelect('none', 'none', done);
+ });
+
+});
diff --git a/mixins/user-select/user-select.js b/mixins/user-select/user-select.js
new file mode 100644
index 0000000..e160b3f
--- /dev/null
+++ b/mixins/user-select/user-select.js
@@ -0,0 +1,22 @@
+/**
+ * UserSelect mixin
+ */
+
+var userSelect = function userSelect(value) {
+ value = value || 'auto';
+
+ return value;
+};
+
+/**
+ * For which browsers is this mixin specified
+ */
+
+userSelect.vendors = ['webkit', 'moz', 'ms'];
+
+
+/**
+ * Export mixin
+ */
+
+module.exports = userSelect;
\ No newline at end of file
diff --git a/mixins/user-select/user-select.md b/mixins/user-select/user-select.md
new file mode 100644
index 0000000..ced0c6c
--- /dev/null
+++ b/mixins/user-select/user-select.md
@@ -0,0 +1,26 @@
+### • user-select
+**Summary:**
+
+Translates the element by the given amount along the Z axis.
+
+Resources: **[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/user-select)**
+
+**Syntax:**
+
+ Default value: auto
+
+ .user-select(none | text | all | element)
+
+**Example:**
+
+ div {
+ .user-select(none);
+ }
+
+ // Result
+ div {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ }
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..4d21f0a
--- /dev/null
+++ b/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "lesshat",
+ "description": "Most advanced LESS CSS mixins library",
+ "version": "2.0.0",
+ "homepage": "http://lesshat.com/",
+ "author": {
+ "name": "Petr Brzek",
+ "email": "petrbrzek@abdoc.net"
+ },
+ "contributors": [
+ {
+ "name": "Jan Kuca",
+ "url": "www.jankuca.com"
+ }
+ ],
+ "keywords": [
+ "less",
+ "mixins"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/csshat/lesshat"
+ },
+ "bugs": {
+ "url": "https://github.com/csshat/lesshat/issues"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/csshat/lesshat/blob/master/LICENSE"
+ }
+ ],
+ "devDependencies": {
+ "lesshat-devstack": "git://github.com/csshat/lesshat-devstack",
+ "grunt": "0.4.x",
+ "grunt-cli": "*",
+ "mocha": "1.12.0",
+ "grunt-prompt": "~0.1.2"
+ },
+ "scripts": {
+ "test": "grunt test"
+ }
+}