form {
  // setting the font size here sizes everything within
  &:not(:last-child) {
    margin-bottom: var(--spacing-s);
  }

  button:not(.button--link),
  input,
  select {
    height: var(--spacing-l);
    border: 1px solid;
  }

  checkbox-element,
  radio-element,
  select {
    cursor: pointer;
  }

  [type="email"],
  [type="number"],
  [type="password"]
  [type="text"] {
    padding-right: var(--spacing-s);
    padding-left: var(--spacing-s);
    transition: border 0.2s;
  }

  [type="submit"],
  .button--primary {
    color: $lbry-white;
    padding-right: var(--spacing-m);
    padding-left: var(--spacing-m);
    transition: all 0.2s;

    &:not(:hover) {
      background-color: $lbry-black;
      border-color: $lbry-black;
    }

    &:hover {
      background-color: $lbry-teal-3;
      border-color: $lbry-teal-5;
    }
  }

  select {
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 96 96' xmlns='http://www.w3.org/2000/svg' fill='%23212529'%3E%3Cpath d='M17.172, 31.172c1.562, -1.562 4.095, -1.562 5.656, 0l25.172, 25.171l25.172, -25.171c1.562, -1.562 4.095, -1.562 5.656, 0c1.562, 1.562 1.562, 4.095 0, 5.656l-28, 28c-1.562, 1.562 -4.095, 1.562 -5.656, 0l-28, -28c-0.781, -0.781 -1.172, -1.805 -1.172, -2.828c0, -1.023 0.391, -2.047 1.172, -2.828Z'/%3E%3C/svg%3E%0A");
    background-position: 99% center;
    background-repeat: no-repeat;
    background-size: 1rem;
    padding-right: var(--spacing-l);
    padding-left: var(--spacing-s);
  }
}

fieldset {
  border-top: 1px solid $lbry-gray-1;
  margin-bottom: var(--spacing-m);
  position: relative;
}

fieldset-group {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

fieldset-section {
  display: flex;
  flex-direction: column;
  margin-bottom: var(--spacing-m);

  &.full-width {
    width: 100%;
  }

  fieldset-group &,
  .fieldset-group & {
    width: 49%;
  }

  label {
    color: $lbry-gray-4;
    display: inline-block;
    font-size: smaller;
    margin-bottom: var(--spacing-xxs);
    text-transform: uppercase;
  }

  [type="email"],
  [type="text"],
  select,
  textarea {
    &:not(:focus) {
      border-color: $lbry-black;
    }

    &:focus {
      border-color: $lbry-teal-5;
    }
  }

  input,
  select {
    width: 100%;
  }
}

legend {
  padding: var(--spacing-xs) var(--spacing-s); // sass-lint:disable-line shorthand-values
  border: 1px solid $lbry-gray-1;
  margin-bottom: var(--spacing-s);
  pointer-events: none;
}

input-submit {
  display: flex;

  [type="email"],
  [type="text"] {
    flex: 1;

    &:not(:focus) {
      border-top-color: $lbry-black;
      border-right-color: transparent;
      border-bottom-color: $lbry-black;
      border-left-color: $lbry-black;
    }

    &:focus {
      border-top-color: $lbry-teal-5;
      border-right-color: transparent;
      border-bottom-color: $lbry-teal-5;
      border-left-color: $lbry-teal-5;
    }
  }
}

checkbox-element {
  @include tick;

  &:hover {
    checkbox-toggle,
    .checkbox-toggle {
      border-color: $lbry-teal-4;
    }
  }

  input {
    &[type="checkbox"] {
      width: 0; height: 0;
      visibility: hidden;

      &:not(:checked) {
        + label + checkbox-toggle::before,
        + label + .checkbox-toggle::before {
          opacity: 0;
          visibility: hidden;
        }
      }

      &:checked {
        + label {
          color: $lbry-teal-4;
        }
      }
    }
  }
}

checkbox-toggle {
  @include tick-toggle;

  &::before {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2333b58f' stroke-width='2'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E%0A");
    background-position: center left;
    background-repeat: no-repeat;
    background-size: 130%;
    transition: all 0.2s;
  }
}

radio-element {
  @include tick;

  &:hover {
    radio-toggle,
    .radio-toggle {
      border-color: $lbry-teal-4;
    }
  }

  input {
    &[type="radio"] {
      width: 0; height: 0;
      visibility: hidden;

      &:not(:checked) {
        + label + radio-toggle::before,
        + label + .radio-toggle::before {
          background-color: transparent;
        }
      }

      &:checked {
        + label {
          color: $lbry-teal-4;
        }

        + label + radio-toggle::before,
        + label + .radio-toggle::before {
          background-color: $lbry-teal-4;
        }
      }
    }
  }
}

radio-toggle {
  @include tick-toggle;
  border-radius: 50%;

  &::before {
    border-radius: 50%;
    transform: scale(0.6);
    transition: background-color 0.2s;
  }
}

// Custom elements are apparently difficult to use in React, so use classes

.checkbox-element {
  @extend checkbox-element;
}

.checkbox-toggle {
  @extend checkbox-toggle;
}

.fieldset {
  @extend fieldset;
}

.fieldset-group {
  @extend fieldset-group;
}

.fieldset-section {
  @extend fieldset-section;
}

.form {
  @extend form;
}

.input-submit {
  @extend input-submit;
}

.radio-element {
  @extend radio-element;
}

.radio-toggle {
  @extend radio-toggle;
}