aboutsummaryrefslogtreecommitdiffstats
path: root/WebContent/VAADIN/themes/valo/util
diff options
context:
space:
mode:
authorJouni Koivuviita <jouni@vaadin.com>2014-04-11 17:17:07 +0300
committerJouni Koivuviita <jouni@vaadin.com>2014-04-11 17:17:07 +0300
commitf50ad371bce71ecd235d0b26d19dbf6c3a4d157f (patch)
tree3c3d0961f06e97043c3ac4833dd986d24642752f /WebContent/VAADIN/themes/valo/util
parentf374bc72f5fe3535600551a14eb3df2d97889ba2 (diff)
downloadvaadin-framework-f50ad371bce71ecd235d0b26d19dbf6c3a4d157f.tar.gz
vaadin-framework-f50ad371bce71ecd235d0b26d19dbf6c3a4d157f.zip
Initial commit of Valo (from original repo at 60e2fa9ea119d24bb2421d3671a8cb87d6754e8b
Diffstat (limited to 'WebContent/VAADIN/themes/valo/util')
-rw-r--r--WebContent/VAADIN/themes/valo/util/_anim.scss63
-rw-r--r--WebContent/VAADIN/themes/valo/util/_bevel-and-shadow.scss63
-rw-r--r--WebContent/VAADIN/themes/valo/util/_blend-modes.scss532
-rw-r--r--WebContent/VAADIN/themes/valo/util/_color.scss111
-rw-r--r--WebContent/VAADIN/themes/valo/util/_css3.scss28
-rw-r--r--WebContent/VAADIN/themes/valo/util/_gradient.scss31
-rw-r--r--WebContent/VAADIN/themes/valo/util/_lists.scss279
-rw-r--r--WebContent/VAADIN/themes/valo/util/_util.scss45
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/_bourbon-deprecated-upcoming.scss13
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/_bourbon.scss69
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_button.scss273
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_clearfix.scss23
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_directional-values.scss114
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_ellipsis.scss7
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_font-family.scss5
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_hide-text.scss10
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_html5-input-types.scss110
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_position.scss32
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_prefixer.scss45
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_rem.scss33
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_retina-image.scss31
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_size.scss44
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_timing-functions.scss32
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/addons/_triangle.scss45
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_animation.scss52
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_appearance.scss3
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_backface-visibility.scss6
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_background-image.scss48
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_background.scss103
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-image.scss56
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-radius.scss22
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_box-sizing.scss4
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_calc.scss4
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_columns.scss47
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_flex-box.scss321
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_font-face.scss23
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_hidpi-media-query.scss10
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_hyphens.scss4
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_image-rendering.scss13
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_inline-block.scss8
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_keyframes.scss38
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_linear-gradient.scss38
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_perspective.scss8
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_placeholder.scss29
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_radial-gradient.scss39
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_transform.scss15
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_transition.scss34
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/css3/_user-select.scss3
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_flex-grid.scss39
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_golden-ratio.scss3
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_grid-width.scss13
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_linear-gradient.scss13
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_modular-scale.scss66
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_px-to-em.scss13
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_radial-gradient.scss23
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_strip-units.scss5
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_tint-shade.scss9
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_transition-property-name.scss22
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/functions/_unpack.scss17
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/helpers/_gradient-positions-parser.scss13
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/helpers/_linear-positions-parser.scss61
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-arg-parser.scss69
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-positions-parser.scss18
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/helpers/_render-gradients.scss26
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/helpers/_shape-size-stripper.scss10
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/settings/_prefixer.scss6
-rw-r--r--WebContent/VAADIN/themes/valo/util/bourbon/settings/_px-to-em.scss1
67 files changed, 3393 insertions, 0 deletions
diff --git a/WebContent/VAADIN/themes/valo/util/_anim.scss b/WebContent/VAADIN/themes/valo/util/_anim.scss
new file mode 100644
index 0000000000..b73d2edf8b
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_anim.scss
@@ -0,0 +1,63 @@
+@include keyframes(v-valo-anim-fade-in) {
+ 0% {
+ opacity: 0;
+ }
+}
+
+
+@include keyframes(v-valo-anim-fade-out) {
+ 100% {
+ opacity: 0;
+ }
+}
+
+
+@include keyframes(v-valo-anim-slide-down) {
+ 0% {
+ @include transform( translateY(-100%) );
+ }
+}
+
+@include keyframes(v-valo-anim-slide-up) {
+ 0% {
+ @include transform( translateY(100%) );
+ }
+}
+
+@include keyframes(v-valo-anim-slide-left) {
+ 0% {
+ @include transform( translateX(100%) );
+ }
+}
+
+@include keyframes(v-valo-anim-slide-right) {
+ 0% {
+ @include transform( translateX(-100%) );
+ }
+}
+
+
+
+@mixin v-valo-anim-fade-in ($duration: 120ms, $delay: null){
+ @include animation(v-valo-anim-fade-in $duration $delay);
+}
+
+@mixin v-valo-anim-fade-out ($duration: 120ms, $delay: null){
+ @include animation(v-valo-anim-fade-out $duration $delay);
+}
+
+@mixin v-valo-anim-slide-down ($duration: 260ms, $delay: null){
+ @include animation(v-valo-anim-slide-down $duration $delay);
+}
+
+@mixin v-valo-anim-slide-up ($duration: 260ms, $delay: null){
+ @include animation(v-valo-anim-slide-up $duration $delay);
+}
+
+@mixin v-valo-anim-slide-left ($duration: 260ms, $delay: null){
+ @include animation(v-valo-anim-slide-left $duration $delay);
+}
+
+@mixin v-valo-anim-slide-right ($duration: 260ms, $delay: null){
+ @include animation(v-valo-anim-slide-right $duration $delay);
+} \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/_bevel-and-shadow.scss b/WebContent/VAADIN/themes/valo/util/_bevel-and-shadow.scss
new file mode 100644
index 0000000000..2b627df3e7
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_bevel-and-shadow.scss
@@ -0,0 +1,63 @@
+@function v-valo-bevel ($color, $bevel-style: $v-bevel-style, $bevel-depth: $v-bevel-depth,
+ $gradient-style: $v-gradient-style, $gradient-depth: $v-gradient-depth) {
+
+ @if $bevel-depth == 0% or $bevel-style == none {
+ @return null;
+ }
+
+ $color-stops: v-valo-gradient-color-stops($color, $gradient-style, $gradient-depth);
+
+ $top-color: first(first($color-stops));
+ $bottom-color: first(last($color-stops));
+
+ $top-color: blend-lighten(adjust-color($top-color, $lightness: $bevel-depth/4, $saturation: -$bevel-depth), scale-color($top-color, $lightness: $bevel-depth/4));
+ $bottom-color: blend-darken(rgba(scale-color($bottom-color, $lightness: max(-30%, -$bevel-depth/3), $saturation: -$bevel-depth), $bevel-depth/100%), $bottom-color);
+
+ @return v-valo-replace-hilite-and-shade($bevel-style, $top-color, $bottom-color);
+}
+
+
+
+@function v-valo-shadow ($shadow-style: null, $shadow-depth: null) {
+ $shadow-style: $shadow-style or $v-shadow-style;
+ $shadow-depth: $shadow-depth or $v-shadow-depth;
+
+ @if $shadow-depth == 0% or $shadow-style == none {
+ @return null;
+ }
+
+ @return v-valo-replace-hilite-and-shade($shadow-style, rgba(#fff, $shadow-depth/100%), rgba(#000, $shadow-depth/100%));
+}
+
+
+
+@function v-valo-replace-hilite-and-shade($shadow-list, $hilite, $shade) {
+ @if $shadow-list == none {
+ @return null;
+ }
+
+ @if type-of(last($shadow-list)) == color {
+ @return $shadow-list;
+ }
+
+ // If the shadow-list only contains one shadow
+ // (we can't use the recursive replace function because that will mess up the list delimeters)
+ @if last($shadow-list) == hilite {
+ @return replace($shadow-list, hilite, $hilite);
+ } @else if last($shadow-list) == shade {
+ @return replace($shadow-list, shade, $shade);
+ }
+
+ // If there are multiple shadows in a list, recurse and separate lists with a comma
+ $new: null;
+ @each $part in $shadow-list {
+ @if type-of($part) == list and length($part) > 0 {
+ $part: v-valo-replace-hilite-and-shade($part, $hilite, $shade);
+ @if $part {
+ $new: $new, $part;
+ }
+ }
+ }
+
+ @return $new;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/_blend-modes.scss b/WebContent/VAADIN/themes/valo/util/_blend-modes.scss
new file mode 100644
index 0000000000..3da575660d
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_blend-modes.scss
@@ -0,0 +1,532 @@
+// From https://github.com/heygrady/scss-blend-modes
+// MIT license
+// Remember to add a license notice to Vaadin
+
+//--------------------------------
+// Normal
+//--------------------------------
+@function blend-normal ($foreground, $background) {
+ $opacity: opacity($foreground);
+ $background-opacity: opacity($background);
+
+ // calculate opacity
+ $bm-red: red($foreground) * $opacity + red($background) * $background-opacity * (1 - $opacity);
+ $bm-green: green($foreground) * $opacity + green($background) * $background-opacity * (1 - $opacity);
+ $bm-blue: blue($foreground) * $opacity + blue($background) * $background-opacity * (1 - $opacity);
+ @return rgb($bm-red, $bm-green, $bm-blue);
+}
+
+//--------------------------------
+// Multiply
+//--------------------------------
+@function blend-multiply ($foreground, $background) {
+ $bm-red: red($background) * red($foreground) / 255;
+ $bm-green: green($background) * green($foreground) / 255;
+ $bm-blue: blue($background) * blue($foreground) / 255;
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Lighten
+//--------------------------------
+@function blend-lighten ($foreground, $background) {
+ $bm-red: blend-lighten-color(red($foreground), red($background));
+ $bm-green: blend-lighten-color(green($foreground), green($background));
+ $bm-blue: blend-lighten-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-lighten-color($foreground, $background) {
+ @if $background > $foreground {
+ $foreground: $background;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Darken
+//--------------------------------
+@function blend-darken ($foreground, $background) {
+ $bm-red: blend-darken-color(red($foreground), red($background));
+ $bm-green: blend-darken-color(green($foreground), green($background));
+ $bm-blue: blend-darken-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-darken-color($foreground, $background) {
+ @if $background < $foreground {
+ $foreground: $background;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Darker Color
+//--------------------------------
+@function blend-darkercolor ($foreground, $background) {
+ $bm-red: red($foreground);
+ $bm-green: green($foreground);
+ $bm-blue: blue($foreground);
+ $background-red: red($background);
+ $background-green: green($background);
+ $background-blue: blue($background);
+
+ @if $background-red * 0.3 + $background-green * 0.59 + $background-blue * 0.11 <= $bm-red * 0.3 + $bm-green * 0.59 + $bm-blue * 0.11 {
+ $bm-red: $background-red;
+ $bm-green: $background-green;
+ $bm-blue: $background-blue;
+ }
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Lighter Color
+//--------------------------------
+@function blend-lightercolor ($foreground, $background) {
+ $bm-red: red($foreground);
+ $bm-green: green($foreground);
+ $bm-blue: blue($foreground);
+ $background-red: red($background);
+ $background-green: green($background);
+ $background-blue: blue($background);
+
+ @if $background-red * 0.3 + $background-green * 0.59 + $background-blue * 0.11 > $bm-red * 0.3 + $bm-green * 0.59 + $bm-blue * 0.11 {
+ $bm-red: $background-red;
+ $bm-green: $background-green;
+ $bm-blue: $background-blue;
+ }
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Linear Dodge
+//--------------------------------
+@function blend-lineardodge ($foreground, $background) {
+ $bm-red: blend-lineardodge-color(red($foreground), red($background));
+ $bm-green: blend-lineardodge-color(green($foreground), green($background));
+ $bm-blue: blend-lineardodge-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-lineardodge-color($foreground, $background) {
+ @if $background + $foreground > 255 {
+ $foreground: 255;
+ }
+ @else {
+ $foreground: $background + $foreground;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Linear Burn
+//--------------------------------
+@function blend-linearburn ($foreground, $background) {
+ $bm-red: blend-linearburn-color(red($foreground), red($background));
+ $bm-green: blend-linearburn-color(green($foreground), green($background));
+ $bm-blue: blend-linearburn-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-linearburn-color($foreground, $background) {
+ @if $background + $foreground < 255 {
+ $foreground: 0;
+ }
+ @else {
+ $foreground: $background + $foreground - 255;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Difference
+//--------------------------------
+@function blend-difference ($foreground, $background) {
+ $bm-red: abs(red($background) - red($foreground));
+ $bm-green: abs(green($background) - green($foreground));
+ $bm-blue: abs(blue($background) - blue($foreground));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Screen
+//--------------------------------
+@function blend-screen ($foreground, $background) {
+ $bm-red: blend-screen-color(red($foreground), red($background));
+ $bm-green: blend-screen-color(green($foreground), green($background));
+ $bm-blue: blend-screen-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-screen-color($foreground, $background) {
+ @return (255 - ( ( (255 - $foreground) * (255 - $background)) / 256));
+}
+
+//--------------------------------
+// Exclusion
+//--------------------------------
+@function blend-exclusion ($foreground, $background) {
+ $bm-red: blend-exclusion-color(red($foreground), red($background));
+ $bm-green: blend-exclusion-color(green($foreground), green($background));
+ $bm-blue: blend-exclusion-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-exclusion-color($foreground, $background) {
+ @return $background - ($background * (2 / 255) - 1) * $foreground;
+}
+
+//--------------------------------
+// Overlay
+//--------------------------------
+@function blend-overlay ($foreground, $background) {
+ $bm-red: blend-overlay-color(red($foreground), red($background));
+ $bm-green: blend-overlay-color(green($foreground), green($background));
+ $bm-blue: blend-overlay-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-overlay-color($foreground, $background) {
+ @if $background <= 255 / 2 {
+ $foreground: (2 * $background * $foreground) / 255;
+ } @else {
+ $foreground: 255 - (255 - 2 * ($background - (255 / 2))) * (255 - $foreground) / 255;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Soft Light
+//--------------------------------
+@function blend-softlight ($foreground, $background) {
+ $bm-red: blend-softlight-color(red($foreground), red($background));
+ $bm-green: blend-softlight-color(green($foreground), green($background));
+ $bm-blue: blend-softlight-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-softlight-color($foreground, $background) {
+ @if $background < 128 {
+ $foreground: (($foreground / 2) + 64) * $background * (2 / 255);
+ } @else {
+ $foreground: 255 - (191 - ($foreground / 2)) * (255 - $background) * (2 / 255);
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Hard Light
+//--------------------------------
+@function blend-hardlight ($foreground, $background) {
+ $bm-red: blend-hardlight-color(red($foreground), red($background));
+ $bm-green: blend-hardlight-color(green($foreground), green($background));
+ $bm-blue: blend-hardlight-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-hardlight-color($foreground, $background) {
+ $tmp-blend: $foreground;
+ @if $tmp-blend < 128 {
+ $foreground: $background * $tmp-blend * (2 / 255);
+ } @else {
+ $foreground: 255 - (255-$background) * (255-$tmp-blend) * (2 / 255);
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Color Dodge
+//--------------------------------
+@function blend-colordodge ($foreground, $background) {
+ $bm-red: blend-colordodge-color(red($foreground), red($background));
+ $bm-green: blend-colordodge-color(green($foreground), green($background));
+ $bm-blue: blend-colordodge-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-colordodge-color($foreground, $background) {
+ $tmp: $background * 256 / (255 - $foreground);
+ @if $tmp > 255 or $foreground == 255 {
+ $foreground: 255;
+ } @else {
+ $foreground: $tmp;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Color Burn
+//--------------------------------
+@function blend-colorburn ($foreground, $background) {
+ $bm-red: blend-colorburn-color(red($foreground), red($background));
+ $bm-green: blend-colorburn-color(green($foreground), green($background));
+ $bm-blue: blend-colorburn-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-colorburn-color($foreground, $background) {
+ $tmp: (255 - ((255 - $background) * 255) / $foreground);
+
+ // TODO: hacked to replicate photoshop
+ @if $foreground == 0 {
+ $foreground: 255;
+ } @elseif $tmp < 0 {
+ $foreground: 0;
+ } @else {
+ $foreground: $tmp;
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Linear Light
+//--------------------------------
+@function blend-linearlight ($foreground, $background) {
+ $bm-red: blend-linearlight-color(red($foreground), red($background));
+ $bm-green: blend-linearlight-color(green($foreground), green($background));
+ $bm-blue: blend-linearlight-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-linearlight-color($foreground, $background) {
+ @if $foreground < 128 {
+ $foreground: blend-linearburn-color($background, 2 * $foreground);
+ } @else {
+ $foreground: blend-lineardodge-color($background, 2 * ($foreground - 128));
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Vivid Light
+//--------------------------------
+@function blend-vividlight ($foreground, $background) {
+ $bm-red: blend-vividlight-color(red($foreground), red($background));
+ $bm-green: blend-vividlight-color(green($foreground), green($background));
+ $bm-blue: blend-vividlight-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+@function blend-vividlight-color($foreground, $background) {
+ @if $foreground < 128 {
+ $foreground: blend-colorburn-color(2 * $foreground, $background);
+ } @else {
+ $foreground: blend-colordodge-color(2 * ($foreground - 128), $background);
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Pin Light
+//--------------------------------
+@function blend-pinlight ($foreground, $background) {
+ $bm-red: blend-pinlight-color(red($foreground), red($background));
+ $bm-green: blend-pinlight-color(green($foreground), green($background));
+ $bm-blue: blend-pinlight-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+@function blend-pinlight-color($foreground, $background) {
+ @if $foreground < 128 {
+ $foreground: blend-darken-color($background, 2 * $foreground);
+ } @else {
+ $foreground: blend-lighten-color($background, 2 * ($foreground - 128));
+ }
+ @return $foreground;
+}
+
+//--------------------------------
+// Hard Mix
+//--------------------------------
+@function blend-hardmix ($foreground, $background) {
+ $bm-red: blend-hardmix-color(red($foreground), red($background));
+ $bm-green: blend-hardmix-color(green($foreground), green($background));
+ $bm-blue: blend-hardmix-color(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+@function blend-hardmix-color($foreground, $background) {
+ $tmp: blend-vividlight-color($foreground, $background);
+ @if $tmp < 128 {
+ $foreground: 0;
+ } @else {
+ $foreground: 255;
+ }
+ @return $foreground;
+}
+
+
+// Unique to Photoshop
+
+//--------------------------------
+// Color Blend
+//--------------------------------
+@function blend-colorblend ($foreground, $background) {
+ $foreground-hsv: color-to-hsv($foreground);
+ $background-hsv: color-to-hsv($background);
+
+ $bm-hsv: nth($foreground-hsv, 1), nth($foreground-hsv, 2), nth($background-hsv, 3);
+ $bm-color: hsv-to-color($bm-hsv);
+
+ @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Dissolve
+//--------------------------------
+@function blend-dissolve ($foreground, $background) {
+ // The Dissolve blend mode acts on transparent and partially transparent pixels
+ // it treats transparency as a pixel pattern and applies a diffusion dither pattern.
+ // @see http://photoblogstop.com/photoshop/photoshop-blend-modes-explained
+ @return $foreground;
+}
+
+//--------------------------------
+// Divide
+//--------------------------------
+@function blend-divide ($foreground, $background) {
+ $bm-red: blend-divide-colors(red($foreground), red($background));
+ $bm-green: blend-divide-colors(green($foreground), green($background));
+ $bm-blue:blend-divide-colors(blue($foreground), blue($background));
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+@function blend-divide-colors($foreground, $background) {
+ @return min((($background / 255) / ($foreground / 255)) * 255, 255);
+}
+
+//--------------------------------
+// Hue
+//--------------------------------
+@function blend-hue ($foreground, $background) {
+ $foreground-hsv: color-to-hsv($foreground);
+ $background-hsv: color-to-hsv($background);
+
+ $bm-hsv: nth($foreground-hsv, 1), nth($background-hsv, 2), nth($background-hsv, 3);
+ $bm-color: hsv-to-color($bm-hsv);
+
+ @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Luminosity
+//--------------------------------
+@function blend-luminosity ($foreground, $background) {
+ $foreground-hsv: color-to-hsv($foreground);
+ $background-hsv: color-to-hsv($background);
+
+ $bm-hsv: nth($background-hsv, 1), nth($background-hsv, 2), nth($foreground-hsv, 3);
+ $bm-color: hsv-to-color($bm-hsv);
+
+ @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Saturation
+//--------------------------------
+@function blend-saturation ($foreground, $background) {
+ $foreground-hsv: color-to-hsv($foreground);
+ $background-hsv: color-to-hsv($background);
+
+ $bm-hsv: nth($background-hsv, 1), nth($foreground-hsv, 2), nth($background-hsv, 3);
+ $bm-color: hsv-to-color($bm-hsv);
+
+ @return blend-normal(rgba(red($bm-color), green($bm-color), blue($bm-color), opacity($foreground)), $background);
+}
+
+//--------------------------------
+// Subtract
+//--------------------------------
+@function blend-subtract ($foreground, $background) {
+ $bm-red: max(red($background) - red($foreground), 0);
+ $bm-green: max(green($background) - green($foreground), 0);
+ $bm-blue: max(blue($background) - blue($foreground), 0);
+
+ @return blend-normal(rgba($bm-red, $bm-green, $bm-blue, opacity($foreground)), $background);
+}
+
+//--------------------------------
+// HSL and HSV
+//--------------------------------
+// @see https://gist.github.com/1069204
+@function hsv-to-hsl($h, $s: 0, $v: 0) {
+ @if type-of($h) == 'list' {
+ $v: nth($h, 3);
+ $s: nth($h, 2);
+ $h: nth($h, 1);
+ }
+
+ @if unit($h) == 'deg' {
+ $h: 3.1415 * 2 * ($h / 360deg);
+ }
+ @if unit($s) == '%' {
+ $s: 0 + ($s / 100%);
+ }
+ @if unit($v) == '%' {
+ $v: 0 + ($v / 100%);
+ }
+
+ $ss: $s * $v;
+ $ll: (2 - $s) * $v;
+
+ @if $ll <= 1 {
+ $ss: $ss / $ll;
+ } @else if ($ll == 2) {
+ $ss: 0;
+ } @else {
+ $ss: $ss / (2 - $ll);
+ }
+
+ $ll: $ll / 2;
+
+ @return 360deg * $h / (3.1415 * 2), percentage(max(0, min(1, $ss))), percentage(max(0, min(1, $ll)));
+}
+
+@function hsl-to-hsv($h, $ss: 0, $ll: 0) {
+ @if type-of($h) == 'list' {
+ $ll: nth($h, 3);
+ $ss: nth($h, 2);
+ $h: nth($h, 1);
+ } @else if type-of($h) == 'color' {
+ $ll: lightness($h);
+ $ss: saturation($h);
+ $h: hue($h);
+ }
+
+ @if unit($h) == 'deg' {
+ $h: 3.1415 * 2 * ($h / 360deg);
+ }
+ @if unit($ss) == '%' {
+ $ss: 0 + ($ss / 100%);
+ }
+ @if unit($ll) == '%' {
+ $ll: 0 + ($ll / 100%);
+ }
+
+ $ll: $ll * 2;
+
+ @if $ll <= 1 {
+ $ss: $ss * $ll;
+ } @else {
+ $ss: $ss * (2 - $ll);
+ }
+
+ $v: ($ll + $ss) / 2;
+ $s: (2 * $ss) / ($ll + $ss);
+
+ @return 360deg * $h / (3.1415 * 2), percentage(max(0, min(1, $s))), percentage(max(0, min(1, $v)));
+}
+
+@function color-to-hsv($color) {
+ @return hsl-to-hsv($color);
+}
+
+@function hsv-to-color($h, $s: 0, $v: 0) {
+ $hsl: hsv-to-hsl($h, $s, $v);
+ @return hsl(nth($hsl, 1), nth($hsl, 2), nth($hsl, 3));
+} \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/_color.scss b/WebContent/VAADIN/themes/valo/util/_color.scss
new file mode 100644
index 0000000000..77fe0ed5c7
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_color.scss
@@ -0,0 +1,111 @@
+@import "blend-modes";
+
+// Returns the luminance of a color (0-255)
+// (perceived brightness, rather than absolute mathematical lightness value)
+//
+// "The luminance calculation is a weighted average of the color channels that approximates
+// how humans perceive brightness, while lightness is just an average of the largest and
+// smallest channels without regard to perception."
+//
+// Source for equation: http://en.wikipedia.org/wiki/Luminance_(relative)
+@function color-luminance ($color) {
+ @return 0.2126 * red($color) + 0.7152 * green($color) + 0.0722 * blue($color);
+}
+
+
+@function luminance-diff($color1, $color2) {
+ @return abs(color-luminance($color1) - color-luminance($color2));
+}
+
+@function saturation-diff($color1, $color2) {
+ @return abs(saturation($color1) - saturation($color2));
+}
+
+@function hue-diff($color1, $color2) {
+ @return abs(hue($color1) - hue($color2));
+}
+
+
+// Arbitrary luminance threshold after which colors should be adjusted either darker or lighter
+$v-luminance-threshold: 150 !default;
+
+
+
+@function black($opacity: 1) {
+ @return transparentize(#000, 1 - $opacity);
+}
+
+@function white($opacity: 1) {
+ @return transparentize(#fff, 1 - $opacity);
+}
+
+
+
+@function is-dark-color($bg-color) {
+ $luminance: color-luminance($bg-color);
+ @if $luminance < $v-luminance-threshold or (saturation($bg-color) > 80% and ($luminance < $v-luminance-threshold + 20)) {
+ @return true;
+ } @else {
+ @return false;
+ }
+}
+
+// Returns a text color with enough contrast for the given background color
+//
+@function v-valo-font-color ($bg-color, $contrast: 0.8) {
+ @if $bg-color {
+ @if is-dark-color($bg-color) {
+ @return scale_color($bg-color, $lightness: min(100%, 100% * $contrast), $saturation: max(-100%, -50% * $contrast));
+ } @else {
+ @return scale_color($bg-color, $lightness: max(-100%, -100% * $contrast * 0.9), $saturation: max(-100%, -50% * $contrast));
+ }
+ }
+ @return null;
+}
+
+
+@function v-valo-header-color ($bg-color, $contrast: 1) {
+ $font-color: v-valo-font-color($bg-color);
+ @if is-dark-color($bg-color) {
+ @return lighten($font-color, 30% * $contrast);
+ } @else {
+ @return darken($font-color, 20% * $contrast);
+ }
+}
+
+
+
+
+@function v-valo-focus-color ($color: null, $context: null) {
+ $context: $context or $v-app-background-color;
+
+ $fallback: $context;
+ @if is-dark-color($fallback) {
+ $fallback: scale-color($fallback, $lightness: 40%, $saturation: 80%);
+ } @else {
+ $fallback: scale-color($fallback, $lightness: -50%, $saturation: 80%);
+ }
+
+ $focus-color: $color or $v-focus-color or $fallback;
+ //@if luminance-diff($context, $focus-color) < 30 or (luminance-diff($context, $focus-color) < 10 and saturation-diff($context, $focus-color) < 20%) {
+ // $focus-color: #fff;
+ //}
+ @return $focus-color;
+}
+
+
+
+@function v-valo-focus-box-shadow ($color: null, $focus-style: $v-focus-style) {
+ $focus-color: v-valo-focus-color($color: $color);
+ @return replace($focus-style, focus-color, transparentize($focus-color, .5));
+}
+
+
+
+@function v-valo-selection-color ($color: null, $context: null) {
+ $selection-color: $color or $v-selection-color or v-valo-focus-color($color: $color, $context: $context);
+ //@if luminance-diff($context, $selection-color) < 30 or (luminance-diff($context, $selection-color) < 10 and saturation-diff($context, $selection-color) < 20%) {
+ // $selection-color: #fff;
+ //}
+ @return $selection-color;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/_css3.scss b/WebContent/VAADIN/themes/valo/util/_css3.scss
new file mode 100644
index 0000000000..c04930512c
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_css3.scss
@@ -0,0 +1,28 @@
+@mixin opacity ($o, $important: false) {
+ $imp: "";
+
+ @if $important {
+ $imp: "!important";
+ }
+
+ opacity: $o #{unquote($imp)};
+
+ @if $o < 1 {
+ filter: alpha(opacity=$o*100) #{unquote($imp)};
+ } @else {
+ filter: none #{unquote($imp)};
+ }
+}
+
+
+@mixin border-radius ($br) {
+ -webkit-border-radius: $br;
+ border-radius: $br;
+}
+
+
+@mixin width-breakpoint ($point) {
+ @media (max-width: $point) {
+ @content;
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/_gradient.scss b/WebContent/VAADIN/themes/valo/util/_gradient.scss
new file mode 100644
index 0000000000..6266fe9864
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_gradient.scss
@@ -0,0 +1,31 @@
+@mixin v-valo-gradient($color, $style: $v-gradient-style, $depth: $v-gradient-depth, $fallback: null, $direction: to bottom) {
+ @if $color {
+ @if $depth <= 0 {
+ background: $fallback or $color;
+ } @else {
+ $color-stops: v-valo-gradient-color-stops($color, $style, $depth);
+ @include linear-gradient($direction, $color-stops, $fallback: $fallback or $color);
+ }
+ }
+}
+
+@function v-valo-gradient-color-stops($color, $style: $v-gradient-style, $depth: $v-gradient-depth) {
+ @if $depth > 0 {
+
+ @if $style == linear or $style == linear-reverse {
+ $start: blend-overlay(transparentize(#fff, 1-$depth/100%), $color);
+ $end: blend-overlay(transparentize(#000, max(0, 1-$depth/100%)), $color);
+ $end: blend-multiply(transparentize(#000, max(0, 1-$depth/200%)), $end);
+
+ @if $style == linear {
+ @return $start 2%, $end 98%;
+ } @else {
+ @return $end 2%, $start 98%;
+ }
+
+ }
+
+ }
+
+ @return $color 0%, $color 100%;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/_lists.scss b/WebContent/VAADIN/themes/valo/util/_lists.scss
new file mode 100644
index 0000000000..aad9c2f611
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_lists.scss
@@ -0,0 +1,279 @@
+@function contains ($list, $var, $recursive: false) {
+ @if $recursive == false {
+ @return (false != index($list, $var));
+ }
+
+ $ret: false;
+ @each $item in $list {
+ @if type-of($item) == list and $recursive {
+ @if contains($item, $var, true) {
+ @return true;
+ }
+ } @else if $item == $var {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+// Author: Hugo Giraudel
+// Repository: https://github.com/Team-Sass/Sass-list-functions
+// License: MIT
+
+
+@function first($list) {
+ @return nth($list, 1);
+}
+
+
+@function last($list) {
+ @return nth($list, length($list));
+}
+
+
+@function last-index($list, $value) {
+ @for $i from length($list)*-1 through -1 {
+ @if nth($list, abs($i)) == $value {
+ @return abs($i);
+ }
+ }
+
+ @return null;
+}
+
+
+@function to-string($list, $glue: '', $is-nested: false) {
+ $result: null;
+
+ @for $i from 1 through length($list) {
+ $e: nth($list, $i);
+
+ @if type-of($e) == list {
+ $result: $result#{to-string($e, $glue, true)};
+ }
+
+ @else {
+ $result: if($i != length($list) or $is-nested, $result#{$e}#{$glue}, $result#{$e});
+ }
+ }
+
+ @return $result;
+}
+
+
+@function prepend($list, $value) {
+ @return join($value, $list);
+}
+
+
+@function insert-nth($list, $index, $value) {
+ $result: false;
+
+ @if type-of($index) != number {
+ @warn "$index: #{quote($index)} is not a number for `insert-nth`.";
+ @return $result;
+ }
+
+ @else if $index < 1 {
+ @warn "List index 0 must be a non-zero integer for `insert-nth`";
+ @return $result;
+ }
+
+ @else if $index > length($list) {
+ @warn "List index is #{$index} but list is only #{length($list)} item long for `insert-nth'.";
+ @return $result;
+ }
+
+ @else {
+ $result: ();
+
+ @for $i from 1 through length($list) {
+ @if $i == $index {
+ $result: append($result, $value);
+ }
+
+ $result: append($result, nth($list, $i));
+ }
+ }
+
+ @return $result;
+}
+
+
+@function replace-nth($list, $index, $value) {
+ $result: false;
+
+ @if type-of($index) != number {
+ @warn "$index: #{quote($index)} is not a number for `replace-nth`.";
+ @return $result;
+ }
+
+ @else if $index == 0 {
+ @warn "List index 0 must be a non-zero integer for `replace-nth`.";
+ @return $result;
+ }
+
+ @else if abs($index) > length($list) {
+ @warn "List index is #{$index} but list is only #{length($list)} item long for `replace-nth`.";
+ @return $result;
+ }
+
+ @else {
+ $result: ();
+ $index: if($index < 0, length($list) + $index + 1, $index);
+
+ @for $i from 1 through length($list) {
+ @if $i == $index {
+ $result: append($result, $value);
+ }
+
+ @else {
+ $result: append($result, nth($list, $i));
+ }
+ }
+ }
+
+ @return $result;
+}
+
+
+@function replace($list, $old-value, $new-value, $recursive: false) {
+ $result: ();
+
+ @for $i from 1 through length($list) {
+ @if type-of(nth($list, $i)) == list and $recursive {
+ $result: append($result, replace(nth($list, $i), $old-value, $new-value, $recursive));
+ }
+
+ @else {
+ @if nth($list, $i) == $old-value {
+ $result: append($result, $new-value);
+ }
+
+ @else {
+ $result: append($result, nth($list, $i));
+ }
+ }
+ }
+
+ @return $result;
+}
+
+
+@function remove-nth($list, $index) {
+ $result: false;
+
+ @if type-of($index) != number {
+ @warn "$index: #{quote($index)} is not a number for `remove-nth`.";
+ @return $result;
+ }
+
+ @else if $index == 0 {
+ @warn "List index 0 must be a non-zero integer for `remove-nth`.";
+ @return $result;
+ }
+
+ @else if abs($index) > length($list) {
+ @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
+ @return $result;
+ }
+
+ @else {
+ $result: ();
+ $index: if($index < 0, length($list) + $index + 1, $index);
+
+ @for $i from 1 through length($list) {
+ @if $i != $index {
+ $result: append($result, nth($list, $i));
+ }
+ }
+ }
+
+ @return $result;
+}
+
+
+@function remove($list, $value, $recursive: false) {
+ $result: ();
+
+ @for $i from 1 through length($list) {
+ @if type-of(nth($list, $i)) == list and $recursive {
+ $result: append($result, remove(nth($list, $i), $value, $recursive));
+ }
+
+ @else if nth($list, $i) != $value {
+ $result: append($result, nth($list, $i));
+ }
+ }
+
+ @return $result;
+}
+
+
+@function slice($list, $start: 1, $end: length($list)) {
+ $result: false;
+
+ @if type-of($start) != number or type-of($end) != number {
+ @warn "Either $start or $end are not a number for `slice`.";
+ @return $result;
+ }
+
+ @else if $start > $end {
+ @warn "The start index has to be lesser than or equals to the end index for `slice`.";
+ @return $result;
+ }
+
+ @else if $start < 1 or $end < 1 {
+ @warn "List indexes must be non-zero integers for `slice`.";
+ @return $result;
+ }
+
+ @else if $start > length($list) {
+ @warn "List index is #{$start} but list is only #{length($list)} item long for `slice`.";
+ @return $result;
+ }
+
+ @else if $end > length($list) {
+ @warn "List index is #{$end} but list is only #{length($list)} item long for `slice`.";
+ @return $result;
+ }
+
+ @else {
+ $result: ();
+
+ @for $i from $start through $end {
+ $result: append($result, nth($list, $i));
+ }
+ }
+
+ @return $result;
+}
+
+
+@function reverse($list, $recursive: false) {
+ $result: ();
+
+ @for $i from length($list)*-1 through -1 {
+ @if type-of(nth($list, abs($i))) == list and $recursive {
+ $result: append($result, reverse(nth($list, abs($i)), $recursive));
+ }
+
+ @else {
+ $result: append($result, nth($list, abs($i)));
+ }
+ }
+
+ @return $result;
+}
+
+
+@function shift($list, $value: 1) {
+ $result: ();
+
+ @for $i from 0 to length($list) {
+ $result: append($result, nth($list, ($i - $value) % length($list) + 1));
+ }
+
+ @return $result;
+} \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/_util.scss b/WebContent/VAADIN/themes/valo/util/_util.scss
new file mode 100644
index 0000000000..0472275c88
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/_util.scss
@@ -0,0 +1,45 @@
+// Align element vertically inside
+@mixin vertical-align-guide ($to-align: (), $align: middle, $pseudo-element: after) {
+ &:#{$pseudo-element} {
+ content: "";
+ display: inline-block;
+ width: 0;
+ height: 100%;
+ vertical-align: middle;
+ }
+
+ @if length($to-align) > 0 {
+ @each $selector in $to-align {
+ & > #{unquote($selector)} {
+ vertical-align: $align;
+ }
+ }
+ }
+}
+
+
+// Calculates the (approximated) square root for a given number
+@function sqrt($number) {
+ $guess: rand();
+ $root: 4; // Academic guess, a.k.a random number
+ @for $i from 1 through 10 {
+ $root: $root - ($root*$root - $number) / (2 * $root);
+ }
+ @return $root;
+}
+
+
+
+
+@mixin v-valo-round {
+ border-radius: 50%;
+}
+
+
+
+
+@mixin v-valo-tappable {
+ @include user-select(none);
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-touch-callout: none;
+} \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/_bourbon-deprecated-upcoming.scss b/WebContent/VAADIN/themes/valo/util/bourbon/_bourbon-deprecated-upcoming.scss
new file mode 100644
index 0000000000..5332496d82
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/_bourbon-deprecated-upcoming.scss
@@ -0,0 +1,13 @@
+//************************************************************************//
+// These mixins/functions are deprecated
+// They will be removed in the next MAJOR version release
+//************************************************************************//
+@mixin box-shadow ($shadows...) {
+ @include prefixer(box-shadow, $shadows, spec);
+ @warn "box-shadow is deprecated and will be removed in the next major version release";
+}
+
+@mixin background-size ($lengths...) {
+ @include prefixer(background-size, $lengths, spec);
+ @warn "background-size is deprecated and will be removed in the next major version release";
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/_bourbon.scss b/WebContent/VAADIN/themes/valo/util/bourbon/_bourbon.scss
new file mode 100644
index 0000000000..e97b2fe8d4
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/_bourbon.scss
@@ -0,0 +1,69 @@
+// Settings
+@import "settings/prefixer";
+@import "settings/px-to-em";
+
+// Custom Helpers
+@import "helpers/gradient-positions-parser";
+@import "helpers/linear-positions-parser";
+@import "helpers/radial-arg-parser";
+@import "helpers/radial-positions-parser";
+@import "helpers/render-gradients";
+@import "helpers/shape-size-stripper";
+
+// Custom Functions
+@import "functions/flex-grid";
+@import "functions/grid-width";
+@import "functions/golden-ratio";
+@import "functions/linear-gradient";
+@import "functions/modular-scale";
+@import "functions/px-to-em";
+@import "functions/radial-gradient";
+@import "functions/strip-units";
+@import "functions/tint-shade";
+@import "functions/transition-property-name";
+@import "functions/unpack";
+
+// CSS3 Mixins
+@import "css3/animation";
+@import "css3/appearance";
+@import "css3/backface-visibility";
+@import "css3/background";
+@import "css3/background-image";
+@import "css3/border-image";
+@import "css3/border-radius";
+@import "css3/box-sizing";
+@import "css3/calc";
+@import "css3/columns";
+@import "css3/flex-box";
+@import "css3/font-face";
+@import "css3/hyphens";
+@import "css3/hidpi-media-query";
+@import "css3/image-rendering";
+@import "css3/inline-block";
+@import "css3/keyframes";
+@import "css3/linear-gradient";
+@import "css3/perspective";
+@import "css3/radial-gradient";
+@import "css3/transform";
+@import "css3/transition";
+@import "css3/user-select";
+@import "css3/placeholder";
+
+// Addons & other mixins
+@import "addons/button";
+@import "addons/clearfix";
+@import "addons/directional-values";
+@import "addons/ellipsis";
+@import "addons/font-family";
+@import "addons/hide-text";
+//@import "addons/html5-input-types";
+@import "addons/position";
+@import "addons/prefixer";
+@import "addons/rem";
+@import "addons/retina-image";
+@import "addons/size";
+@import "addons/timing-functions";
+@import "addons/triangle";
+
+// Soon to be deprecated Mixins
+@import "bourbon-deprecated-upcoming";
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_button.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_button.scss
new file mode 100644
index 0000000000..fcc39fdf35
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_button.scss
@@ -0,0 +1,273 @@
+@mixin button ($style: simple, $base-color: #4294f0) {
+
+ @if type-of($style) == color {
+ $base-color: $style;
+ $style: simple;
+ }
+
+ // Grayscale button
+ @if $base-color == grayscale($base-color) {
+ @if $style == simple {
+ @include simple($base-color, $grayscale: true);
+ }
+
+ @else if $style == shiny {
+ @include shiny($base-color, $grayscale: true);
+ }
+
+ @else if $style == pill {
+ @include pill($base-color, $grayscale: true);
+ }
+ }
+
+ // Colored button
+ @else {
+ @if $style == simple {
+ @include simple($base-color);
+ }
+
+ @else if $style == shiny {
+ @include shiny($base-color);
+ }
+
+ @else if $style == pill {
+ @include pill($base-color);
+ }
+ }
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+}
+
+
+// Simple Button
+//************************************************************************//
+@mixin simple($base-color, $grayscale: false) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);
+ $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);
+ $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);
+
+ @if lightness($base-color) > 70% {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: bold;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: 7px 18px;
+ text-decoration: none;
+ text-shadow: 0 1px 0 $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);
+ $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ }
+
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ }
+
+ &:active:not(:disabled) {
+ $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);
+
+ @if $grayscale == true {
+ $border-active: grayscale($border-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ border: 1px solid $border-active;
+ box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active, 0 1px 1px 0 #eee;
+ }
+}
+
+
+// Shiny Button
+//************************************************************************//
+@mixin shiny($base-color, $grayscale: false) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
+ $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
+ $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);
+ $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);
+ $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);
+ $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
+ $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);
+
+ @if lightness($base-color) > 70% {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $border-bottom: grayscale($border-bottom);
+ $fourth-stop: grayscale($fourth-stop);
+ $inset-shadow: grayscale($inset-shadow);
+ $second-stop: grayscale($second-stop);
+ $text-shadow: grayscale($text-shadow);
+ $third-stop: grayscale($third-stop);
+ }
+
+ border: 1px solid $border;
+ border-bottom: 1px solid $border-bottom;
+ border-radius: 5px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: bold;
+ @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
+ padding: 8px 20px;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+
+ &:hover:not(:disabled) {
+ $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
+ $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
+ $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
+ $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);
+
+ @if $grayscale == true {
+ $first-stop-hover: grayscale($first-stop-hover);
+ $second-stop-hover: grayscale($second-stop-hover);
+ $third-stop-hover: grayscale($third-stop-hover);
+ $fourth-stop-hover: grayscale($fourth-stop-hover);
+ }
+
+ cursor: pointer;
+ @include linear-gradient(top, $first-stop-hover 0%,
+ $second-stop-hover 50%,
+ $third-stop-hover 50%,
+ $fourth-stop-hover 100%);
+ }
+
+ &:active:not(:disabled) {
+ $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);
+
+ @if $grayscale == true {
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ box-shadow: inset 0 0 20px 0 $inset-shadow-active, 0 1px 0 #fff;
+ }
+}
+
+
+// Pill Button
+//************************************************************************//
+@mixin pill($base-color, $grayscale: false) {
+ $color: hsl(0, 0, 100%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
+ $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);
+ $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);
+ $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);
+
+ @if lightness($base-color) > 70% {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ border-radius: 16px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow, 0 1px 2px 0 #b3b3b3;
+ color: $color;
+ display: inline-block;
+ font-size: inherit;
+ font-weight: normal;
+ line-height: 1;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: 5px 16px;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $lightness: -4.5%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);
+ $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);
+ $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ $text-shadow-hover: grayscale($text-shadow-hover);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+ text-shadow: 0 -1px 1px $text-shadow-hover;
+ background-clip: padding-box;
+ }
+
+ &:active:not(:disabled) {
+ $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);
+ $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);
+ $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);
+ $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);
+ $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);
+
+ @if $grayscale == true {
+ $active-color: grayscale($active-color);
+ $border-active: grayscale($border-active);
+ $border-bottom-active: grayscale($border-bottom-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ $text-shadow-active: grayscale($text-shadow-active);
+ }
+
+ background: $active-color;
+ border: 1px solid $border-active;
+ border-bottom: 1px solid $border-bottom-active;
+ box-shadow: inset 0 0 6px 3px $inset-shadow-active, 0 1px 0 0 #fff;
+ text-shadow: 0 -1px 1px $text-shadow-active;
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_clearfix.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_clearfix.scss
new file mode 100644
index 0000000000..783cfbc792
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_clearfix.scss
@@ -0,0 +1,23 @@
+// Modern micro clearfix provides an easy way to contain floats without adding additional markup.
+//
+// Example usage:
+//
+// // Contain all floats within .wrapper
+// .wrapper {
+// @include clearfix;
+// .content,
+// .sidebar {
+// float : left;
+// }
+// }
+
+@mixin clearfix {
+ &:after {
+ content:"";
+ display:table;
+ clear:both;
+ }
+}
+
+// Acknowledgements
+// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_directional-values.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_directional-values.scss
new file mode 100644
index 0000000000..4818f62fd8
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_directional-values.scss
@@ -0,0 +1,114 @@
+// directional-property mixins are shorthands
+// for writing properties like the following
+//
+// @include margin(null 0 10px);
+// ------
+// margin-right: 0;
+// margin-bottom: 10px;
+// margin-left: 0;
+//
+// - or -
+//
+// @include border-style(dotted null);
+// ------
+// border-top-style: dotted;
+// border-bottom-style: dotted;
+//
+// ------
+//
+// Note: You can also use false instead of null
+
+@function collapse-directionals($vals) {
+ $output: null;
+
+ $A: nth( $vals, 1 );
+ $B: if( length($vals) < 2, $A, nth($vals, 2));
+ $C: if( length($vals) < 3, $A, nth($vals, 3));
+ $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) ));
+
+ @if $A == 0 { $A: 0 }
+ @if $B == 0 { $B: 0 }
+ @if $C == 0 { $C: 0 }
+ @if $D == 0 { $D: 0 }
+
+ @if $A == $B and $A == $C and $A == $D { $output: $A }
+ @else if $A == $C and $B == $D { $output: $A $B }
+ @else if $B == $D { $output: $A $B $C }
+ @else { $output: $A $B $C $D }
+
+ @return $output;
+}
+
+@function contains-falsy($list) {
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+@mixin directional-property($pre, $suf, $vals) {
+ // Property Names
+ $top: $pre + "-top" + if($suf, "-#{$suf}", "");
+ $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", "");
+ $left: $pre + "-left" + if($suf, "-#{$suf}", "");
+ $right: $pre + "-right" + if($suf, "-#{$suf}", "");
+ $all: $pre + if($suf, "-#{$suf}", "");
+
+ // Get list inside $vals (is there a better way?)
+ @each $val in $vals { $vals: $val; }
+
+ $vals: collapse-directionals($vals);
+
+ @if contains-falsy($vals) {
+ @if nth($vals, 1) { #{$top}: nth($vals, 1); }
+
+ @if length($vals) == 1 {
+ @if nth($vals, 1) { #{$right}: nth($vals, 1); }
+ } @else {
+ @if nth($vals, 2) { #{$right}: nth($vals, 2); }
+ }
+
+ // prop: top/bottom right/left
+ @if length($vals) == 2 {
+ @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right/left bottom
+ } @else if length($vals) == 3 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+
+ // prop: top right bottom left
+ } @else if length($vals) == 4 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 4) { #{$left}: nth($vals, 4); }
+ }
+
+ // prop: top/right/bottom/left
+ } @else {
+ #{$all}: $vals;
+ }
+}
+
+@mixin margin($vals...) {
+ @include directional-property(margin, false, $vals);
+}
+
+@mixin padding($vals...) {
+ @include directional-property(padding, false, $vals);
+}
+
+@mixin border-style($vals...) {
+ @include directional-property(border, style, $vals);
+}
+
+@mixin border-color($vals...) {
+ @include directional-property(border, color, $vals);
+}
+
+@mixin border-width($vals...) {
+ @include directional-property(border, width, $vals);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_ellipsis.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_ellipsis.scss
new file mode 100644
index 0000000000..a8ea2a4a86
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_ellipsis.scss
@@ -0,0 +1,7 @@
+@mixin ellipsis($width: 100%) {
+ display: inline-block;
+ max-width: $width;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_font-family.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_font-family.scss
new file mode 100644
index 0000000000..31f5d9ca75
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_font-family.scss
@@ -0,0 +1,5 @@
+$georgia: Georgia, Cambria, "Times New Roman", Times, serif;
+$helvetica: "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif;
+$lucida-grande: "Lucida Grande", Tahoma, Verdana, Arial, sans-serif;
+$monospace: "Bitstream Vera Sans Mono", Consolas, Courier, monospace;
+$verdana: Verdana, Geneva, sans-serif;
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_hide-text.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_hide-text.scss
new file mode 100644
index 0000000000..fc7943811d
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_hide-text.scss
@@ -0,0 +1,10 @@
+@mixin hide-text {
+ overflow: hidden;
+
+ &:before {
+ content: "";
+ display: block;
+ width: 0;
+ height: 100%;
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_html5-input-types.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_html5-input-types.scss
new file mode 100644
index 0000000000..26fc879021
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_html5-input-types.scss
@@ -0,0 +1,110 @@
+//************************************************************************//
+// Generate a variable ($all-text-inputs) with a list of all html5
+// input types that have a text-based input, excluding textarea.
+// http://diveintohtml5.org/forms.html
+//************************************************************************//
+$inputs-list: 'input[type="email"]',
+ 'input[type="number"]',
+ 'input[type="password"]',
+ 'input[type="search"]',
+ 'input[type="tel"]',
+ 'input[type="text"]',
+ 'input[type="url"]',
+
+ // Webkit & Gecko may change the display of these in the future
+ 'input[type="color"]',
+ 'input[type="date"]',
+ 'input[type="datetime"]',
+ 'input[type="datetime-local"]',
+ 'input[type="month"]',
+ 'input[type="time"]',
+ 'input[type="week"]';
+
+$unquoted-inputs-list: ();
+@each $input-type in $inputs-list {
+ $unquoted-inputs-list: append($unquoted-inputs-list, unquote($input-type), comma) !global;
+}
+
+$all-text-inputs: $unquoted-inputs-list;
+
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-text-inputs-hover: ();
+@each $input-type in $unquoted-inputs-list {
+ $input-type-hover: $input-type + ":hover";
+ $all-text-inputs-hover: append($all-text-inputs-hover, $input-type-hover, comma) !global;
+}
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-text-inputs-focus: ();
+@each $input-type in $unquoted-inputs-list {
+ $input-type-focus: $input-type + ":focus";
+ $all-text-inputs-focus: append($all-text-inputs-focus, $input-type-focus, comma) !global;
+}
+
+// You must use interpolation on the variable:
+// #{$all-text-inputs}
+// #{$all-text-inputs-hover}
+// #{$all-text-inputs-focus}
+
+// Example
+//************************************************************************//
+// #{$all-text-inputs}, textarea {
+// border: 1px solid red;
+// }
+
+
+
+//************************************************************************//
+// Generate a variable ($all-button-inputs) with a list of all html5
+// input types that have a button-based input, excluding button.
+//************************************************************************//
+$inputs-button-list: 'input[type="button"]',
+ 'input[type="reset"]',
+ 'input[type="submit"]';
+
+$unquoted-inputs-button-list: ();
+@each $input-type in $inputs-button-list {
+ $unquoted-inputs-button-list: append($unquoted-inputs-button-list, unquote($input-type), comma);
+}
+
+$all-button-inputs: $unquoted-inputs-button-list;
+
+
+// Hover Pseudo-class
+//************************************************************************//
+$all-button-inputs-hover: ();
+@each $input-type in $unquoted-inputs-button-list {
+ $input-type-hover: $input-type + ":hover";
+ $all-button-inputs-hover: append($all-button-inputs-hover, $input-type-hover, comma);
+}
+
+// Focus Pseudo-class
+//************************************************************************//
+$all-button-inputs-focus: ();
+@each $input-type in $unquoted-inputs-button-list {
+ $input-type-focus: $input-type + ":focus";
+ $all-button-inputs-focus: append($all-button-inputs-focus, $input-type-focus, comma);
+}
+
+// Active Pseudo-class
+//************************************************************************//
+$all-button-inputs-active: ();
+@each $input-type in $unquoted-inputs-button-list {
+ $input-type-active: $input-type + ":active";
+ $all-button-inputs-active: append($all-button-inputs-active, $input-type-active, comma);
+}
+
+// You must use interpolation on the variable:
+// #{$all-button-inputs}
+// #{$all-button-inputs-hover}
+// #{$all-button-inputs-focus}
+// #{$all-button-inputs-active}
+
+// Example
+//************************************************************************//
+// #{$all-button-inputs}, button {
+// border: 1px solid red;
+// }
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_position.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_position.scss
new file mode 100644
index 0000000000..aba34edcd9
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_position.scss
@@ -0,0 +1,32 @@
+@mixin position ($position: relative, $coordinates: 0 0 0 0) {
+
+ @if type-of($position) == list {
+ $coordinates: $position;
+ $position: relative;
+ }
+
+ $coordinates: unpack($coordinates);
+
+ $top: nth($coordinates, 1);
+ $right: nth($coordinates, 2);
+ $bottom: nth($coordinates, 3);
+ $left: nth($coordinates, 4);
+
+ position: $position;
+
+ @if ($top and $top == auto) or (type-of($top) == number and not unitless($top)) {
+ top: $top;
+ }
+
+ @if ($right and $right == auto) or (type-of($right) == number and not unitless($right)) {
+ right: $right;
+ }
+
+ @if ($bottom and $bottom == auto) or (type-of($bottom) == number and not unitless($bottom)) {
+ bottom: $bottom;
+ }
+
+ @if ($left and $left == auto) or (type-of($left) == number and not unitless($left)) {
+ left: $left;
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_prefixer.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_prefixer.scss
new file mode 100644
index 0000000000..bac1aed2cc
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_prefixer.scss
@@ -0,0 +1,45 @@
+//************************************************************************//
+// Example: @include prefixer(border-radius, $radii, webkit ms spec);
+//************************************************************************//
+// Variables located in /settings/_prefixer.scss
+
+@mixin prefixer ($property, $value, $prefixes) {
+ @each $prefix in $prefixes {
+ @if $prefix == webkit {
+ @if $prefix-for-webkit {
+ -webkit-#{$property}: $value;
+ }
+ }
+ @else if $prefix == moz {
+ @if $prefix-for-mozilla {
+ -moz-#{$property}: $value;
+ }
+ }
+ @else if $prefix == ms {
+ @if $prefix-for-microsoft {
+ -ms-#{$property}: $value;
+ }
+ }
+ @else if $prefix == o {
+ @if $prefix-for-opera {
+ -o-#{$property}: $value;
+ }
+ }
+ @else if $prefix == spec {
+ @if $prefix-for-spec {
+ #{$property}: $value;
+ }
+ }
+ @else {
+ @warn "Unrecognized prefix: #{$prefix}";
+ }
+ }
+}
+
+@mixin disable-prefix-for-all() {
+ $prefix-for-webkit: false;
+ $prefix-for-mozilla: false;
+ $prefix-for-microsoft: false;
+ $prefix-for-opera: false;
+ $prefix-for-spec: false;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_rem.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_rem.scss
new file mode 100644
index 0000000000..ddd7022b44
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_rem.scss
@@ -0,0 +1,33 @@
+@mixin rem($property, $size, $base: $em-base) {
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+
+ $unitless_values: ();
+ @each $num in $size {
+ @if not unitless($num) {
+ @if unit($num) == "em" {
+ $num: $num * $base;
+ }
+
+ $num: strip-units($num);
+ }
+
+ $unitless_values: append($unitless_values, $num);
+ }
+ $size: $unitless_values;
+
+ $pixel_values: ();
+ $rem_values: ();
+ @each $value in $pxval {
+ $pixel_value: $value * 1px;
+ $pixel_values: append($pixel_values, $pixel_value);
+
+ $rem_value: ($value / $base) * 1rem;
+ $rem_values: append($rem_values, $rem_value);
+ }
+
+ #{$property}: $pixel_values;
+ #{$property}: $rem_values;
+}
+
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_retina-image.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_retina-image.scss
new file mode 100644
index 0000000000..7931bd1333
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_retina-image.scss
@@ -0,0 +1,31 @@
+@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) {
+ @if $asset-pipeline {
+ background-image: image-url("#{$filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}.#{$extension}");
+ }
+
+ @include hidpi {
+ @if $asset-pipeline {
+ @if $retina-filename {
+ background-image: image-url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ @else {
+ @if $retina-filename {
+ background-image: url("#{$retina-filename}.#{$extension}");
+ }
+ @else {
+ background-image: url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ background-size: $background-size;
+
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_size.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_size.scss
new file mode 100644
index 0000000000..342e41b79f
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_size.scss
@@ -0,0 +1,44 @@
+@mixin size($size) {
+ @if length($size) == 1 {
+ @if $size == auto {
+ width: $size;
+ height: $size;
+ }
+
+ @else if unitless($size) {
+ width: $size + px;
+ height: $size + px;
+ }
+
+ @else if not(unitless($size)) {
+ width: $size;
+ height: $size;
+ }
+ }
+
+ // Width x Height
+ @if length($size) == 2 {
+ $width: nth($size, 1);
+ $height: nth($size, 2);
+
+ @if $width == auto {
+ width: $width;
+ }
+ @else if not(unitless($width)) {
+ width: $width;
+ }
+ @else if unitless($width) {
+ width: $width + px;
+ }
+
+ @if $height == auto {
+ height: $height;
+ }
+ @else if not(unitless($height)) {
+ height: $height;
+ }
+ @else if unitless($height) {
+ height: $height + px;
+ }
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_timing-functions.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_timing-functions.scss
new file mode 100644
index 0000000000..51b2410914
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_timing-functions.scss
@@ -0,0 +1,32 @@
+// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)
+// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html
+
+// EASE IN
+$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);
+$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);
+$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);
+$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);
+$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);
+$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);
+
+// EASE OUT
+$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);
+$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);
+$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);
+$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);
+$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);
+$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);
+$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);
+
+// EASE IN OUT
+$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);
+$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);
+$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
+$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
+$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
+$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);
+$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/addons/_triangle.scss b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_triangle.scss
new file mode 100644
index 0000000000..0e02aca2ca
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/addons/_triangle.scss
@@ -0,0 +1,45 @@
+@mixin triangle ($size, $color, $direction) {
+ height: 0;
+ width: 0;
+
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
+ border-color: transparent;
+ border-style: solid;
+ border-width: $size / 2;
+
+ @if $direction == up {
+ border-bottom-color: $color;
+
+ } @else if $direction == right {
+ border-left-color: $color;
+
+ } @else if $direction == down {
+ border-top-color: $color;
+
+ } @else if $direction == left {
+ border-right-color: $color;
+ }
+ }
+
+ @else if ($direction == up-right) or ($direction == up-left) {
+ border-top: $size solid $color;
+
+ @if $direction == up-right {
+ border-left: $size solid transparent;
+
+ } @else if $direction == up-left {
+ border-right: $size solid transparent;
+ }
+ }
+
+ @else if ($direction == down-right) or ($direction == down-left) {
+ border-bottom: $size solid $color;
+
+ @if $direction == down-right {
+ border-left: $size solid transparent;
+
+ } @else if $direction == down-left {
+ border-right: $size solid transparent;
+ }
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_animation.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_animation.scss
new file mode 100644
index 0000000000..08c3dbf157
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_animation.scss
@@ -0,0 +1,52 @@
+// http://www.w3.org/TR/css3-animations/#the-animation-name-property-
+// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.
+
+// Official animation shorthand property.
+@mixin animation ($animations...) {
+ @include prefixer(animation, $animations, webkit moz spec);
+}
+
+// Individual Animation Properties
+@mixin animation-name ($names...) {
+ @include prefixer(animation-name, $names, webkit moz spec);
+}
+
+
+@mixin animation-duration ($times...) {
+ @include prefixer(animation-duration, $times, webkit moz spec);
+}
+
+
+@mixin animation-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out
+ @include prefixer(animation-timing-function, $motions, webkit moz spec);
+}
+
+
+@mixin animation-iteration-count ($values...) {
+// infinite | <number>
+ @include prefixer(animation-iteration-count, $values, webkit moz spec);
+}
+
+
+@mixin animation-direction ($directions...) {
+// normal | alternate
+ @include prefixer(animation-direction, $directions, webkit moz spec);
+}
+
+
+@mixin animation-play-state ($states...) {
+// running | paused
+ @include prefixer(animation-play-state, $states, webkit moz spec);
+}
+
+
+@mixin animation-delay ($times...) {
+ @include prefixer(animation-delay, $times, webkit moz spec);
+}
+
+
+@mixin animation-fill-mode ($modes...) {
+// none | forwards | backwards | both
+ @include prefixer(animation-fill-mode, $modes, webkit moz spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_appearance.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_appearance.scss
new file mode 100644
index 0000000000..3eb16e45de
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_appearance.scss
@@ -0,0 +1,3 @@
+@mixin appearance ($value) {
+ @include prefixer(appearance, $value, webkit moz ms o spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_backface-visibility.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_backface-visibility.scss
new file mode 100644
index 0000000000..1161fe60dd
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_backface-visibility.scss
@@ -0,0 +1,6 @@
+//************************************************************************//
+// Backface-visibility mixin
+//************************************************************************//
+@mixin backface-visibility($visibility) {
+ @include prefixer(backface-visibility, $visibility, webkit spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_background-image.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_background-image.scss
new file mode 100644
index 0000000000..17016b91b9
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_background-image.scss
@@ -0,0 +1,48 @@
+//************************************************************************//
+// Background-image property for adding multiple background images with
+// gradients, or for stringing multiple gradients together.
+//************************************************************************//
+
+@mixin background-image($images...) {
+ background-image: _add-prefix($images, webkit);
+ background-image: _add-prefix($images);
+}
+
+@function _add-prefix($images, $vendor: false) {
+ $images-prefixed: ();
+ $gradient-positions: false;
+ @for $i from 1 through length($images) {
+ $type: type-of(nth($images, $i)); // Get type of variable - List or String
+
+ // If variable is a list - Gradient
+ @if $type == list {
+ $gradient-type: nth(nth($images, $i), 1); // linear or radial
+ $gradient-pos: null;
+ $gradient-args: null;
+
+ @if ($gradient-type == linear) or ($gradient-type == radial) {
+ $gradient-pos: nth(nth($images, $i), 2); // Get gradient position
+ $gradient-args: nth(nth($images, $i), 3); // Get actual gradient (red, blue)
+ }
+ @else {
+ $gradient-args: nth(nth($images, $i), 2); // Get actual gradient (red, blue)
+ }
+
+ $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
+ $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
+ $images-prefixed: append($images-prefixed, $gradient, comma);
+ }
+ // If variable is a string - Image
+ @else if $type == string {
+ $images-prefixed: join($images-prefixed, nth($images, $i), comma);
+ }
+ }
+ @return $images-prefixed;
+}
+
+//Examples:
+ //@include background-image(linear-gradient(top, orange, red));
+ //@include background-image(radial-gradient(50% 50%, cover circle, orange, red));
+ //@include background-image(url("/images/a.png"), linear-gradient(orange, red));
+ //@include background-image(url("image.png"), linear-gradient(orange, red), url("image.png"));
+ //@include background-image(linear-gradient(hsla(0, 100%, 100%, 0.25) 0%, hsla(0, 100%, 100%, 0.08) 50%, transparent 50%), linear-gradient(orange, red));
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_background.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_background.scss
new file mode 100644
index 0000000000..975f0a6e5f
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_background.scss
@@ -0,0 +1,103 @@
+//************************************************************************//
+// Background property for adding multiple backgrounds using shorthand
+// notation.
+//************************************************************************//
+
+@mixin background(
+ $background-1 , $background-2: null,
+ $background-3: null, $background-4: null,
+ $background-5: null, $background-6: null,
+ $background-7: null, $background-8: null,
+ $background-9: null, $background-10: null,
+ $fallback: null
+) {
+ $backgrounds: $background-1, $background-2,
+ $background-3, $background-4,
+ $background-5, $background-6,
+ $background-7, $background-8,
+ $background-9, $background-10;
+
+ $fallback-color: false;
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+ @else {
+ $fallback-color: _extract-background-color($backgrounds);
+ }
+
+ @if $fallback-color {
+ background-color: $fallback-color;
+ }
+ background: _background-add-prefix($backgrounds, webkit);
+ background: _background-add-prefix($backgrounds);
+}
+
+@function _extract-background-color($backgrounds) {
+ $final-bg-layer: nth($backgrounds, length($backgrounds));
+ @if type-of($final-bg-layer) == list {
+ @for $i from 1 through length($final-bg-layer) {
+ $value: nth($final-bg-layer, $i);
+ @if type-of($value) == color {
+ @return $value;
+ }
+ }
+ }
+ @return false;
+}
+
+@function _background-add-prefix($backgrounds, $vendor: false) {
+ $backgrounds-prefixed: ();
+
+ @for $i from 1 through length($backgrounds) {
+ $shorthand: nth($backgrounds, $i); // Get member for current index
+ $type: type-of($shorthand); // Get type of variable - List (gradient) or String (image)
+
+ // If shorthand is a list (gradient)
+ @if $type == list {
+ $first-member: nth($shorthand, 1); // Get first member of shorthand
+
+ // Linear Gradient
+ @if index(linear radial, nth($first-member, 1)) {
+ $gradient-type: nth($first-member, 1); // linear || radial
+ $gradient-args: false;
+ $gradient-positions: false;
+ $shorthand-start: false;
+ @if type-of($first-member) == list { // Linear gradient plus additional shorthand values - lg(red,orange)repeat,...
+ $gradient-positions: nth($first-member, 2);
+ $gradient-args: nth($first-member, 3);
+ $shorthand-start: 2;
+ }
+ @else { // Linear gradient only - lg(red,orange),...
+ $gradient-positions: nth($shorthand, 2);
+ $gradient-args: nth($shorthand, 3); // Get gradient (red, blue)
+ }
+
+ $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-positions);
+ $gradient: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
+
+ // Append any additional shorthand args to gradient
+ @if $shorthand-start {
+ @for $j from $shorthand-start through length($shorthand) {
+ $gradient: join($gradient, nth($shorthand, $j), space);
+ }
+ }
+ $backgrounds-prefixed: append($backgrounds-prefixed, $gradient, comma);
+ }
+ // Image with additional properties
+ @else {
+ $backgrounds-prefixed: append($backgrounds-prefixed, $shorthand, comma);
+ }
+ }
+ // If shorthand is a simple string (color or image)
+ @else if $type == string {
+ $backgrounds-prefixed: join($backgrounds-prefixed, $shorthand, comma);
+ }
+ }
+ @return $backgrounds-prefixed;
+}
+
+//Examples:
+ //@include background(linear-gradient(top, orange, red));
+ //@include background(radial-gradient(circle at 40% 40%, orange, red));
+ //@include background(url("/images/a.png") no-repeat, linear-gradient(orange, red));
+ //@include background(url("image.png") center center, linear-gradient(orange, red), url("image.png"));
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-image.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-image.scss
new file mode 100644
index 0000000000..e552ee442e
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-image.scss
@@ -0,0 +1,56 @@
+@mixin border-image($images) {
+ -webkit-border-image: _border-add-prefix($images, webkit);
+ -moz-border-image: _border-add-prefix($images, moz);
+ -o-border-image: _border-add-prefix($images, o);
+ border-image: _border-add-prefix($images);
+ border-style: solid;
+}
+
+@function _border-add-prefix($images, $vendor: false) {
+ $border-image: null;
+ $images-type: type-of(nth($images, 1));
+ $first-var: nth(nth($images, 1), 1); // Get type of Gradient (Linear || radial)
+
+ // If input is a gradient
+ @if $images-type == string {
+ @if ($first-var == "linear") or ($first-var == "radial") {
+ $gradient-type: nth($images, 1); // Get type of gradient (linear || radial)
+ $gradient-pos: nth($images, 2); // Get gradient position
+ $gradient-args: nth($images, 3); // Get actual gradient (red, blue)
+ $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
+ $border-image: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
+ }
+ // If input is a URL
+ @else {
+ $border-image: $images;
+ }
+ }
+ // If input is gradient or url + additional args
+ @else if $images-type == list {
+ $type: type-of(nth($images, 1)); // Get type of variable - List or String
+
+ // If variable is a list - Gradient
+ @if $type == list {
+ $gradient: nth($images, 1);
+ $gradient-type: nth($gradient, 1); // Get type of gradient (linear || radial)
+ $gradient-pos: nth($gradient, 2); // Get gradient position
+ $gradient-args: nth($gradient, 3); // Get actual gradient (red, blue)
+ $gradient-positions: _gradient-positions-parser($gradient-type, $gradient-pos);
+ $border-image: _render-gradients($gradient-positions, $gradient-args, $gradient-type, $vendor);
+
+ @for $i from 2 through length($images) {
+ $border-image: append($border-image, nth($images, $i));
+ }
+ }
+ }
+ @return $border-image;
+}
+
+//Examples:
+// @include border-image(url("image.png"));
+// @include border-image(url("image.png") 20 stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow));
+// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
+// @include border-image(radial-gradient(top, cover, orange, yellow, orange));
+
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-radius.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-radius.scss
new file mode 100644
index 0000000000..7c17190109
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_border-radius.scss
@@ -0,0 +1,22 @@
+//************************************************************************//
+// Shorthand Border-radius mixins
+//************************************************************************//
+@mixin border-top-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-top-right-radius, $radii, spec);
+}
+
+@mixin border-bottom-radius($radii) {
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
+
+@mixin border-left-radius($radii) {
+ @include prefixer(border-top-left-radius, $radii, spec);
+ @include prefixer(border-bottom-left-radius, $radii, spec);
+}
+
+@mixin border-right-radius($radii) {
+ @include prefixer(border-top-right-radius, $radii, spec);
+ @include prefixer(border-bottom-right-radius, $radii, spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_box-sizing.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_box-sizing.scss
new file mode 100644
index 0000000000..f07e1d412e
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_box-sizing.scss
@@ -0,0 +1,4 @@
+@mixin box-sizing ($box) {
+// content-box | border-box | inherit
+ @include prefixer(box-sizing, $box, webkit moz spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_calc.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_calc.scss
new file mode 100644
index 0000000000..94d7e4cef3
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_calc.scss
@@ -0,0 +1,4 @@
+@mixin calc($property, $value) {
+ #{$property}: -webkit-calc(#{$value});
+ #{$property}: calc(#{$value});
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_columns.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_columns.scss
new file mode 100644
index 0000000000..42274a4eeb
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_columns.scss
@@ -0,0 +1,47 @@
+@mixin columns($arg: auto) {
+// <column-count> || <column-width>
+ @include prefixer(columns, $arg, webkit moz spec);
+}
+
+@mixin column-count($int: auto) {
+// auto || integer
+ @include prefixer(column-count, $int, webkit moz spec);
+}
+
+@mixin column-gap($length: normal) {
+// normal || length
+ @include prefixer(column-gap, $length, webkit moz spec);
+}
+
+@mixin column-fill($arg: auto) {
+// auto || length
+ @include prefixer(columns-fill, $arg, webkit moz spec);
+}
+
+@mixin column-rule($arg) {
+// <border-width> || <border-style> || <color>
+ @include prefixer(column-rule, $arg, webkit moz spec);
+}
+
+@mixin column-rule-color($color) {
+ @include prefixer(column-rule-color, $color, webkit moz spec);
+}
+
+@mixin column-rule-style($style: none) {
+// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid
+ @include prefixer(column-rule-style, $style, webkit moz spec);
+}
+
+@mixin column-rule-width ($width: none) {
+ @include prefixer(column-rule-width, $width, webkit moz spec);
+}
+
+@mixin column-span($arg: none) {
+// none || all
+ @include prefixer(column-span, $arg, webkit moz spec);
+}
+
+@mixin column-width($length: auto) {
+// auto || length
+ @include prefixer(column-width, $length, webkit moz spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_flex-box.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_flex-box.scss
new file mode 100644
index 0000000000..b48476e870
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_flex-box.scss
@@ -0,0 +1,321 @@
+// CSS3 Flexible Box Model and property defaults
+
+// Custom shorthand notation for flexbox
+@mixin box($orient: inline-axis, $pack: start, $align: stretch) {
+ @include display-box;
+ @include box-orient($orient);
+ @include box-pack($pack);
+ @include box-align($align);
+}
+
+@mixin display-box {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox; // IE 10
+ display: box;
+}
+
+@mixin box-orient($orient: inline-axis) {
+// horizontal|vertical|inline-axis|block-axis|inherit
+ @include prefixer(box-orient, $orient, webkit moz spec);
+}
+
+@mixin box-pack($pack: start) {
+// start|end|center|justify
+ @include prefixer(box-pack, $pack, webkit moz spec);
+ -ms-flex-pack: $pack; // IE 10
+}
+
+@mixin box-align($align: stretch) {
+// start|end|center|baseline|stretch
+ @include prefixer(box-align, $align, webkit moz spec);
+ -ms-flex-align: $align; // IE 10
+}
+
+@mixin box-direction($direction: normal) {
+// normal|reverse|inherit
+ @include prefixer(box-direction, $direction, webkit moz spec);
+ -ms-flex-direction: $direction; // IE 10
+}
+
+@mixin box-lines($lines: single) {
+// single|multiple
+ @include prefixer(box-lines, $lines, webkit moz spec);
+}
+
+@mixin box-ordinal-group($int: 1) {
+ @include prefixer(box-ordinal-group, $int, webkit moz spec);
+ -ms-flex-order: $int; // IE 10
+}
+
+@mixin box-flex($value: 0.0) {
+ @include prefixer(box-flex, $value, webkit moz spec);
+ -ms-flex: $value; // IE 10
+}
+
+@mixin box-flex-group($int: 1) {
+ @include prefixer(box-flex-group, $int, webkit moz spec);
+}
+
+// CSS3 Flexible Box Model and property defaults
+// Unified attributes for 2009, 2011, and 2012 flavours.
+
+// 2009 - display (box | inline-box)
+// 2011 - display (flexbox | inline-flexbox)
+// 2012 - display (flex | inline-flex)
+@mixin display($value) {
+// flex | inline-flex
+ @if $value == "flex" {
+ // 2009
+ display: -webkit-box;
+ display: -moz-box;
+ display: box;
+
+ // 2012
+ display: -webkit-flex;
+ display: -moz-flex;
+ display: -ms-flexbox; // 2011 (IE 10)
+ display: flex;
+ }
+
+ @elseif $value == "inline-flex" {
+ display: -webkit-inline-box;
+ display: -moz-inline-box;
+ display: inline-box;
+
+ display: -webkit-inline-flex;
+ display: -moz-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ }
+
+ @else {
+ display: $value;
+ }
+}
+
+// 2009 - box-flex (integer)
+// 2011 - flex (decimal | width decimal)
+// 2012 - flex (integer integer width)
+@mixin flex($value) {
+
+ // Grab flex-grow for older browsers.
+ $flex-grow: nth($value, 1);
+
+ // 2009
+ @include prefixer(box-flex, $flex-grow, webkit moz spec);
+
+ // 2011 (IE 10), 2012
+ @include prefixer(flex, $value, webkit moz ms spec);
+}
+
+// 2009 - box-orient ( horizontal | vertical | inline-axis | block-axis)
+// - box-direction (normal | reverse)
+// 2011 - flex-direction (row | row-reverse | column | column-reverse)
+// 2012 - flex-direction (row | row-reverse | column | column-reverse)
+@mixin flex-direction($value: row) {
+
+ // Alt values.
+ $value-2009: $value;
+ $value-2011: $value;
+ $direction: "normal";
+
+ @if $value == row {
+ $value-2009: horizontal;
+ }
+
+ @elseif $value == "row-reverse" {
+ $value-2009: horizontal;
+ $direction: reverse;
+ }
+
+ @elseif $value == column {
+ $value-2009: vertical;
+ }
+
+ @elseif $value == "column-reverse" {
+ $value-2009: vertical;
+ $direction: reverse;
+ }
+
+ // 2009
+ @include prefixer(box-orient, $value-2009, webkit moz spec);
+ @if $direction == "reverse" {
+ @include prefixer(box-direction, $direction, webkit moz spec);
+ }
+
+ // 2012
+ @include prefixer(flex-direction, $value, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-direction: $value;
+}
+
+// 2009 - box-lines (single | multiple)
+// 2011 - flex-wrap (nowrap | wrap | wrap-reverse)
+// 2012 - flex-wrap (nowrap | wrap | wrap-reverse)
+@mixin flex-wrap($value: nowrap) {
+
+ // Alt values.
+ $alt-value: $value;
+ @if $value == nowrap {
+ $alt-value: single;
+ }
+
+ @elseif $value == wrap {
+ $alt-value: multiple;
+ }
+
+ @elseif $value == "wrap-reverse" {
+ $alt-value: multiple;
+ }
+
+ @include prefixer(box-lines, $alt-value, webkit moz spec);
+ @include prefixer(flex-wrap, $value, webkit moz ms spec);
+}
+
+// 2009 - TODO: parse values into flex-direction/flex-wrap
+// 2011 - TODO: parse values into flex-direction/flex-wrap
+// 2012 - flex-flow (flex-direction || flex-wrap)
+@mixin flex-flow($value) {
+ @include prefixer(flex-flow, $value, webkit moz spec);
+}
+
+// 2009 - box-ordinal-group (integer)
+// 2011 - flex-order (integer)
+// 2012 - order (integer)
+@mixin order($int: 0) {
+ // 2009
+ @include prefixer(box-ordinal-group, $int, webkit moz spec);
+
+ // 2012
+ @include prefixer(order, $int, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-order: $int;
+}
+
+// 2012 - flex-grow (number)
+@mixin flex-grow($number: 0) {
+ @include prefixer(flex-grow, $number, webkit moz spec);
+ -ms-flex-positive: $number;
+}
+
+// 2012 - flex-shrink (number)
+@mixin flex-shrink($number: 1) {
+ @include prefixer(flex-shrink, $number, webkit moz spec);
+ -ms-flex-negative: $number;
+}
+
+// 2012 - flex-basis (number)
+@mixin flex-basis($width: auto) {
+ @include prefixer(flex-basis, $width, webkit moz spec);
+ -ms-flex-preferred-size: $width;
+}
+
+// 2009 - box-pack (start | end | center | justify)
+// 2011 - flex-pack (start | end | center | justify)
+// 2012 - justify-content (flex-start | flex-end | center | space-between | space-around)
+@mixin justify-content ($value: flex-start) {
+
+ // Alt values.
+ $alt-value: $value;
+ @if $value == "flex-start" {
+ $alt-value: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $alt-value: end;
+ }
+
+ @elseif $value == "space-between" {
+ $alt-value: justify;
+ }
+
+ @elseif $value == "space-around" {
+ $alt-value: center;
+ }
+
+ // 2009
+ @include prefixer(box-pack, $alt-value, webkit moz spec);
+
+ // 2012
+ @include prefixer(justify-content, $value, webkit moz ms o spec);
+
+ // 2011 (IE 10)
+ -ms-flex-pack: $alt-value;
+}
+
+// 2009 - box-align (start | end | center | baseline | stretch)
+// 2011 - flex-align (start | end | center | baseline | stretch)
+// 2012 - align-items (flex-start | flex-end | center | baseline | stretch)
+@mixin align-items($value: stretch) {
+
+ $alt-value: $value;
+
+ @if $value == "flex-start" {
+ $alt-value: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $alt-value: end;
+ }
+
+ // 2009
+ @include prefixer(box-align, $alt-value, webkit moz spec);
+
+ // 2012
+ @include prefixer(align-items, $value, webkit moz ms o spec);
+
+ // 2011 (IE 10)
+ -ms-flex-align: $alt-value;
+}
+
+// 2011 - flex-item-align (auto | start | end | center | baseline | stretch)
+// 2012 - align-self (auto | flex-start | flex-end | center | baseline | stretch)
+@mixin align-self($value: auto) {
+
+ $value-2011: $value;
+ @if $value == "flex-start" {
+ $value-2011: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $value-2011: end;
+ }
+
+ // 2012
+ @include prefixer(align-self, $value, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-item-align: $value-2011;
+}
+
+// 2011 - flex-line-pack (start | end | center | justify | distribute | stretch)
+// 2012 - align-content (flex-start | flex-end | center | space-between | space-around | stretch)
+@mixin align-content($value: stretch) {
+
+ $value-2011: $value;
+ @if $value == "flex-start" {
+ $value-2011: start;
+ }
+
+ @elseif $value == "flex-end" {
+ $value-2011: end;
+ }
+
+ @elseif $value == "space-between" {
+ $value-2011: justify;
+ }
+
+ @elseif $value == "space-around" {
+ $value-2011: distribute;
+ }
+
+ // 2012
+ @include prefixer(align-content, $value, webkit moz spec);
+
+ // 2011 (IE 10)
+ -ms-flex-line-pack: $value-2011;
+}
+
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_font-face.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_font-face.scss
new file mode 100644
index 0000000000..029ee8fe88
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_font-face.scss
@@ -0,0 +1,23 @@
+// Order of the includes matters, and it is: normal, bold, italic, bold+italic.
+
+@mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: false ) {
+ @font-face {
+ font-family: $font-family;
+ font-weight: $weight;
+ font-style: $style;
+
+ @if $asset-pipeline == true {
+ src: font-url('#{$file-path}.eot');
+ src: font-url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
+ font-url('#{$file-path}.woff') format('woff'),
+ font-url('#{$file-path}.ttf') format('truetype'),
+ font-url('#{$file-path}.svg##{$font-family}') format('svg');
+ } @else {
+ src: url('#{$file-path}.eot');
+ src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
+ url('#{$file-path}.woff') format('woff'),
+ url('#{$file-path}.ttf') format('truetype'),
+ url('#{$file-path}.svg##{$font-family}') format('svg');
+ }
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_hidpi-media-query.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_hidpi-media-query.scss
new file mode 100644
index 0000000000..111e4009b5
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_hidpi-media-query.scss
@@ -0,0 +1,10 @@
+// HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/)
+@mixin hidpi($ratio: 1.3) {
+ @media only screen and (-webkit-min-device-pixel-ratio: $ratio),
+ only screen and (min--moz-device-pixel-ratio: $ratio),
+ only screen and (-o-min-device-pixel-ratio: #{$ratio}/1),
+ only screen and (min-resolution: #{round($ratio*96)}dpi),
+ only screen and (min-resolution: #{$ratio}dppx) {
+ @content;
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_hyphens.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_hyphens.scss
new file mode 100644
index 0000000000..5f8bddafa5
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_hyphens.scss
@@ -0,0 +1,4 @@
+@mixin hyphens($hyphenation: none) {
+// none | manual | auto
+ @include prefixer(hyphens, $hyphenation, webkit moz ms spec);
+} \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_image-rendering.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_image-rendering.scss
new file mode 100644
index 0000000000..d4bac3ce0d
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_image-rendering.scss
@@ -0,0 +1,13 @@
+@mixin image-rendering ($mode:auto) {
+
+ @if ($mode == crisp-edges) {
+ image-rendering: -moz-crisp-edges;
+ image-rendering: -o-crisp-edges;
+ image-rendering: -webkit-optimize-contrast;
+ image-rendering: crisp-edges;
+ }
+
+ @else {
+ image-rendering: $mode;
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_inline-block.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_inline-block.scss
new file mode 100644
index 0000000000..3272a0010b
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_inline-block.scss
@@ -0,0 +1,8 @@
+// Legacy support for inline-block in IE7 (maybe IE6)
+@mixin inline-block {
+ display: inline-block;
+ vertical-align: baseline;
+ zoom: 1;
+ *display: inline;
+ *vertical-align: auto;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_keyframes.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_keyframes.scss
new file mode 100644
index 0000000000..a9af53da4f
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_keyframes.scss
@@ -0,0 +1,38 @@
+// Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content
+@mixin keyframes($name) {
+ $original-prefix-for-webkit: $prefix-for-webkit;
+ $original-prefix-for-mozilla: $prefix-for-mozilla;
+ $original-prefix-for-microsoft: $prefix-for-microsoft;
+ $original-prefix-for-opera: $prefix-for-opera;
+ $original-prefix-for-spec: $prefix-for-spec;
+
+ @if $original-prefix-for-webkit {
+ @include disable-prefix-for-all();
+ $prefix-for-webkit: true;
+ @-webkit-keyframes #{$name} {
+ @content;
+ }
+ }
+ @if $original-prefix-for-mozilla {
+ @include disable-prefix-for-all();
+ $prefix-for-mozilla: true;
+ @-moz-keyframes #{$name} {
+ @content;
+ }
+ }
+ @if $original-prefix-for-spec {
+ @include disable-prefix-for-all();
+ $prefix-for-spec: true;
+ // Chrome supports the standard keyframes syntax, but not the standard transform syntax
+ $prefix-for-webkit: true;
+ @keyframes #{$name} {
+ @content;
+ }
+ }
+
+ $prefix-for-webkit: $original-prefix-for-webkit;
+ $prefix-for-mozilla: $original-prefix-for-mozilla;
+ $prefix-for-microsoft: $original-prefix-for-microsoft;
+ $prefix-for-opera: $original-prefix-for-opera;
+ $prefix-for-spec: $original-prefix-for-spec;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_linear-gradient.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_linear-gradient.scss
new file mode 100644
index 0000000000..e0da35128b
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_linear-gradient.scss
@@ -0,0 +1,38 @@
+@mixin linear-gradient($pos, $G1, $G2: null,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $fallback: null) {
+ // Detect what type of value exists in $pos
+ $pos-type: type-of(nth($pos, 1));
+ $pos-spec: null;
+ $pos-degree: null;
+
+ // If $pos is missing from mixin, reassign vars and add default position
+ @if ($pos-type == color) or (nth($pos, 1) == "transparent") {
+ $G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5;
+ $G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos;
+ $pos: null;
+ }
+
+ @if $pos {
+ $positions: _linear-positions-parser($pos);
+ $pos-degree: nth($positions, 1);
+ $pos-spec: nth($positions, 2);
+ }
+
+ $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ // Set $G1 as the default fallback color
+ $fallback-color: nth($G1, 1);
+
+ // If $fallback is a color use that color as the fallback color
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ background-color: $fallback-color;
+ background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome
+ background-image: unquote("linear-gradient(#{$pos-spec}#{$full})");
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_perspective.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_perspective.scss
new file mode 100644
index 0000000000..0e4deb80f3
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_perspective.scss
@@ -0,0 +1,8 @@
+@mixin perspective($depth: none) {
+ // none | <length>
+ @include prefixer(perspective, $depth, webkit moz spec);
+}
+
+@mixin perspective-origin($value: 50% 50%) {
+ @include prefixer(perspective-origin, $value, webkit moz spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_placeholder.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_placeholder.scss
new file mode 100644
index 0000000000..22fd92b4f2
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_placeholder.scss
@@ -0,0 +1,29 @@
+$placeholders: '-webkit-input-placeholder',
+ '-moz-placeholder',
+ '-ms-input-placeholder';
+
+@mixin placeholder {
+ @each $placeholder in $placeholders {
+ @if $placeholder == "-webkit-input-placeholder" {
+ &::#{$placeholder} {
+ @content;
+ }
+ }
+ @else if $placeholder == "-moz-placeholder" {
+ // FF 18-
+ &:#{$placeholder} {
+ @content;
+ }
+
+ // FF 19+
+ &::#{$placeholder} {
+ @content;
+ }
+ }
+ @else {
+ &:#{$placeholder} {
+ @content;
+ }
+ }
+ }
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_radial-gradient.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_radial-gradient.scss
new file mode 100644
index 0000000000..7a8c3765f1
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_radial-gradient.scss
@@ -0,0 +1,39 @@
+// Requires Sass 3.1+
+@mixin radial-gradient($G1, $G2,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $pos: null,
+ $shape-size: null,
+ $fallback: null) {
+
+ $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
+ $G1: nth($data, 1);
+ $G2: nth($data, 2);
+ $pos: nth($data, 3);
+ $shape-size: nth($data, 4);
+
+ $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ // Strip deprecated cover/contain for spec
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ // Set $G1 as the default fallback color
+ $first-color: nth($full, 1);
+ $fallback-color: nth($first-color, 1);
+
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ // Add Commas and spaces
+ $shape-size: if($shape-size, '#{$shape-size}, ', null);
+ $pos: if($pos, '#{$pos}, ', null);
+ $pos-spec: if($pos, 'at #{$pos}', null);
+ $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');
+
+ background-color: $fallback-color;
+ background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));
+ background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})");
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_transform.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_transform.scss
new file mode 100644
index 0000000000..8cc35963d5
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_transform.scss
@@ -0,0 +1,15 @@
+@mixin transform($property: none) {
+// none | <transform-function>
+ @include prefixer(transform, $property, webkit moz ms o spec);
+}
+
+@mixin transform-origin($axes: 50%) {
+// x-axis - left | center | right | length | %
+// y-axis - top | center | bottom | length | %
+// z-axis - length
+ @include prefixer(transform-origin, $axes, webkit moz ms o spec);
+}
+
+@mixin transform-style ($style: flat) {
+ @include prefixer(transform-style, $style, webkit moz ms o spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_transition.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_transition.scss
new file mode 100644
index 0000000000..fe18933fef
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_transition.scss
@@ -0,0 +1,34 @@
+// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
+// Example: @include transition (all 2s ease-in-out);
+// @include transition (opacity 1s ease-in 2s, width 2s ease-out);
+// @include transition-property (transform, opacity);
+
+@mixin transition ($properties...) {
+ @if length($properties) >= 1 {
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+
+ @else {
+ $properties: all 0.15s ease-out 0s;
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+}
+
+@mixin transition-property ($properties...) {
+ -webkit-transition-property: transition-property-names($properties, 'webkit');
+ -moz-transition-property: transition-property-names($properties, 'moz');
+ transition-property: transition-property-names($properties, false);
+}
+
+@mixin transition-duration ($times...) {
+ @include prefixer(transition-duration, $times, webkit moz spec);
+}
+
+@mixin transition-timing-function ($motions...) {
+// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
+ @include prefixer(transition-timing-function, $motions, webkit moz spec);
+}
+
+@mixin transition-delay ($times...) {
+ @include prefixer(transition-delay, $times, webkit moz spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/css3/_user-select.scss b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_user-select.scss
new file mode 100644
index 0000000000..1380aa8baa
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/css3/_user-select.scss
@@ -0,0 +1,3 @@
+@mixin user-select($arg: none) {
+ @include prefixer(user-select, $arg, webkit moz ms spec);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_flex-grid.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_flex-grid.scss
new file mode 100644
index 0000000000..3bbd866573
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_flex-grid.scss
@@ -0,0 +1,39 @@
+// Flexible grid
+@function flex-grid($columns, $container-columns: $fg-max-columns) {
+ $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($width / $container-width);
+}
+
+// Flexible gutter
+@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($gutter / $container-width);
+}
+
+// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.
+// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.
+//
+// The calculation presumes that your column structure will be missing the last gutter:
+//
+// -- column -- gutter -- column -- gutter -- column
+//
+// $fg-column: 60px; // Column Width
+// $fg-gutter: 25px; // Gutter Width
+// $fg-max-columns: 12; // Total Columns For Main Container
+//
+// div {
+// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;
+// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;
+//
+// p {
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// float: left;
+// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;
+// }
+//
+// blockquote {
+// float: left;
+// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
+// }
+// } \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_golden-ratio.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_golden-ratio.scss
new file mode 100644
index 0000000000..463d14a00c
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_golden-ratio.scss
@@ -0,0 +1,3 @@
+@function golden-ratio($value, $increment) {
+ @return modular-scale($value, $increment, $golden)
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_grid-width.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_grid-width.scss
new file mode 100644
index 0000000000..8e63d83d60
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_grid-width.scss
@@ -0,0 +1,13 @@
+@function grid-width($n) {
+ @return $n * $gw-column + ($n - 1) * $gw-gutter;
+}
+
+// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.
+//
+// $gw-column: 100px; // Column Width
+// $gw-gutter: 40px; // Gutter Width
+//
+// div {
+// width: grid-width(4); // returns 520px;
+// margin-left: $gw-gutter; // returns 40px;
+// }
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_linear-gradient.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_linear-gradient.scss
new file mode 100644
index 0000000000..c8454d83f0
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_linear-gradient.scss
@@ -0,0 +1,13 @@
+@function linear-gradient($pos, $gradients...) {
+ $type: linear;
+ $pos-type: type-of(nth($pos, 1));
+
+ // if $pos doesn't exist, fix $gradient
+ @if ($pos-type == color) or (nth($pos, 1) == "transparent") {
+ $gradients: zip($pos $gradients);
+ $pos: false;
+ }
+
+ $type-gradient: $type, $pos, $gradients;
+ @return $type-gradient;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_modular-scale.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_modular-scale.scss
new file mode 100644
index 0000000000..0a7185916c
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_modular-scale.scss
@@ -0,0 +1,66 @@
+// Scaling Varaibles
+$golden: 1.618;
+$minor-second: 1.067;
+$major-second: 1.125;
+$minor-third: 1.2;
+$major-third: 1.25;
+$perfect-fourth: 1.333;
+$augmented-fourth: 1.414;
+$perfect-fifth: 1.5;
+$minor-sixth: 1.6;
+$major-sixth: 1.667;
+$minor-seventh: 1.778;
+$major-seventh: 1.875;
+$octave: 2;
+$major-tenth: 2.5;
+$major-eleventh: 2.667;
+$major-twelfth: 3;
+$double-octave: 4;
+
+@function modular-scale($value, $increment, $ratio) {
+ $v1: nth($value, 1);
+ $v2: nth($value, length($value));
+ $value: $v1;
+
+ // scale $v2 to just above $v1
+ @while $v2 > $v1 {
+ $v2: ($v2 / $ratio); // will be off-by-1
+ }
+ @while $v2 < $v1 {
+ $v2: ($v2 * $ratio); // will fix off-by-1
+ }
+
+ // check AFTER scaling $v2 to prevent double-counting corner-case
+ $double-stranded: $v2 > $v1;
+
+ @if $increment > 0 {
+ @for $i from 1 through $increment {
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
+ $value: $v2;
+ $v2: ($v2 * $ratio);
+ } @else {
+ $v1: ($v1 * $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @if $increment < 0 {
+ // adjust $v2 to just below $v1
+ @if $double-stranded {
+ $v2: ($v2 / $ratio);
+ }
+
+ @for $i from $increment through -1 {
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
+ $value: $v2;
+ $v2: ($v2 / $ratio);
+ } @else {
+ $v1: ($v1 / $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @return $value;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_px-to-em.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_px-to-em.scss
new file mode 100644
index 0000000000..4832245e45
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_px-to-em.scss
@@ -0,0 +1,13 @@
+// Convert pixels to ems
+// eg. for a relational value of 12px write em(12) when the parent is 16px
+// if the parent is another value say 24px write em(12, 24)
+
+@function em($pxval, $base: $em-base) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1em;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_radial-gradient.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_radial-gradient.scss
new file mode 100644
index 0000000000..4466a9c9af
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_radial-gradient.scss
@@ -0,0 +1,23 @@
+// This function is required and used by the background-image mixin.
+@function radial-gradient($G1, $G2,
+ $G3: null, $G4: null,
+ $G5: null, $G6: null,
+ $G7: null, $G8: null,
+ $G9: null, $G10: null,
+ $pos: null,
+ $shape-size: null) {
+
+ $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
+ $G1: nth($data, 1);
+ $G2: nth($data, 2);
+ $pos: nth($data, 3);
+ $shape-size: nth($data, 4);
+
+ $type: radial;
+ $gradient: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
+
+ $type-gradient: $type, $shape-size $pos, $gradient;
+ @return $type-gradient;
+}
+
+
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_strip-units.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_strip-units.scss
new file mode 100644
index 0000000000..6afc6e601c
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_strip-units.scss
@@ -0,0 +1,5 @@
+// Srtips the units from a value. e.g. 12px -> 12
+
+@function strip-units($val) {
+ @return ($val / ($val * 0 + 1));
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_tint-shade.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_tint-shade.scss
new file mode 100644
index 0000000000..f7172004ac
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_tint-shade.scss
@@ -0,0 +1,9 @@
+// Add percentage of white to a color
+@function tint($color, $percent){
+ @return mix(white, $color, $percent);
+}
+
+// Add percentage of black to a color
+@function shade($color, $percent){
+ @return mix(black, $color, $percent);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_transition-property-name.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_transition-property-name.scss
new file mode 100644
index 0000000000..111deeb70f
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_transition-property-name.scss
@@ -0,0 +1,22 @@
+// Return vendor-prefixed property names if appropriate
+// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background
+//************************************************************************//
+@function transition-property-names($props, $vendor: false) {
+ $new-props: ();
+
+ @each $prop in $props {
+ $new-props: append($new-props, transition-property-name($prop, $vendor), comma);
+ }
+
+ @return $new-props;
+}
+
+@function transition-property-name($prop, $vendor: false) {
+ // put other properties that need to be prefixed here aswell
+ @if $vendor and $prop == transform {
+ @return unquote('-'+$vendor+'-'+$prop);
+ }
+ @else {
+ @return $prop;
+ }
+} \ No newline at end of file
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/functions/_unpack.scss b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_unpack.scss
new file mode 100644
index 0000000000..377596365c
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/functions/_unpack.scss
@@ -0,0 +1,17 @@
+// Convert shorthand to the 4-value syntax
+
+@function unpack($shorthand) {
+ @if length($shorthand) == 1 {
+ @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);
+ }
+ @else if length($shorthand) == 2 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);
+ }
+ @else if length($shorthand) == 3 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);
+ }
+ @else {
+ @return $shorthand;
+ }
+}
+
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_gradient-positions-parser.scss b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_gradient-positions-parser.scss
new file mode 100644
index 0000000000..07d30b6cf9
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_gradient-positions-parser.scss
@@ -0,0 +1,13 @@
+@function _gradient-positions-parser($gradient-type, $gradient-positions) {
+ @if $gradient-positions
+ and ($gradient-type == linear)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _linear-positions-parser($gradient-positions);
+ }
+ @else if $gradient-positions
+ and ($gradient-type == radial)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _radial-positions-parser($gradient-positions);
+ }
+ @return $gradient-positions;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_linear-positions-parser.scss b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_linear-positions-parser.scss
new file mode 100644
index 0000000000..d26383edce
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_linear-positions-parser.scss
@@ -0,0 +1,61 @@
+@function _linear-positions-parser($pos) {
+ $type: type-of(nth($pos, 1));
+ $spec: null;
+ $degree: null;
+ $side: null;
+ $corner: null;
+ $length: length($pos);
+ // Parse Side and corner positions
+ @if ($length > 1) {
+ @if nth($pos, 1) == "to" { // Newer syntax
+ $side: nth($pos, 2);
+
+ @if $length == 2 { // eg. to top
+ // Swap for backwards compatability
+ $degree: _position-flipper(nth($pos, 2));
+ }
+ @else if $length == 3 { // eg. to top left
+ $corner: nth($pos, 3);
+ }
+ }
+ @else if $length == 2 { // Older syntax ("top left")
+ $side: _position-flipper(nth($pos, 1));
+ $corner: _position-flipper(nth($pos, 2));
+ }
+
+ @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ $spec: to $side $corner;
+ }
+ @else if $length == 1 {
+ // Swap for backwards compatability
+ @if $type == string {
+ $degree: $pos;
+ $spec: to _position-flipper($pos);
+ }
+ @else {
+ $degree: -270 - $pos; //rotate the gradient opposite from spec
+ $spec: $pos;
+ }
+ }
+ $degree: unquote($degree + ",");
+ $spec: unquote($spec + ",");
+ @return $degree $spec;
+}
+
+@function _position-flipper($pos) {
+ @return if($pos == left, right, null)
+ if($pos == right, left, null)
+ if($pos == top, bottom, null)
+ if($pos == bottom, top, null);
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-arg-parser.scss b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-arg-parser.scss
new file mode 100644
index 0000000000..a3a3704af5
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-arg-parser.scss
@@ -0,0 +1,69 @@
+@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {
+ @each $value in $G1, $G2 {
+ $first-val: nth($value, 1);
+ $pos-type: type-of($first-val);
+ $spec-at-index: null;
+
+ // Determine if spec was passed to mixin
+ @if type-of($value) == list {
+ $spec-at-index: if(index($value, at), index($value, at), false);
+ }
+ @if $spec-at-index {
+ @if $spec-at-index > 1 {
+ @for $i from 1 through ($spec-at-index - 1) {
+ $shape-size: $shape-size nth($value, $i);
+ }
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ @else if $spec-at-index == 1 {
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ $G1: null;
+ }
+
+ // If not spec calculate correct values
+ @else {
+ @if ($pos-type != color) or ($first-val != "transparent") {
+ @if ($pos-type == number)
+ or ($first-val == "center")
+ or ($first-val == "top")
+ or ($first-val == "right")
+ or ($first-val == "bottom")
+ or ($first-val == "left") {
+
+ $pos: $value;
+
+ @if $pos == $G1 {
+ $G1: null;
+ }
+ }
+
+ @else if
+ ($first-val == "ellipse")
+ or ($first-val == "circle")
+ or ($first-val == "closest-side")
+ or ($first-val == "closest-corner")
+ or ($first-val == "farthest-side")
+ or ($first-val == "farthest-corner")
+ or ($first-val == "contain")
+ or ($first-val == "cover") {
+
+ $shape-size: $value;
+
+ @if $value == $G1 {
+ $G1: null;
+ }
+
+ @else if $value == $G2 {
+ $G2: null;
+ }
+ }
+ }
+ }
+ }
+ @return $G1, $G2, $pos, $shape-size;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-positions-parser.scss b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-positions-parser.scss
new file mode 100644
index 0000000000..6a5b477778
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_radial-positions-parser.scss
@@ -0,0 +1,18 @@
+@function _radial-positions-parser($gradient-pos) {
+ $shape-size: nth($gradient-pos, 1);
+ $pos: nth($gradient-pos, 2);
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ $pre-spec: unquote(if($pos, "#{$pos}, ", null))
+ unquote(if($shape-size, "#{$shape-size},", null));
+ $pos-spec: if($pos, "at #{$pos}", null);
+
+ $spec: "#{$shape-size-spec} #{$pos-spec}";
+
+ // Add comma
+ @if ($spec != ' ') {
+ $spec: "#{$spec},"
+ }
+
+ @return $pre-spec $spec;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_render-gradients.scss b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_render-gradients.scss
new file mode 100644
index 0000000000..5765676838
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_render-gradients.scss
@@ -0,0 +1,26 @@
+// User for linear and radial gradients within background-image or border-image properties
+
+@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {
+ $pre-spec: null;
+ $spec: null;
+ $vendor-gradients: null;
+ @if $gradient-type == linear {
+ @if $gradient-positions {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+ }
+ @else if $gradient-type == radial {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+
+ @if $vendor {
+ $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);
+ }
+ @else if $vendor == false {
+ $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})";
+ $vendor-gradients: unquote($vendor-gradients);
+ }
+ @return $vendor-gradients;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_shape-size-stripper.scss b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_shape-size-stripper.scss
new file mode 100644
index 0000000000..ee5eda4220
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/helpers/_shape-size-stripper.scss
@@ -0,0 +1,10 @@
+@function _shape-size-stripper($shape-size) {
+ $shape-size-spec: null;
+ @each $value in $shape-size {
+ @if ($value == "cover") or ($value == "contain") {
+ $value: null;
+ }
+ $shape-size-spec: "#{$shape-size-spec} #{$value}";
+ }
+ @return $shape-size-spec;
+}
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/settings/_prefixer.scss b/WebContent/VAADIN/themes/valo/util/bourbon/settings/_prefixer.scss
new file mode 100644
index 0000000000..c29a961919
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/settings/_prefixer.scss
@@ -0,0 +1,6 @@
+// Variable settings for /addons/prefixer.scss
+$prefix-for-webkit: true;
+$prefix-for-mozilla: true;
+$prefix-for-microsoft: true;
+$prefix-for-opera: true;
+$prefix-for-spec: true; // required for keyframe mixin
diff --git a/WebContent/VAADIN/themes/valo/util/bourbon/settings/_px-to-em.scss b/WebContent/VAADIN/themes/valo/util/bourbon/settings/_px-to-em.scss
new file mode 100644
index 0000000000..f2f9a3e8de
--- /dev/null
+++ b/WebContent/VAADIN/themes/valo/util/bourbon/settings/_px-to-em.scss
@@ -0,0 +1 @@
+$em-base: 16px !default;