.c-loading {
  $self: #{&};
  $spinner: #{$self}__spinner;
  $text: #{$self}__text;

  // Configuration
  $border: none;
  $border-radius: $g-border-radius-lg;
  $text-color: $g-font-color;
  $text-size: 1.2rem;

  @at-root {
    #{$self} {
      display: inline-flex;
      flex-flow: row nowrap;
      justify-content: center;
      align-items: center;
      padding: 10px;
      background-color: #fff;
      border: $border;
      border-radius: $border-radius;
      text-align: center;
      font-size: $text-size;
      color: $text-color;
      overflow: hidden;
    }

    #{$text} {
      display: block;
      margin-left: 0.6em;
      font-weight: bold;
      font-size: 1em;
    }

  }

  // Modifiers
  &.is-elevated {
    @include box-elevation();
  }

  &.is-dense {
    padding: 5px;
    font-size: 1rem;
  }

}

// === Loaders
.loader-default {
  $self: #{&};

  $spinner-size: 45px;
  $spinner-border: 6px solid;
  $spinner-color: $color-primary;
  $spinner-track-color: $g-border-color;

  @at-root {
    #{$self} {
      position: relative;
      display: block;
      font-size: $spinner-size;
      width: 1em;
      height: 1em;
      margin: 0 auto;

      &:before,
      &:after {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        display: block;
        width: 100%;
        height: 100%;
        border-radius: 50%;
      }

      &:before {
        z-index: 2;
        border: $spinner-border;
        border-color: transparent transparent transparent $spinner-color;
        animation: loaderSpin 0.6s linear infinite;
      }

      &:after {
        z-index: 1;
        border: $spinner-border $spinner-track-color;
      }

    }

  }

  @keyframes loaderSpin {
    0% {
      transform: rotate(0deg);
    }
    50% {
      transform: rotate(180deg);
    }
    100% {
      transform: rotate(360deg);
    }
  }

}