// stylelint-disable declaration-no-important

// Margin and Padding

@each $breakpoint in map-keys($grid-breakpoints) {
  @include media-breakpoint-up($breakpoint) {
    $infix: breakpoint-infix($breakpoint, $grid-breakpoints);

    @each $prop, $abbrev in (margin: m, padding: p) {
      @each $size, $length in $spacers {
        .#{$infix}#{$abbrev}-#{$size} { #{$prop}: $length !important; }
        .#{$infix}#{$abbrev}t-#{$size},
        .#{$infix}#{$abbrev}y-#{$size} {
          #{$prop}-top: $length !important;
        }
        .#{$infix}#{$abbrev}r-#{$size},
        .#{$infix}#{$abbrev}x-#{$size} {
          #{$prop}-right: $length !important;
        }
        .#{$infix}#{$abbrev}b-#{$size},
        .#{$infix}#{$abbrev}y-#{$size} {
          #{$prop}-bottom: $length !important;
        }
        .#{$infix}#{$abbrev}l-#{$size},
        .#{$infix}#{$abbrev}x-#{$size} {
          #{$prop}-left: $length !important;
        }
      }
    }

    // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)
    @each $size, $length in $spacers {
      @if $size != 0 {
        .#{$infix}m-n#{$size} { margin: -$length !important; }
        .#{$infix}mt-n#{$size},
        .#{$infix}my-n#{$size} {
          margin-top: -$length !important;
        }
        .#{$infix}mr-n#{$size},
        .#{$infix}mx-n#{$size} {
          margin-right: -$length !important;
        }
        .#{$infix}mb-n#{$size},
        .#{$infix}my-n#{$size} {
          margin-bottom: -$length !important;
        }
        .#{$infix}ml-n#{$size},
        .#{$infix}mx-n#{$size} {
          margin-left: -$length !important;
        }
      }
    }

    // Some special margin utils
    .#{$infix}m-auto { margin: auto !important; }
    .#{$infix}mt-auto,
    .#{$infix}my-auto {
      margin-top: auto !important;
    }
    .#{$infix}mr-auto,
    .#{$infix}mx-auto {
      margin-right: auto !important;
    }
    .#{$infix}mb-auto,
    .#{$infix}my-auto {
      margin-bottom: auto !important;
    }
    .#{$infix}ml-auto,
    .#{$infix}mx-auto {
      margin-left: auto !important;
    }

    // gap for flex-box and grid
    @each $prop, $abbrev in (gap: gap) {
      @each $size, $length in $spacers {
        .#{$infix}#{$abbrev}-#{$size} { #{$prop}: $length !important; }
      }
    }
  }
}
