.scrollable(){
    overflow: auto;
    -webkit-overflow-scrolling: touch;
}
.preloader() {
  width: 20px;
  height: 20px;
  transform-origin: 50%;
  animation: preloader-spin 1s steps(12, end) infinite;
  &:after {
    display: block;
    width: 100%;
    height: 100%;
    content: "";
    .encoded-svg-background("<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='#6c6c6c' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='#l' opacity='.27'/><use xlink:href='#l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='#l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='#l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='#l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='#l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='#l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='#l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>");
    background-repeat: no-repeat;
    background-position: 50%;
    background-size: 100%;
  }
}
.preloader-white() {
  &:after {
    .encoded-svg-background("<svg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'><defs><line id='l' x1='60' x2='60' y1='7' y2='27' stroke='#fff' stroke-width='11' stroke-linecap='round'/></defs><g><use xlink:href='#l' opacity='.27'/><use xlink:href='#l' opacity='.27' transform='rotate(30 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(60 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(90 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(120 60,60)'/><use xlink:href='#l' opacity='.27' transform='rotate(150 60,60)'/><use xlink:href='#l' opacity='.37' transform='rotate(180 60,60)'/><use xlink:href='#l' opacity='.46' transform='rotate(210 60,60)'/><use xlink:href='#l' opacity='.56' transform='rotate(240 60,60)'/><use xlink:href='#l' opacity='.66' transform='rotate(270 60,60)'/><use xlink:href='#l' opacity='.75' transform='rotate(300 60,60)'/><use xlink:href='#l' opacity='.85' transform='rotate(330 60,60)'/></g></svg>");
  }
}

@keyframes preloader-spin {
  100% {
    transform: rotate(360deg);
  }
}
.flexbox() {
    display: -webkit-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}
