@function theme-color-lighter($color, $transparent: false) {
  @if ($transparent) {
    @return rgba($color, .05);
  } @else {
    @return tint-color($color, 5%);
  }
}

@function theme-color-darker($color) {
  @return shade-color($color, 10%);
}

@function theme-colors($social: true) {
  $colors: $theme-colors;

  @if $enable-extra-colors {
    $colors: map-merge($colors, $extra-colors);
  }

  @if ($enable-social-colors and $social) {
    $colors: map-merge($colors, $social-colors);
  }

  @return $colors;
}

@function str-replace($string, $search, $replace: "") {
  $index: str-index($string, $search);

  @if $index {
    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
  }

  @return $string;
}

@mixin media-breakpoint-down-than($name, $breakpoints: $grid-breakpoints) {
  $prev: breakpoint-prev($name);

  @if $prev == null {
    @content;
  } @else {
    $max: breakpoint-max($prev, $breakpoints);

    @if $max {
      @media (max-width: $max) {
        @content;
      }
    } @else {
      @content;
    }
  }
}

@function breakpoint-prev($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
  $n: index($breakpoint-names, $name);
  @if not $n {
    @error "breakpoint `#{$name}` not found in `#{$breakpoints}`";
  }
  @return if($n > 1, nth($breakpoint-names, $n - 1), null);
}