.row {
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    align-items: flex-start;
    > [class*="col-"] {
        box-sizing: border-box;
    }
}
@cols: 5, 10, 15, 20, 25, 30, 100/3, 35, 40, 45, 50, 55, 60, 65, 100*(2/3), 70, 75, 80, 85, 90, 95, 100;

@media all and (max-width: 600px) {
  .row {
      .col-auto {
          width: 100%;
      }
      .-(@i: length(@cols)) when (@i > 0) {
          @divider: e(extract(@cols, @i));
          @className: `Math.floor(@{divider})`;
          @n: `100/parseFloat(@{divider})`;
          @n-1: @n - 1;
          .col-@{className} {
              width: ~"@{divider}%";
              width: ~"-webkit-calc((100% - 16px*@{n-1}) / @{n})";
              width: ~"calc((100% - 16px*@{n-1}) / @{n})";
          }
          &.no-gutter {
              .col-@{className} {
                  width: ~"@{divider}%";
              }
          }
          .-((@i - 1));
      } .-;
      .--(@j: 1) when (@j < length(@cols)) {
          @divider: e(extract(@cols, @j));
          @className: `Math.floor(@{divider})`;
          .col-auto:nth-last-child(@{j}), .col-auto:nth-last-child(@{j}) ~ .col-auto {
              @j-1: @j - 1;
              width: 100% / @j;
              width: ~"-webkit-calc((100% - 16px*@{j-1}) / @{j})";
              width: ~"calc((100% - 16px*@{j-1}) / @{j})";
          }
          &.no-gutter {
              .col-auto:nth-last-child(@{j}), .col-auto:nth-last-child(@{j}) ~ .col-auto {
                  width: 100% / @j;
              }
          }
          .--((@j + 1));
      } .--;

  }
}

@media all and (max-width: 992px) and (min-width: 601px) {
    .row {
        .-(@i: length(@cols)) when (@i > 0) {
            @divider: e(extract(@cols, @i));
            @className: `Math.floor(@{divider})`;
            @n: `100/parseFloat(@{divider})`;
            @n-1: @n - 1;
            .tablet-@{className} {
                width: ~"@{divider}%";
                width: ~"-webkit-calc((100% - 16px*@{n-1}) / @{n})";
                width: ~"calc((100% - 16px*@{n-1}) / @{n})";
            }
            &.no-gutter {
                .tablet-@{className} {
                    width: ~"@{divider}%";
                }
            }
            .-((@i - 1));
        } .-;
        .--(@j: 1) when (@j < length(@cols)) {
            .tablet-auto:nth-last-child(@{j}), .tablet-auto:nth-last-child(@{j}) ~ .col-auto {
                @j-1: @j - 1;
                width: 100% / @j;
                width: ~"-webkit-calc((100% - 16px*@{j-1}) / @{j})";
                width: ~"calc((100% - 16px*@{j-1}) / @{j})";
            }
            &.no-gutter {
                .tablet-auto:nth-last-child(@{j}), .tablet-auto:nth-last-child(@{j}) ~ .tablet-auto {
                    width: 100% / @j;
                }
            }
            .--((@j + 1));
        } .--;
    }
}


@media all and (min-width: 993px) {
    .row {
        .-(@i: length(@cols)) when (@i > 0) {
            @divider: e(extract(@cols, @i));
            @className: `Math.floor(@{divider})`;
            @n: `100/parseFloat(@{divider})`;
            @n-1: @n - 1;
            .desktop-@{className} {
                width: ~"@{divider}%";
                width: ~"-webkit-calc((100% - 16px*@{n-1}) / @{n})";
                width: ~"calc((100% - 16px*@{n-1}) / @{n})";
            }
            &.no-gutter {
                .desktop-@{className} {
                    width: ~"@{divider}%";
                }
            }
            .-((@i - 1));
        } .-;
        .--(@j: 1) when (@j < length(@cols)) {
            .desktop-auto:nth-last-child(@{j}), .desktop-auto:nth-last-child(@{j}) ~ .col-auto {
                @j-1: @j - 1;
                width: 100% / @j;
                width: ~"-webkit-calc((100% - 16px*@{j-1}) / @{j})";
                width: ~"calc((100% - 16px*@{j-1}) / @{j})";
            }
            &.no-gutter {
                .desktop-auto:nth-last-child(@{j}), .desktop-auto:nth-last-child(@{j}) ~ .desktop-auto {
                    width: 100% / @j;
                }
            }
            .--((@j + 1));
        } .--;
    }
}