.flex-wrap(@fw) when (@fw = nowrap) {
    -webkit-box-lines: single;
    -moz-box-lines: single;
    -webkit-flex-wrap: nowrap;
    -ms-flex-wrap: none;
    -ms-flex-wrap: nowrap;
    flex-wrap: nowrap;
}
.flex-wrap(@fw) when (@fw = wrap) {
    -webkit-box-lines: multiple;
    -moz-box-lines: multiple;
    -webkit-flex-wrap: wrap;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
}
.flex-wrap(@fw) when not (@fw = wrap) and not (@fw = nowrap) {
    -webkit-flex-wrap: @fw;
    -ms-flex-wrap: @fw;
    flex-wrap: @fw;
}
.flex-shrink(@fs) {
    -webkit-flex-shrink: @fs;
    -ms-flex: 0 @fs auto;
    flex-shrink: @fs;
}
.justify-content(@jc) when (@jc = flex-start) {
    -webkit-box-pack: start;
    -ms-flex-pack: start;
    -webkit-justify-content: flex-start;
    justify-content: flex-start;
}
.justify-content(@jc) when (@jc = flex-end) {
    -webkit-box-pack: end;
    -ms-flex-pack: end;
    -webkit-justify-content: flex-end;
    justify-content: flex-end;
}
.justify-content(@jc) when (@jc = space-between) {
    -webkit-box-pack: justify;
    -ms-flex-pack: justify;
    -webkit-justify-content: space-between;
    justify-content: space-between;
}
.justify-content(@jc) when not (@jc = flex-start) and not (@jc = flex-end) and not (@jc = space-between) {
    -webkit-box-pack: @jc;
    -ms-flex-pack: @jc;
    -webkit-justify-content: @jc;
    justify-content: @jc;
}
.align-items(@ai) when (@ai = flex-start) {
    -webkit-box-align: start;
    -ms-flex-align: start;
    -webkit-align-items: flex-start;
    align-items: flex-start;
}
.align-items(@ai) when (@ai = flex-end) {
    -webkit-box-align: end;
    -ms-flex-align: end;
    -webkit-align-items: flex-end;
    align-items: flex-end;
}
.align-items(@ai) when not (@ai = flex-start) and not (@ai = flex-end) {
    -webkit-box-align: @ai;
    -ms-flex-align: @ai;
    -webkit-align-items: @ai;
    align-items: @ai;
}
.align-content(@ai) {
    -ms-flex-line-pack: @ai;
    -webkit-align-content: @ai;
    align-content: @ai;
}
.align-self(@as) {
    -ms-flex-item-align: @as;
    -webkit-align-self: @as;
    align-self: @as;
}
.clearfix() {
    &:before,
    &:after {
        content: " ";
        display: table;
    }
    &:after {
        clear: both;
    }
}
.hairline(@position, @color) when (@position = top) {
    &:before {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        bottom: auto;
        right: auto;
        height: 1px;
        width: 100%;
        background-color: @color;
        display: block;
        z-index: 1;
        transform-origin: 50% 0%;
        @media only screen and (-webkit-min-device-pixel-ratio: 2) {
          transform: scaleY(0.5);
        }
    }
}
.hairline(@position, @color) when (@position = left) {
    &:before {
        content: '';
        position: absolute;
        left: 0;
        top: 0;
        bottom: auto;
        right: auto;
        width: 1px;
        height: 100%;
        background-color: @color;
        display: block;
        z-index: 1;
        transform-origin: 0% 50%;
        @media only screen and (-webkit-min-device-pixel-ratio: 2) {
            transform: scaleX(0.5);
        }
    }
}
.hairline(@position, @color) when (@position = bottom) {
    &:after {
        content: '';
        position: absolute;
        left: 0;
        bottom: 0;
        right: auto;
        top: auto;
        height: 1px;
        width: 100%;
        background-color: @color;
        display: block;
        z-index: 1;
        transform-origin: 50% 100%;
        @media only screen and (-webkit-min-device-pixel-ratio: 2) {
            transform: scaleY(0.5);
        }
    }
}
.hairline(@position, @color) when (@position = right) {
    &:after {
        content: '';
        position: absolute;
        right: 0;
        top: 0;
        left: auto;
        bottom: auto;
        width: 1px;
        height: 100%;
        background-color: @color;
        display: block;
        z-index: 1;
        transform-origin: 100% 50%;
        @media only screen and (-webkit-min-device-pixel-ratio: 2) {
            transform: scaleX(0.5);
        }
    }
}
// For right and bottom
.hairline-remove(@position) when not (@position = left) and not (@position = top) {
    &:after {
        display: none;
    }
}
// For left and top
.hairline-remove(@position) when not (@position = right) and not (@position = bottom) {
    &:before {
        display: none;
    }
}
// For right and bottom
.hairline-color(@position, @color) when not (@position = left) and not (@position = top) {
    &:after {
        background-color: @color;
    }
}
// For left and top
.hairline-color(@position, @color) when not (@position = right) and not (@position = bottom) {
    &:before {
        background-color: @color;
    }
}

/*
.hairline(@position, @color) when (@position = top) {
  border-top: 1px solid @color;
}
.hairline(@position, @color) when (@position = left) {
  border-left: 1px solid @color;
}
.hairline(@position, @color) when (@position = bottom) {
  border-bottom: 1px solid @color;
}
.hairline(@position, @color) when (@position = right) {
  border-right: 1px solid @color;
}
// For right and bottom
.hairline-remove(@position) when not (@position = left) and not (@position = top) {
  border-left: 0;
  border-bottom: 0;
}
// For left and top
.hairline-remove(@position) when not (@position = right) and not (@position = bottom) {
  border-right: 0;
  border-top: 0;
}
// For right and bottom
.hairline-color(@position, @color) when not (@position = left) and not (@position = top) {
  border-right-color: @color;
  border-bottom-color: @color;
}
// For left and top
.hairline-color(@position, @color) when not (@position = right) and not (@position = bottom) {
  border-left-color: @color;
  border-top-color: @color;
}*/

// Encoded SVG Background
.encoded-svg-background(@svg) {
    @url: `encodeURIComponent(@{svg})`;
    background-image: url("data:image/svg+xml;charset=utf-8,@{url}");
}

// Preserve3D
.preserve3d() {
    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    -ms-transform-style: preserve-3d;
    transform-style: preserve-3d;
}

