/*
 * www.g-u-i.net
 */

// =
// =
// =
// =
// =
// ===== TYPOGRAHIE ====================================================================================================== 
 
.8(){font-size:8px;}
.9(){font-size:9px;}
.10(){font-size:10px;}
.11(){font-size:10px;}
.12(){font-size:12px;}
.14(){font-size:14px;}
.16(){font-size:16px;}
.18(){font-size:18px;}
.20(){font-size:20px;}
.24(){font-size:24px;}
.28(){font-size:24px;}
.30(){font-size:30px;}
.36(){font-size:36px;}
.48(){font-size:48px;}
.60(){font-size:60px;}
.72(){font-size:72px;}

.regular(){font-weight:normal;}
.bold(){font-weight:bold;}
.100(){font-weight:100;}
.200(){font-weight:200;}
.300(){font-weight:300;}
.400(){font-weight:400;}
.500(){font-weight:500;}
.600(){font-weight:600;}
.700(){font-weight:700;}
.800(){font-weight:800;}
.900(){font-weight:900;}

.upper(){text-transform: uppercase;}
.italic(){font-style:italic;}
.normal(){font-style: normal;}

.hyphens(@value: auto)
{
  -webkit-hyphens:@value;
     -moz-hyphens:@value;
      -ms-hyphens:@value;
       -o-hyphens:@value;
          hyphens:@value;
}
.font-size(@value: 1em,@lineheight:1.3em)
{
  font-size:@value;
  line-height:@lineheight;
}

@green:#17942A;
@red:#E60000;

// =
// =
// =
// =
// =
// ===== SHORTCUTS ======================================================================================================= 

// padding
.p(@p){ padding:@arguments; }
.p(@v, @h){ padding:@arguments; }
.p(@t, @l, @b, @l){ padding:@arguments; }

.pt(@p){ padding-top:@p; }
.pr(@p){ padding-right:@p; }
.pb(@p){ padding-bottom:@p; }
.pl(@p){ padding-left:@p; }

// margin
.m(@p){ margin:@arguments; }
.m(@v, @h){ margin:@arguments; }
.m(@t, @l, @b, @l){ margin:@arguments; }

.mt(@m){ margin-top:@m; }
.mr(@m){ margin-right:@m; }
.mb(@m){ margin-bottom:@m; }
.ml(@m){ margin-left:@m; }

.0(){ margin:0; padding:0; }

// border
.b(@b){ border: @b; }
.b(@size, @color){ border: @size solid @color; }

.bt(@b){ border-top: @b;}
.bt(@size, @color){border-top: @size solid @color;}

.br(@b){ border-right: @b;}
.br(@size, @color){border-right: @size solid @color;}

.bb(@b){ border-bottom: @b;}
.bb(@size, @color){border-bottom: @size solid @color;}

.bl(@b){ border-left: @b;}
.bl(@size, @color){border-left: @size solid @color;}

.bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE)
{
  border-top   : solid 1px @top-color;
  border-right : solid 1px @right-color;
  border-bottom: solid 1px @bottom-color;
  border-left  : solid 1px @left-color;
}

// Background
.bg(@color, @url, @repeat, @scrollfixed, @pos){background: @arguments;}
.bgc(@color){background-color: @arguments;}
.bkgd(@params){background: @arguments;}
.bkgdc(@color){.bgc(@arguments);}

.bgca(@r, @g, @b, @a){
  background-color: rgb(@r, @g, @b); // ie8
  background-color: rgba(@r, @g, @b, @a);
  *background-color: rgb(@r, @g, @b); // ie7 
};

// Selection
.selection(@bgcolor,@color)
{
    &::selection {
    	background:@bgcolor;
    	color:@color;
    }
    &::-moz-selection {
    	background:@bgcolor;
    	color:@color;
    }
    &::-webkit-selection {
    	background:@bgcolor;
    	color:@color;
    } 
}

// Colors
.color(@value)
{
  &,
  & *{color:@value;}
}

// Opacity
.opacity(@opacity: 0.5)
{
  -webkit-opacity: @opacity;
   -khtml-opacity: @opacity;
     -moz-opacity: @opacity;
          opacity: @opacity;
}

// size
.size(@height, @width) {
  width: @width;
  height: @height;
}
.square(@size) {
  .size(@size, @size);
}

// center 
.center-block() {
  display: block;
  margin-left: auto;
  margin-right: auto;
}

// =
// =
// =
// =
// =
// ===== DISPLAY UTILS =================================================================================================== 

