$stroke-width: 2px;
$stroke-width-large: 3px;
$number-circle-size: 26px;
$number-circle-size-large: 35px;
$dot-size: 16px;
$top-border: solid 2px $grey-3;

@mixin task-list-vertical-line ($line-style: solid) {
  content: "";
  position: absolute;
  z-index: 2;
  width: 0;
  height: 100%;
  border-left: $line-style $stroke-width $grey-2;
  background: $white;
}

@mixin task-list-line-position {
  left: -($gutter + $gutter-half);
  margin-left: ($number-circle-size / 2) - ($stroke-width / 2);
}

@mixin task-list-line-position-large {
  left: -($gutter * 2);
  margin-left: ($number-circle-size-large / 2) - ($stroke-width-large / 2);
  border-width: $stroke-width-large;
}

.gem-c-task-list {
  margin-bottom: $gutter-half;
}

.gem-c-task-list__controls {
  padding: 3px 3px 0 0;
  text-align: right;
}

.gem-c-task-list__button {
  color: $link-colour;
  cursor: pointer;
  background: none;
  border: 0;
  margin: 0;
}

// removes extra dotted outline from buttons in Firefox
// on focus (standard yellow outline unaffected)
.gem-c-task-list__button::-moz-focus-inner {
  border: 0;
}

.gem-c-task-list__button--title {
  @include _core-font-generator(19px, 19px, 19px, 1.4, 1.4, false, bold);
  display: inline-block;
  padding: 0;
  text-align: left;
  color: $black;

  .gem-c-task-list--large & {
    @include _core-font-generator(24px, 19px, 24px, 1.4, 1.4, false, bold);
  }
}

.gem-c-task-list__button--controls {
  @include _core-font-generator(14px, 14px, 14px, 1, 1, false);
  position: relative;
  z-index: 1; // this and relative position stops focus outline underlap with border of accordion
  padding: 0.5em 0;

  .gem-c-task-list--large & {
    @include _core-font-generator(16px, 14px, 16px, 1, 1, false);
  }
}

.gem-c-task-list__groups {
  padding: 0;
  margin: 0;
}

.gem-c-task-list__group {
  position: relative;
  padding-left: $gutter + $gutter-half;
  list-style: none;

  .gem-c-task-list--large & {
    @include media(tablet) {
      padding-left: $gutter * 2;
    }
  }
}

.gem-c-task-list__group:last-child {
  // little dash at the bottom of the line
  &:before {
    content: "";
    position: absolute;
    z-index: 6;
    bottom: 0;
    left: 0;
    margin-left: $number-circle-size / 4;
    width: $number-circle-size / 2;
    height: 0;
    border-bottom: solid $stroke-width $grey-2;
  }

  .gem-c-task-list__step:last-child {
    &:after {
      // scss-lint:disable DuplicateProperty
      height: -webkit-calc(100% - #{$gutter-half}); // fallback
      height: calc(100% - #{$gutter-half});
      // scss-lint:enable DuplicateProperty
    }

    .gem-c-task-list__help:after {
      height: 100%;
    }
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      &:before {
        margin-left: $number-circle-size-large / 4;
        width: $number-circle-size-large / 2;
        border-width: $stroke-width-large;
      }

      .gem-c-task-list__step:last-child {
        &:after {
          height: calc(100% - #{$gutter});
        }
      }
    }
  }
}

.gem-c-task-list__group--active {
  &:last-child:before,
  .gem-c-task-list__circle--number,
  .gem-c-task-list__step:after,
  .gem-c-task-list__substep:after,
  .gem-c-task-list__help:after {
    border-color: $black;
  }
}

.gem-c-task-list__step {
  position: relative;

  // line down the side of a step
  &:after {
    @include task-list-vertical-line;
    @include task-list-line-position;
    top: $gutter-half;
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      &:after {
        @include task-list-line-position-large;
        top: $gutter;
      }
    }
  }
}

.gem-c-task-list__step--optional {
  // broken line down the side of a step
  &:after {
    border-left-style: dotted;
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      &:after {
        border-width: $stroke-width-large;
      }
    }
  }
}

.gem-c-task-list__circle {
  @include box-sizing(border-box);
  position: absolute;
  z-index: 5;
  top: $gutter-half;
  width: $number-circle-size;
  height: $number-circle-size;
  color: $black;
  background: $white;
  border-radius: 100px;
  text-align: center;

  .gem-c-task-list--large & {
    @include media(tablet) {
      top: $gutter;
      width: $number-circle-size-large;
      height: $number-circle-size-large;
    }
  }
}

.gem-c-task-list__circle--number {
  @include _core-font-generator(16px, 16px, 16px, 23px, 23px, false, bold);
  left: 0;
  border: solid $stroke-width $grey-2;

  .gem-c-task-list--large & {
    @include _core-font-generator(19px, 16px, 19px, 30px, 23px, false, bold);

    @include media(tablet) {
      border-width: $stroke-width-large;
    }
  }
}

.gem-c-task-list__circle--logic {
  @include _core-font-generator(16px, 16px, 16px, 28px, 28px, false, bold);
  left: -($gutter + $gutter-half);

  .gem-c-task-list--large & {
    @include _core-font-generator(19px, 16px, 19px, 34px, 28px, false, bold);

    @include media(tablet) {
      left: -$gutter * 2;
    }
  }
}

