@mixin standard-gradient($class, $color) {
  linearGradient.#{$class} {
    > .start {
      stop-color: $color;
      stop-opacity: 0.6;
    }

    > .end {
      stop-color: $color;
      stop-opacity: 0.05;
    }
  }
}

.chart.line-chart {
  display: block;
  height: 100%;
  position: relative;

  &.with-annotations {
    margin-top: 2em;
  }

  & > svg {
    display: block;
    height: 100%;
    width: 100%;
    overflow: visible;
  }

  .hover-target {
    fill: transparent;
    stroke: transparent;
  }

  .line {
    fill: transparent;
    stroke-width: 1.25;
  }

  .area {
    fill: none;
  }

  .axis {
    line,
    path {
      stroke: $grey-blue;
    }

    text {
      fill: darken($grey-blue, 20%);
    }
  }

  .gridlines {
    path {
      stroke-width: 0;
    }

    line {
      stroke: lighten($grey-blue, 10%);
      stroke-dasharray: 5 10;
    }
  }

  .line-chart-annotations {
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    pointer-events: none;
  }

  @each $name, $pair in $colors {
    $color: nth($pair, 1);

    .area.is-#{$name} {
      .line {
        stroke: $color;
      }
    }

    linearGradient {
      &.is-#{$name} {
        > .start {
          stop-color: $color;
          stop-opacity: 0.6;
        }

        > .end {
          stop-color: $color;
          stop-opacity: 0.05;
        }
      }
    }
  }

  @each $name, $scale in $chart-scales {
    @include standard-gradient($name, nth($scale, -1));
    .area.#{$name} .line {
      stroke: nth($scale, -1);
    }

    @each $color in $scale {
      @include standard-gradient((#{$name}-#{index($scale, $color)}), $color);
      .area.#{$name}-#{index($scale, $color)} .line {
        stroke: $color;
      }
    }
  }
}