// Inline blocks
.inlineblock(@align:top)
{
    display:moz-inline-stack;
    display:inline-block;
    vertical-align:@align;
    zoom:1;
    *display:inline;
    // .ie7 &, .ie8 &{display:block;float:left;}
}

.db(){display:block;}
.dbn(){display:none;}
.dib(){.inlineblock;}
.dib(@align){.inlineblock(@align);}

.float(@align:left){
  .db; float:@align;
}

.abs(@value) { position:absolute; top:@value; left:@value; bottom:@value; right:@value; }
.abs(@top, @left) { position:absolute; top:@top; left:@left; }
.abs(@top, @right, @bottom, @left) { position:absolute; top:@top; left:@left; bottom:@bottom; right:@right; };

.fix(@value) { position:fixed; top:@value; left:@value; bottom:@value; right:@value; }
.fix(@top, @left) { position:fixed; top:@top; left:@left; }
.fix(@top, @right, @bottom, @left) { position:fixed; top:@top; left:@left; bottom:@bottom; right:@right; };

// Columns system
@g:0;
.g() { width:@g; }
.col(@col,@coltotal:@n,@gutter:@g) {
  width: @col * ( 100% - ((@coltotal - 1) * @gutter) ) / @coltotal + ((@col - 1) * @gutter);
}
.inside-left(@col,@coltotal:@n,@gutter:@g) {
  padding-left: @col * ( 100% - ((@coltotal - 1) * @gutter) ) / @coltotal + (@col * @gutter);
}
.inside-right(@col,@coltotal:@n,@gutter:@g) {
  padding-right: @col * ( 100% - ((@coltotal - 1) * @gutter) ) / @coltotal + (@col * @gutter);
}


// Vertical alignement
//
//    ___ .align-child()
//   |
//   |  Permet l’alignement vertical d’un objet par rapport à son premier parent (dans son conteneur direct). 
//   |
//   |  1 param   : @vertical-align
//
.align-child(@align:middle){
  &:before { content: ""; .dib(middle); overflow: hidden; visibility: hidden; width: 0; height: 100%; }
  & > * { .dib(@align); }
}

.clear-after(){
  &:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;}
}

// For clearing floats like a boss h5bp.com/q
.clearix() {
  *zoom: 1;
  &:before,
  &:after {
    display: table;
    content: "";
    // Fixes Opera/contenteditable bug:
    // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
    line-height: 0;
  }
  &:after {
    clear: both;
  }
}

// =
// =
// =
// =
// =
// ===== CSS3 ============================================================================================================ 

// Gradients
.gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF)
{
  background: @color;
  background: -webkit-gradient(linear,
                               left bottom,
                               left top,
                               color-stop(0, @start),
                               color-stop(1, @stop));
  background: -ms-linear-gradient(bottom,
                                  @start,
                                  @stop);
  background: -moz-linear-gradient(center bottom,
                                   @start 0%,
                                   @stop 100%);
}
.bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255)
{
  background: @color;
  background: -webkit-gradient(linear,
                               left bottom,
                               left top,
                               color-stop(0, rgb(@start,@start,@start)),
                               color-stop(1, rgb(@stop,@stop,@stop)));
  background: -ms-linear-gradient(bottom,
                                  rgb(@start,@start,@start) 0%,
                                  rgb(@start,@start,@start) 100%);
  background: -moz-linear-gradient(center bottom,
                                   rgb(@start,@start,@start) 0%,
                                   rgb(@stop,@stop,@stop) 100%);
}

// Shadows
//
//    ___ .box-shadow()
//   |
//   |  Ombré extérieur.
//   |
//   |  1 param   : @blur
//   |  2+ params : @horizontal / @vertical / @blur / @color: #000 / @spread: 0px
//   
//    ___ .inset-shadow()
//   |
//   |  Ombré intérieur.
//   |
//   |  1 param   : @blur
//   |  2+ params : @horizontal / @vertical / @blur / @color: #000 / @spread: 0px
//
.box-shadow(@blur: 9px)
{
  filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000');
  -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')";
  -webkit-box-shadow: 0 0 @blur #000;
     -moz-box-shadow: 0 0 @blur #000;
      -ms-box-shadow: 0 0 @blur #000;
          box-shadow: 0 0 @blur #000;
}
.box-shadow(@x, @y, @blur: 9px, @color: #000, @spread: 0px)
{
  filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=@x, OffY=@y, Color=~'@{color}');
  -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=@{x}, OffY=@{y}, Color='@{color}')";
  -webkit-box-shadow: @x @y @blur @spread @color;
     -moz-box-shadow: @x @y @blur @spread @color;
      -ms-box-shadow: @x @y @blur @spread @color;
          box-shadow: @x @y @blur @spread @color;
}
.inset-shadow(@blur: 9px)
{
  filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000');
  -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='#000')";
  -webkit-box-shadow: 0 0 @blur #000 inset;
     -moz-box-shadow: 0 0 @blur #000 inset;
      -ms-box-shadow: 0 0 @blur #000 inset;
          box-shadow: 0 0 @blur #000 inset;
}
.inset-shadow(@x, @y, @blur: 9px, @color: #000, @spread: 0px)
{
  filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=@x, OffY=@y, Color=~'@{color}');
  -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=0, OffY=0, Color='@{color}')";
  -webkit-box-shadow: @x @y @blur @spread @color inset;
     -moz-box-shadow: @x @y @blur @spread @color inset;
      -ms-box-shadow: @x @y @blur @spread @color inset;
          box-shadow: @x @y @blur @spread @color inset;
}

.drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1)
{
  -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
  -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
  box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha);
}

// Border radius
.rounded(@radius: 2px)
{
  -webkit-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding;
          background-clip: padding-box; 
}
.border-radius(@topleft: 0, @topright: 0, @bottomright: 0, @bottomleft: 0)
{
	-webkit-border-radius:@arguments;
	   -moz-border-radius:@arguments;
	        border-radius:@arguments;
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding;
          background-clip: padding-box; 
}

// transitions
.transition-simply-prefix(@string) {
  -webkit-transition: @string;
  -moz-transition: @string;
  -o-transition: @string;
  transition: @string;
}

//
//    ___ .transition()
//   |
//   |  1 param   : @property
//   |  2 params  : @property / @duration
//   |  3+ params : @property / @duration / @transitiondelay:0s , @timingfunction:ease-out
//   
//    ___ .transitions()
//   |
//   |  Permet de fixer des paramètres spécifique par propriétés, exemple:
//   |  
//   |  .transitions(
//   |     'height , padding  , margin , box-shadow',
//   |     '.5s    , .2s      , .2s    , .2s',
//   |     '0s     , 0s       , 0s     , .3s',
//   |     'linear , ease-out , linear , ease-out'
//   |  );
//
.transition(@property: all)
{
  -webkit-transition: @property;
     -moz-transition: @property;
       -o-transition: @property;
          transition: @property;
}
.transition(@property, @duration)
{
  -webkit-transition: @arguments;
     -moz-transition: @arguments;
       -o-transition: @arguments;
          transition: @arguments;
}
.transition(@property, @duration, @transitiondelay, @timingfunction:ease-out)
{
  -webkit-transition: @arguments;
     -moz-transition: @arguments;
       -o-transition: @arguments;
          transition: @arguments;
}
.transitions(@property: all, @duration:0s, @transitiondelay:0s, @timingfunction:ease-out)
{
  -webkit-transition-property       :~'@{property}';
  -webkit-transition-duration       :~'@{duration}';
  -webkit-transition-delay          :~'@{transitiondelay}';
  -webkit-transition-timing-function:~'@{timingfunction}';
     -moz-transition-property       :~'@{property}';
     -moz-transition-duration       :~'@{duration}';
     -moz-transition-delay          :~'@{transitiondelay}';
     -moz-transition-timing-function:~'@{timingfunction}';
       -o-transition-property       :~'@{property}';
       -o-transition-duration       :~'@{duration}';
       -o-transition-delay          :~'@{transitiondelay}';
       -o-transition-timing-function:~'@{timingfunction}';
          transition-property       :~'@{property}';
          transition-duration       :~'@{duration}';
          transition-delay          :~'@{transitiondelay}';
          transition-timing-function:~'@{timingfunction}';
}

.transitions-duration(@duration: 0s)
{
  -webkit-transition-duration: ~'@{duration}';
     -moz-transition-duration: ~'@{duration}';
       -o-transition-duration: ~'@{duration}';
          transition-duration: ~'@{duration}';
}

.transition-duration(@duration: 0.2s)
{
  -webkit-transition-duration: @duration;
     -moz-transition-duration: @duration;
       -o-transition-duration: @duration;
          transition-duration: @duration;
}

.transitions-delay(@delay: 0s)
{
  -webkit-transition-delay: ~'@{delay}';
     -moz-transition-delay: ~'@{delay}';
       -o-transition-delay: ~'@{delay}';
          transition-delay: ~'@{delay}';
}

