@charset "UTF-8";

/**
 * This code is modified from Material Design Lite _grid.sass,
 * which is Licensed under the Apache License, Version 2.0
 * Copyright 2015 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

//////////////////////////////////////////////////////////////////////////////////
//
// Element queries for _grid.scss, based on: https://github.com/Snugug/eq.js
//
//////////////////////////////////////////////////////////////////////////////////

// Use of this module requires the user to include variables from material-design-lite in hers/his main SASS module
//@import "../../node_modules/material-design-lite/src/variables";
.mdlext-grid {
  display: flex;
  flex-flow: row wrap;
  margin: 0 auto;
  align-items: stretch;

  &.mdlext-grid--no-spacing {
    padding: 0;
  }

  & > .mdlext-cell {
    box-sizing: border-box;
  }

  & > .mdlext-cell--top {
    align-self: flex-start;
  }

  & > .mdlext-cell--middle {
    align-self: center;
  }

  & > .mdlext-cell--bottom {
    align-self: flex-end;
  }

  & > .mdlext-cell--stretch {
    align-self: stretch;
  }

  .mdlext-grid--no-spacing > .mdlext-cell {
    margin: 0;
  }

  // Define order override classes.
  @for $i from 1 through $grid-max-columns {
    & > .mdlext-cell--order-#{$i} {
      order: $i;
    }
  }
}

// Mixins for width calculation.
@mixin _partial-size($size, $columns, $gutter) {
  width: calc(#{(($size / $columns) * 100) + "%"} - #{$gutter});
}
@mixin _full-size($gutter) {
  @include _partial-size(1, 1, $gutter);
}
@mixin _offset-size($size, $columns, $gutter) {
  margin-left: calc(#{(($size / $columns) * 100) + "%"} + #{$gutter / 2});
}

@mixin _partial-size-no-spacing($size, $columns) {
  width: #{(($size / $columns) * 100) + "%"};
}
@mixin _full-size-no-spacing() {
  @include _partial-size-no-spacing(1, 1);
}
@mixin _offset-size-no-spacing($size, $columns) {
  margin-left: #{(($size / $columns) * 100) + "%"};
}


.mdlext-grid {

  @include eq-pts((
    grid_phone: 0,
    grid_tablet: strip-unit($grid-tablet-breakpoint),
    grid_desktop: strip-unit($grid-desktop-breakpoint)
  ));

  ////////// Phone //////////
  @include eq('grid_phone') {
    padding: $grid-phone-margin - ($grid-phone-gutter / 2);

    & > .mdlext-cell {
      margin: $grid-phone-gutter / 2;
      @include _partial-size($grid-cell-default-columns, $grid-phone-columns, $grid-phone-gutter);
    }

    & > .mdlext-cell--hide-phone {
      display: none !important;
    }

    // Define order override classes.
    @for $i from 1 through $grid-max-columns {
      & > .mdlext-cell--order-#{$i}-phone.mdlext-cell--order-#{$i}-phone {
        order: $i;
      }
    }

    // Define partial sizes for columnNumber < totalColumns.
    @for $i from 1 through ($grid-phone-columns - 1) {
      & > .mdlext-cell--#{$i}-col,
      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
        @include _partial-size($i, $grid-phone-columns, $grid-phone-gutter);
      }
    }

    // Define 100% for everything else.
    @for $i from $grid-phone-columns through $grid-desktop-columns {
      & > .mdlext-cell--#{$i}-col,
      & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
        @include _full-size($grid-phone-gutter);
      }
    }

    // Define valid phone offsets.
    @for $i from 1 through ($grid-phone-columns - 1) {
      & > .mdlext-cell--#{$i}-offset,
      & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {
        @include _offset-size($i, $grid-phone-columns, $grid-phone-gutter);
      }
    }

    &.mdlext-grid--no-spacing {
      padding: 0;

      & > .mdlext-cell {
        margin: 0;
        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-phone-columns);
      }

      // Define partial sizes for columnNumber < totalColumns.
      @for $i from 1 through ($grid-phone-columns - 1) {
        & > .mdlext-cell--#{$i}-col,
        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
          @include _partial-size-no-spacing($i, $grid-phone-columns);
        }
      }

      // Define 100% for everything else.
      @for $i from $grid-phone-columns through $grid-desktop-columns {
        & > .mdlext-cell--#{$i}-col,
        & > .mdlext-cell--#{$i}-col-phone.mdlext-cell--#{$i}-col-phone {
          @include _full-size-no-spacing();
        }
      }

      // Define valid phone offsets.
      @for $i from 1 through ($grid-phone-columns - 1) {
        & > .mdlext-cell--#{$i}-offset,
        & > .mdlext-cell--#{$i}-offset-phone.mdlext-cell--#{$i}-offset-phone {
          @include _offset-size-no-spacing($i, $grid-phone-columns);
        }
      }
    }
  }

  ////////// Tablet //////////
  @include eq('grid_tablet') {
    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);

    & > .mdlext-cell {
      margin: $grid-tablet-gutter / 2;
      @include _partial-size($grid-cell-default-columns, $grid-tablet-columns, $grid-tablet-gutter);
    }

    & > .mdlext-cell--hide-tablet {
      display: none !important;
    }

    // Define order override classes.
    @for $i from 1 through $grid-max-columns {
      & > .mdlext-cell--order-#{$i}-tablet.mdlext-cell--order-#{$i}-tablet {
        order: $i;
      }
    }

    // Define partial sizes for columnNumber < totalColumns.
    @for $i from 1 through ($grid-tablet-columns - 1) {
      & > .mdlext-cell--#{$i}-col,
      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
        @include _partial-size($i, $grid-tablet-columns, $grid-tablet-gutter);
      }
    }

    // Define 100% for everything else.
    @for $i from $grid-tablet-columns through $grid-desktop-columns {
      & > .mdlext-cell--#{$i}-col,
      & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
        @include _full-size($grid-tablet-gutter);
      }
    }

    // Define valid tablet offsets.
    @for $i from 1 through ($grid-tablet-columns - 1) {
      & > .mdlext-cell--#{$i}-offset,
      & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {
        @include _offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);
      }
    }

    &.mdlext-grid--no-spacing {
      padding: 0;

      & > .mdlext-cell {
        margin: 0;
        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-tablet-columns);
      }

      // Define partial sizes for columnNumber < totalColumns.
      @for $i from 1 through ($grid-tablet-columns - 1) {
        & > .mdlext-cell--#{$i}-col,
        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
          @include _partial-size-no-spacing($i, $grid-tablet-columns);
        }
      }

      // Define 100% for everything else.
      @for $i from $grid-tablet-columns through $grid-desktop-columns {
        & > .mdlext-cell--#{$i}-col,
        & > .mdlext-cell--#{$i}-col-tablet.mdlext-cell--#{$i}-col-tablet {
          @include _full-size-no-spacing();
        }
      }

      // Define valid tablet offsets.
      @for $i from 1 through ($grid-tablet-columns - 1) {
        & > .mdlext-cell--#{$i}-offset,
        & > .mdlext-cell--#{$i}-offset-tablet.mdlext-cell--#{$i}-offset-tablet {
          @include _offset-size-no-spacing($i, $grid-tablet-columns);
        }
      }
    }
  }

  ////////// Desktop //////////
  @include eq('grid_desktop') {
    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);

    & > .mdlext-cell {
      margin: $grid-desktop-gutter / 2;
      @include _partial-size($grid-cell-default-columns, $grid-desktop-columns, $grid-desktop-gutter);
    }

    & > .mdlext-cell--hide-desktop {
      display: none !important;
    }

    // Define order override classes.
    @for $i from 1 through $grid-max-columns {
      & > .mdlext-cell--order-#{$i}-desktop.mdlext-cell--order-#{$i}-desktop {
        order: $i;
      }
    }

    // Define partial sizes for all numbers of columns.
    @for $i from 1 through $grid-desktop-columns {
      & > .mdlext-cell--#{$i}-col,
      & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {
        @include _partial-size($i, $grid-desktop-columns, $grid-desktop-gutter);
      }
    }

    // Define valid desktop offsets.
    @for $i from 1 through ($grid-desktop-columns - 1) {
      & > .mdlext-cell--#{$i}-offset,
      & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {
        @include _offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);
      }
    }

    &.mdlext-grid--no-spacing {
      padding: 0;

      & > .mdlext-cell {
        margin: 0;
        @include _partial-size-no-spacing($grid-cell-default-columns, $grid-desktop-columns);
      }

      // Define partial sizes for all numbers of columns.
      @for $i from 1 through $grid-desktop-columns {
        & > .mdlext-cell--#{$i}-col,
        & > .mdlext-cell--#{$i}-col-desktop.mdlext-cell--#{$i}-col-desktop {
          @include _partial-size-no-spacing($i, $grid-desktop-columns);
        }
      }

      // Define valid desktop offsets.
      @for $i from 1 through ($grid-desktop-columns - 1) {
        & > .mdlext-cell--#{$i}-offset,
        & > .mdlext-cell--#{$i}-offset-desktop.mdlext-cell--#{$i}-offset-desktop {
          @include _offset-size-no-spacing($i, $grid-desktop-columns);
        }
      }
    }
  }
}

@include eq-selectors;