//from ratchet
.linear-gradient(@color-from, @color-to) {
  background-color: @color-from; // Old browsers
  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,@color-from), color-stop(100%,@color-to)); // Chrome, Safari4+
  background-image: -webkit-linear-gradient(top, @color-from 0%, @color-to 100%);           // Chrome10+, Safari5.1+
  background-image:    -moz-linear-gradient(top, @color-from 0%, @color-to 100%);           // FF3.6+
  background-image:     -ms-linear-gradient(top, @color-from 0%, @color-to 100%);           // IE10+
  background-image:      -o-linear-gradient(top, @color-from 0%, @color-to 100%);           // Opera 11.10+
  background-image:         linear-gradient(to bottom, @color-from 0%, @color-to 100%);     // W3C
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{@color-from}', endColorstr='#{@color-to}', GradientType=0 ); // IE6-9
}
.directional-gradient(@color-from, @color-to, @deg: 45deg) {
  background-color: @color-from; // Old browsers
  background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0%,@color-from), color-stop(100%,@color-to)); // Chrome, Safari4+
  background-image: -webkit-linear-gradient(@deg, @color-from 0%, @color-to 100%);           // Chrome10+, Safari5.1+
  background-image:    -moz-linear-gradient(@deg, @color-from 0%, @color-to 100%);           // FF3.6+
  background-image:     -ms-linear-gradient(@deg, @color-from 0%, @color-to 100%);           // IE10+
  background-image:      -o-linear-gradient(@deg, @color-from 0%, @color-to 100%);           // Opera 11.10+
  background-image:         linear-gradient(@deg, @color-from 0%, @color-to 100%);     // W3C
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{@color-from}', endColorstr='#{@color-to}', GradientType=1 ); // IE6-9
}

.hairline(@type, @color, @offset) when (@type = single) {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1'><rect fill='#{@color}' x='0' y='0' width='100%' height='0.5'/></svg>");
  background-position: @offset 100%;
}
.hairline(@type, @color, @offset) when (@type = double) {
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1'><rect fill='#{@color}' x='0' y='0' width='100%' height='0.5'/></svg>"),
                      url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1'><rect fill='#{@color}' x='0' y='0' width='100%' height='0.5'/></svg>");
    background-position: @offset 100%, @offset 0;
  background-repeat: no-repeat;
}

.hairline-border(@color, @radius) {
  position: relative;
  &:after {
    content: " ";
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    border: 1px solid @color;
    border-radius: @radius;
    transform-origin: 0 0;
    z-index: 0;
    box-sizing: border-box;
    @media only screen and (-webkit-min-device-pixel-ratio: 2) {
      height: 200%;
      width: 200%;
      transform: scale(0.5);
      border-radius: (@radius * 2);
    }
  }
}

.hairline-border(@color, @radius, @dir) when (@dir = vertical) {
  .hairline-border(@color, @radius);
  &:after {
    border-left: 0;
    border-right: 0;
  }
}

.hairline-border(@color, @radius, @dir) when (@dir = noright) {
  .hairline-border(@color, @radius);
  &:after {
    border-right: 0;
    border-radius: @radius 0 0 @radius;
  }
}

.hairline-border(@color, @radius, @dir) when (@dir = noleft) {
  .hairline-border(@color, @radius);
  &:after {
    border-left: 0;
    border-radius: 0 @radius @radius 0;
  }
}

.hairline-border-remove() {
  &:after {
    display: none;
  }
}

.hairline-border-remove(@dir) when (@dir = left) {
  &:after {
    border-left: 0;
  }
}

.hairline-border-remove(@dir) when (@dir = right) {
  &:after {
    border-right: 0;
  }
}

.hairline-border-remove(@dir) when (@dir = top) {
  &:after {
    border-top: 0;
  }
}

.hairline-border-remove(@dir) when (@dir = bottom) {
  &:after {
    border-bottom: 0;
  }
}

.overlay() {
  opacity: 0;
  background: transparent;
  transition: opacity .3s;
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  z-index: 100;
}