// Rotate
//
//    ___ .rotation()
//   |
//   |  1 param   : @degree
//   
//    ___ .rotate()
//   |  
//   |  Tentative de compatibilté étendue (fonctionne uniquement pour 0, 90, 180 ou 270 degrés).
//   |  
//   |  1 param  : @degree
//   |  3 params : @degree / @originX / @originY
//
.rotation(@deg:5deg)
{
  -webkit-transform: rotate(@deg);
     -moz-transform: rotate(@deg);
          transform: rotate(@deg);
}
.rotate(@value, @originX:0%, @originY:0%, @unit:'deg')
{
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation = (360 / @value) + 1); //0, 1, 2, or 3 rotate 0, 90, 180 or 270
  -webkit-transform: rotate(~"@{value}@{unit}"); // ~"@{value}@{unit}" rather than @value@unit remove the spaces between value and unit.
     -moz-transform: rotate(~"@{value}@{unit}");
      -ms-transform: rotate(~"@{value}@{unit}");
       -o-transform: rotate(~"@{value}@{unit}");
          transform: rotate(~"@{value}@{unit}");
  -webkit-transform-origin:@originX @originY;
     -moz-transform-origin:@originX @originY;
      -ms-transform-origin:@originX @originY;
       -o-transform-origin:@originX @originY;
          transform-origin:@originX @originY;
}

// Scale
.scale(@ratio:1.5)
{
  -webkit-transform:scale(@ratio);
     -moz-transform:scale(@ratio);
          transform:scale(@ratio);
}

// Translate
.translate(@x:0, @y:0)
{
  -webkit-transform: translate(@x, @y);
     -moz-transform: translate(@x, @y);
      -ms-transform: translate(@x, @y);
       -o-transform: translate(@x, @y);
          transform: translate(@x, @y);
}

// Columns
.columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px)
{
  -webkit-column-width     : @colwidth;
  -webkit-column-count     : @colcount;
  -webkit-column-gap       : @colgap;
  -webkit-column-rule-color: @columnRuleColor;
  -webkit-column-rule-style: @columnRuleStyle;
  -webkit-column-rule-width: @columnRuleWidth;
     -moz-column-width     : @colwidth;
     -moz-column-count     : @colcount;
     -moz-column-gap       : @colgap;
     -moz-column-rule-color: @columnRuleColor;
     -moz-column-rule-style: @columnRuleStyle;
     -moz-column-rule-width: @columnRuleWidth;
          column-width     : @colwidth;
          column-count     : @colcount;
          column-gap       : @colgap;
          column-rule-color: @columnRuleColor;
          column-rule-style: @columnRuleStyle;
          column-rule-width: @columnRuleWidth;
}

.edit-link(@bc:#CCFF2F,@c:#333)
{
  .dib;
  background-color:@bc;
  border:1px solid;
  border-color:darken(desaturate(@bc, 35%),15%) darken(desaturate(@bc, 35%),15%) darken(desaturate(@bc, 35%),20%);
  .rounded;
  color: @c;
  cursor: pointer;
  .font-size(.8em,1em);
  font-weight: normal;
  padding: 0.25em 0.75em;
  margin-top:.5em;
  
  &:hover{background-color:darken(@bc, 20%);}
  &:active{
    text-shadow: 0 1px 0 lighten(@bc,5%);
    background-color:darken(@bc, 20%);
    //.inset-shadow(0,0,2px,darken(@bc,60));
  }
}

.loader(@fc:#000,@bc:#ccc,@h:8px,@radius:0px)
{
  // Safari/chrome
  &::-webkit-progress-bar{background-color:@bc;.rounded(@radius);}
  &::-webkit-progress-value{background-color:@fc;.rounded(@radius);}
  // Firefox
  &{background-color:@bc;.rounded(@radius);height:@h;}
  &::-moz-progress-bar{background-color:@fc;.rounded(@radius);}
}

// =
// =
// =
// =
// =
// ===== RETINA ========================================================================================================== 

// retina.less
// A helper mixin for applying high-resolution background images (http://www.retinajs.com)
.at2x(@path, @w: auto, @h: auto) {
  background-image: url(@path);
  @at2x_path: ~`"@{path}".split('.').slice(0, "@{path}".split('.').length - 1).join(".") + "@2x" + "." + "@{path}".split('.')["@{path}".split('.').length - 1]`;

  @media all and (-webkit-min-device-pixel-ratio : 1.5) {
    background-image: url(@at2x_path);
    background-size: @w @h;
  }
}