// makes sure logic text expands to the left if text size is zoomed, preventing overlap
.gem-c-task-list__circle-inner {
  float: right;
  min-width: 100%;
}

.gem-c-task-list__circle-background {
  $shadow-offset: 0.1em;
  $shadow-colour: $white;

  // to make numbers readable for users zooming text only in browsers such as Firefox
  text-shadow: 0 -#{$shadow-offset} 0 $shadow-colour,
              $shadow-offset 0 0 $shadow-colour,
              0 $shadow-offset 0 $shadow-colour,
              -#{$shadow-offset} 0 0 $shadow-colour;
}

.gem-c-task-list__header {
  padding: $gutter-half 0;
  border-top: $top-border;

  .gem-c-task-list--active & {
    cursor: pointer;
  }

  &:hover {
    .gem-c-task-list__button {
      color: $link-colour;
    }

    .gem-c-task-list__toggle-link {
      text-decoration: underline;
    }
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      padding: $gutter 0;
    }
  }
}

.gem-c-task-list__title {
  @include _core-font-generator(19px, 19px, 19px, 1.4, 1.4, false, bold);
  margin: 0;

  .gem-c-task-list--large & {
    @include _core-font-generator(24px, 19px, 24px, 1.4, 1.4, false, bold);
  }
}

.gem-c-task-list__toggle-link {
  @include _core-font-generator(14px, 14px, 14px, 1.2, 1.2, false);
  display: block;
  color: $link-colour;

  .gem-c-task-list--large & {
    @include _core-font-generator(16px, 14px, 16px, 1.2, 1.2, false);
  }
}

.gem-c-task-list__panel {
  @include _core-font-generator(16px, 16px, 16px);

  .gem-c-task-list--large & {
    @include _core-font-generator(19px, 16px, 19px);
  }
}

// contents of the task list, such as paragraphs and links

.gem-c-task-list__paragraph,
.gem-c-task-list__heading {
  padding-bottom: $gutter-half;
  margin: 0;
  font-size: inherit;

  + .gem-c-task-list__links {
    margin-top: -5px;

    .gem-c-task-list--large & {
      @include media(tablet) {
        margin-top: -$gutter-half;
      }
    }
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      padding-bottom: $gutter;
    }
  }
}

.gem-c-task-list__heading {
  font-weight: bold;
}

.gem-c-task-list__links {
  padding: 0;
  padding-bottom: 10px;

  .gem-c-task-list--large & {
    @include media(tablet) {
      padding-bottom: 20px;
    }
  }
}

.gem-c-task-list__links--required {
  .gem-c-task-list__link-item {
    font-weight: bold;
  }
}

.gem-c-task-list__links--choice {
  $links-margin: 20px;

  margin-left: $links-margin;
  list-style: disc;

  .gem-c-task-list__link-item--active:before {
    left: -($gutter + $gutter-half) - $links-margin;
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      .gem-c-task-list__link-item--active:before {
        left: -($gutter * 2) - $links-margin;
      }
    }
  }
}

.gem-c-task-list__link {
  margin-bottom: 10px;
}

.gem-c-task-list__link-item {
  text-decoration: none;

  &:hover {
    text-decoration: underline;
  }
}

.gem-c-task-list__link-item--active {
  position: relative;
  color: $black;

  &:visited,
  &:active,
  &:link {
    color: $black;
  }

  &:focus {
    outline: 0;
  }

  &:before {
    @include box-sizing(border-box);
    content: "";
    position: absolute;
    z-index: 5;
    top: 0.6em; // position the dot to align with the first row of text in the link
    left: -($gutter + $gutter-half);
    margin-left: ($number-circle-size / 2) - ($dot-size / 2);
    width: $dot-size;
    height: $dot-size;
    margin-top: -($dot-size / 2);
    background: $black;
    border: solid 2px $white;
    border-radius: 100px;
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      &:before {
        left: -($gutter * 2);
        margin-left: ($number-circle-size-large / 2) - ($dot-size / 2);
      }
    }
  }
}

.gem-c-task-list__context {
  font-weight: normal;
  color: $grey-1;

  &:before {
    content: " \2013  ";
  }
}

.gem-c-task-list__help {
  position: relative;
  padding: $gutter-half 0;
  border-top: $top-border;

  &:after {
    @include task-list-vertical-line(dotted);
    @include task-list-line-position;
    z-index: 3;
    top: 0;
    height: calc(100% + #{$gutter});
  }

  .gem-c-task-list__step--optional & {
    &:after {
      display: none;
    }
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      &:after {
        @include task-list-line-position-large;
        height: calc(100% + #{$gutter} + #{$gutter-half});
      }
    }
  }
}

.gem-c-task-list__help-link {
  text-decoration: none;
  font-weight: bold;

  &:hover {
    text-decoration: underline;
  }
}

.gem-c-task-list__substep {
  position: relative;
  padding-top: $gutter-half;
  border-top: $top-border;

  &:after {
    @include task-list-vertical-line;
    @include task-list-line-position;
    z-index: 3;
    top: 0;
  }

  .gem-c-task-list--large & {
    @include media(tablet) {
      padding-top: $gutter;

      &:after {
        @include task-list-line-position-large;
      }
    }
  }
}

.gem-c-task-list__substep--optional:after {
  border-left-style: dotted;
}