// breakpoints.scss v1.0 | @ajlkn | MIT licensed */

// Vars.

/// Breakpoints. /// @var {list} $breakpoints: () !global;

// Mixins.

/// Sets breakpoints. /// @param {map} $x Breakpoints. @mixin breakpoints($x: ()) {

$breakpoints: $x !global;

}

/// Wraps @content in a @media block targeting a specific orientation. /// @param {string} $orientation Orientation. @mixin orientation($orientation) {

@media screen and (orientation: #{$orientation}) {
  @content;
}

}

/// Wraps @content in a @media block using a given query. /// @param {string} $query Query. @mixin breakpoint($query: null) {

$breakpoint: null;
$op: null;
$media: null;

// Determine operator, breakpoint.

  // Greater than or equal.
    @if (str-slice($query, 0, 2) == '>=') {

      $op: 'gte';
      $breakpoint: str-slice($query, 3);

    }

  // Less than or equal.
    @elseif (str-slice($query, 0, 2) == '<=') {

      $op: 'lte';
      $breakpoint: str-slice($query, 3);

    }

  // Greater than.
    @elseif (str-slice($query, 0, 1) == '>') {

      $op: 'gt';
      $breakpoint: str-slice($query, 2);

    }

  // Less than.
    @elseif (str-slice($query, 0, 1) == '<') {

      $op: 'lt';
      $breakpoint: str-slice($query, 2);

    }

  // Not.
    @elseif (str-slice($query, 0, 1) == '!') {

      $op: 'not';
      $breakpoint: str-slice($query, 2);

    }

  // Equal.
    @else {

      $op: 'eq';
      $breakpoint: $query;

    }

// Build media.
  @if ($breakpoint and map-has-key($breakpoints, $breakpoint)) {

    $a: map-get($breakpoints, $breakpoint);

    // Range.
      @if (type-of($a) == 'list') {

        $x: nth($a, 1);
        $y: nth($a, 2);

        // Max only.
          @if ($x == null) {

            // Greater than or equal (>= 0 / anything)
              @if ($op == 'gte') {
                $media: 'screen';
              }

            // Less than or equal (<= y)
              @elseif ($op == 'lte') {
                $media: 'screen and (max-width: ' + $y + ')';
              }

            // Greater than (> y)
              @elseif ($op == 'gt') {
                $media: 'screen and (min-width: ' + ($y + 1) + ')';
              }

            // Less than (< 0 / invalid)
              @elseif ($op == 'lt') {
                $media: 'screen and (max-width: -1px)';
              }

            // Not (> y)
              @elseif ($op == 'not') {
                $media: 'screen and (min-width: ' + ($y + 1) + ')';
              }

            // Equal (<= y)
              @else {
                $media: 'screen and (max-width: ' + $y + ')';
              }

          }

        // Min only.
          @else if ($y == null) {

            // Greater than or equal (>= x)
              @if ($op == 'gte') {
                $media: 'screen and (min-width: ' + $x + ')';
              }

            // Less than or equal (<= inf / anything)
              @elseif ($op == 'lte') {
                $media: 'screen';
              }

            // Greater than (> inf / invalid)
              @elseif ($op == 'gt') {
                $media: 'screen and (max-width: -1px)';
              }

            // Less than (< x)
              @elseif ($op == 'lt') {
                $media: 'screen and (max-width: ' + ($x - 1) + ')';
              }

            // Not (< x)
              @elseif ($op == 'not') {
                $media: 'screen and (max-width: ' + ($x - 1) + ')';
              }

            // Equal (>= x)
              @else {
                $media: 'screen and (min-width: ' + $x + ')';
              }

          }

        // Min and max.
          @else {

            // Greater than or equal (>= x)
              @if ($op == 'gte') {
                $media: 'screen and (min-width: ' + $x + ')';
              }

            // Less than or equal (<= y)
              @elseif ($op == 'lte') {
                $media: 'screen and (max-width: ' + $y + ')';
              }

            // Greater than (> y)
              @elseif ($op == 'gt') {
                $media: 'screen and (min-width: ' + ($y + 1) + ')';
              }

            // Less than (< x)
              @elseif ($op == 'lt') {
                $media: 'screen and (max-width: ' + ($x - 1) + ')';
              }

            // Not (< x and > y)
              @elseif ($op == 'not') {
                $media: 'screen and (max-width: ' + ($x - 1) + '), screen and (min-width: ' + ($y + 1) + ')';
              }

            // Equal (>= x and <= y)
              @else {
                $media: 'screen and (min-width: ' + $x + ') and (max-width: ' + $y + ')';
              }

          }

      }

    // String.
      @else {

        // Missing a media type? Prefix with "screen".
          @if (str-slice($a, 0, 1) == '(') {
            $media: 'screen and ' + $a;
          }

        // Otherwise, use as-is.
          @else {
            $media: $a;
          }

      }

  }

// Output.
      @media #{$media} {
    @content;
  }

}