@use "sass:math";
@use "../utilities/css-variables" as cv;
@use "../utilities/derived-variables" as dv;
@use "../utilities/initial-variables" as iv;
@use "../utilities/extends";
@use "../utilities/mixins" as mx;

$column-gap: 1.5rem !default;

:root {
  @include cv.register-vars(
    (
      "column-gap": #{$column-gap},
    )
  );
}

.#{iv.$class-prefix}column {
  display: block;
  flex-basis: 0;
  flex-grow: 1;
  flex-shrink: 1;

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-narrow {
    flex: none;
    width: unset;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-full {
    flex: none;
    width: 100%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-three-quarters {
    flex: none;
    width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-two-thirds {
    flex: none;
    width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-half {
    flex: none;
    width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-one-third {
    flex: none;
    width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-one-quarter {
    flex: none;
    width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-one-fifth {
    flex: none;
    width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-two-fifths {
    flex: none;
    width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-three-fifths {
    flex: none;
    width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-four-fifths {
    flex: none;
    width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-three-quarters {
    margin-inline-start: 75%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-two-thirds {
    margin-inline-start: 66.6666%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-half {
    margin-inline-start: 50%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-one-third {
    margin-inline-start: 33.3333%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-one-quarter {
    margin-inline-start: 25%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-one-fifth {
    margin-inline-start: 20%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-two-fifths {
    margin-inline-start: 40%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-three-fifths {
    margin-inline-start: 60%;
  }

  .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
    > &.#{iv.$class-prefix}is-offset-four-fifths {
    margin-inline-start: 80%;
  }

  @for $i from 0 through 12 {
    .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
      > &.#{iv.$class-prefix}is-#{$i} {
      flex: none;
      width: calc(
        math.percentage(math.div($i, 12)) - calc(#{cv.getVar("column-gap")} / 2)
      );
    }

    .#{iv.$class-prefix}columns.#{iv.$class-prefix}is-mobile
      > &.#{iv.$class-prefix}is-offset-#{$i} {
      margin-inline-start: math.percentage(math.div($i, 12));
    }
  }

  @include mx.mobile {
    &.#{iv.$class-prefix}is-narrow-mobile {
      flex: none;
      width: unset;
    }

    &.#{iv.$class-prefix}is-full-mobile {
      flex: none;
      width: 100%;
    }

    &.#{iv.$class-prefix}is-three-quarters-mobile {
      flex: none;
      width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-thirds-mobile {
      flex: none;
      width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-half-mobile {
      flex: none;
      width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-third-mobile {
      flex: none;
      width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-quarter-mobile {
      flex: none;
      width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-fifth-mobile {
      flex: none;
      width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-fifths-mobile {
      flex: none;
      width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-three-fifths-mobile {
      flex: none;
      width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-four-fifths-mobile {
      flex: none;
      width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-offset-three-quarters-mobile {
      margin-inline-start: 75%;
    }

    &.#{iv.$class-prefix}is-offset-two-thirds-mobile {
      margin-inline-start: 66.6666%;
    }

    &.#{iv.$class-prefix}is-offset-half-mobile {
      margin-inline-start: 50%;
    }

    &.#{iv.$class-prefix}is-offset-one-third-mobile {
      margin-inline-start: 33.3333%;
    }

    &.#{iv.$class-prefix}is-offset-one-quarter-mobile {
      margin-inline-start: 25%;
    }

    &.#{iv.$class-prefix}is-offset-one-fifth-mobile {
      margin-inline-start: 20%;
    }

    &.#{iv.$class-prefix}is-offset-two-fifths-mobile {
      margin-inline-start: 40%;
    }

    &.#{iv.$class-prefix}is-offset-three-fifths-mobile {
      margin-inline-start: 60%;
    }

    &.#{iv.$class-prefix}is-offset-four-fifths-mobile {
      margin-inline-start: 80%;
    }

    @for $i from 0 through 12 {
      &.#{iv.$class-prefix}is-#{$i}-mobile {
        flex: none;
        width: calc(
          math.percentage(math.div($i, 12)) - calc(
              #{cv.getVar("column-gap")} / 2
            )
        );
      }

      &.#{iv.$class-prefix}is-offset-#{$i}-mobile {
        margin-inline-start: math.percentage(math.div($i, 12));
      }
    }
  }

  @include mx.tablet {
    &.#{iv.$class-prefix}is-narrow,
    &.#{iv.$class-prefix}is-narrow-tablet {
      flex: none;
      width: unset;
    }

    &.#{iv.$class-prefix}is-full,
    &.#{iv.$class-prefix}is-full-tablet {
      flex: none;
      width: 100%;
    }

    &.#{iv.$class-prefix}is-three-quarters,
    &.#{iv.$class-prefix}is-three-quarters-tablet {
      flex: none;
      width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-thirds,
    &.#{iv.$class-prefix}is-two-thirds-tablet {
      flex: none;
      width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-half,
    &.#{iv.$class-prefix}is-half-tablet {
      flex: none;
      width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-third,
    &.#{iv.$class-prefix}is-one-third-tablet {
      flex: none;
      width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-quarter,
    &.#{iv.$class-prefix}is-one-quarter-tablet {
      flex: none;
      width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-fifth,
    &.#{iv.$class-prefix}is-one-fifth-tablet {
      flex: none;
      width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-fifths,
    &.#{iv.$class-prefix}is-two-fifths-tablet {
      flex: none;
      width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-three-fifths,
    &.#{iv.$class-prefix}is-three-fifths-tablet {
      flex: none;
      width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-four-fifths,
    &.#{iv.$class-prefix}is-four-fifths-tablet {
      flex: none;
      width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-offset-three-quarters,
    &.#{iv.$class-prefix}is-offset-three-quarters-tablet {
      margin-inline-start: 75%;
    }

    &.#{iv.$class-prefix}is-offset-two-thirds,
    &.#{iv.$class-prefix}is-offset-two-thirds-tablet {
      margin-inline-start: 66.6666%;
    }

    &.#{iv.$class-prefix}is-offset-half,
    &.#{iv.$class-prefix}is-offset-half-tablet {
      margin-inline-start: 50%;
    }

    &.#{iv.$class-prefix}is-offset-one-third,
    &.#{iv.$class-prefix}is-offset-one-third-tablet {
      margin-inline-start: 33.3333%;
    }

    &.#{iv.$class-prefix}is-offset-one-quarter,
    &.#{iv.$class-prefix}is-offset-one-quarter-tablet {
      margin-inline-start: 25%;
    }

    &.#{iv.$class-prefix}is-offset-one-fifth,
    &.#{iv.$class-prefix}is-offset-one-fifth-tablet {
      margin-inline-start: 20%;
    }

    &.#{iv.$class-prefix}is-offset-two-fifths,
    &.#{iv.$class-prefix}is-offset-two-fifths-tablet {
      margin-inline-start: 40%;
    }

    &.#{iv.$class-prefix}is-offset-three-fifths,
    &.#{iv.$class-prefix}is-offset-three-fifths-tablet {
      margin-inline-start: 60%;
    }

    &.#{iv.$class-prefix}is-offset-four-fifths,
    &.#{iv.$class-prefix}is-offset-four-fifths-tablet {
      margin-inline-start: 80%;
    }

    @for $i from 0 through 12 {
      &.#{iv.$class-prefix}is-#{$i},
      &.#{iv.$class-prefix}is-#{$i}-tablet {
        flex: none;
        width: calc(
          math.percentage(math.div($i, 12)) - calc(
              #{cv.getVar("column-gap")} / 2
            )
        );
      }

      &.#{iv.$class-prefix}is-offset-#{$i},
      &.#{iv.$class-prefix}is-offset-#{$i}-tablet {
        margin-inline-start: math.percentage(math.div($i, 12));
      }
    }
  }

  @include mx.touch {
    &.#{iv.$class-prefix}is-narrow-touch {
      flex: none;
      width: unset;
    }

    &.#{iv.$class-prefix}is-full-touch {
      flex: none;
      width: 100%;
    }

    &.#{iv.$class-prefix}is-three-quarters-touch {
      flex: none;
      width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-thirds-touch {
      flex: none;
      width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-half-touch {
      flex: none;
      width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-third-touch {
      flex: none;
      width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-quarter-touch {
      flex: none;
      width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-fifth-touch {
      flex: none;
      width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-fifths-touch {
      flex: none;
      width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-three-fifths-touch {
      flex: none;
      width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-four-fifths-touch {
      flex: none;
      width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-offset-three-quarters-touch {
      margin-inline-start: 75%;
    }

    &.#{iv.$class-prefix}is-offset-two-thirds-touch {
      margin-inline-start: 66.6666%;
    }

    &.#{iv.$class-prefix}is-offset-half-touch {
      margin-inline-start: 50%;
    }

    &.#{iv.$class-prefix}is-offset-one-third-touch {
      margin-inline-start: 33.3333%;
    }

    &.#{iv.$class-prefix}is-offset-one-quarter-touch {
      margin-inline-start: 25%;
    }

    &.#{iv.$class-prefix}is-offset-one-fifth-touch {
      margin-inline-start: 20%;
    }

    &.#{iv.$class-prefix}is-offset-two-fifths-touch {
      margin-inline-start: 40%;
    }

    &.#{iv.$class-prefix}is-offset-three-fifths-touch {
      margin-inline-start: 60%;
    }

    &.#{iv.$class-prefix}is-offset-four-fifths-touch {
      margin-inline-start: 80%;
    }

    @for $i from 0 through 12 {
      &.#{iv.$class-prefix}is-#{$i}-touch {
        flex: none;
        width: math.percentage(math.div($i, 12));
      }

      &.#{iv.$class-prefix}is-offset-#{$i}-touch {
        margin-inline-start: math.percentage(math.div($i, 12));
      }
    }
  }

  @include mx.desktop {
    &.#{iv.$class-prefix}is-narrow-desktop {
      flex: none;
      width: unset;
    }

    &.#{iv.$class-prefix}is-full-desktop {
      flex: none;
      width: 100%;
    }

    &.#{iv.$class-prefix}is-three-quarters-desktop {
      flex: none;
      width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-thirds-desktop {
      flex: none;
      width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-half-desktop {
      flex: none;
      width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-third-desktop {
      flex: none;
      width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-quarter-desktop {
      flex: none;
      width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-fifth-desktop {
      flex: none;
      width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-fifths-desktop {
      flex: none;
      width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-three-fifths-desktop {
      flex: none;
      width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-four-fifths-desktop {
      flex: none;
      width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-offset-three-quarters-desktop {
      margin-inline-start: 75%;
    }

    &.#{iv.$class-prefix}is-offset-two-thirds-desktop {
      margin-inline-start: 66.6666%;
    }

    &.#{iv.$class-prefix}is-offset-half-desktop {
      margin-inline-start: 50%;
    }

    &.#{iv.$class-prefix}is-offset-one-third-desktop {
      margin-inline-start: 33.3333%;
    }

    &.#{iv.$class-prefix}is-offset-one-quarter-desktop {
      margin-inline-start: 25%;
    }

    &.#{iv.$class-prefix}is-offset-one-fifth-desktop {
      margin-inline-start: 20%;
    }

    &.#{iv.$class-prefix}is-offset-two-fifths-desktop {
      margin-inline-start: 40%;
    }

    &.#{iv.$class-prefix}is-offset-three-fifths-desktop {
      margin-inline-start: 60%;
    }

    &.#{iv.$class-prefix}is-offset-four-fifths-desktop {
      margin-inline-start: 80%;
    }

    @for $i from 0 through 12 {
      &.#{iv.$class-prefix}is-#{$i}-desktop {
        flex: none;
        width: calc(
          math.percentage(math.div($i, 12)) - calc(
              #{cv.getVar("column-gap")} / 2
            )
        );
      }

      &.#{iv.$class-prefix}is-offset-#{$i}-desktop {
        margin-inline-start: math.percentage(math.div($i, 12));
      }
    }
  }

  @include mx.widescreen {
    &.#{iv.$class-prefix}is-narrow-widescreen {
      flex: none;
      width: unset;
    }

    &.#{iv.$class-prefix}is-full-widescreen {
      flex: none;
      width: 100%;
    }

    &.#{iv.$class-prefix}is-three-quarters-widescreen {
      flex: none;
      width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-thirds-widescreen {
      flex: none;
      width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-half-widescreen {
      flex: none;
      width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-third-widescreen {
      flex: none;
      width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-quarter-widescreen {
      flex: none;
      width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-fifth-widescreen {
      flex: none;
      width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-fifths-widescreen {
      flex: none;
      width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-three-fifths-widescreen {
      flex: none;
      width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-four-fifths-widescreen {
      flex: none;
      width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-offset-three-quarters-widescreen {
      margin-inline-start: 75%;
    }

    &.#{iv.$class-prefix}is-offset-two-thirds-widescreen {
      margin-inline-start: 66.6666%;
    }

    &.#{iv.$class-prefix}is-offset-half-widescreen {
      margin-inline-start: 50%;
    }

    &.#{iv.$class-prefix}is-offset-one-third-widescreen {
      margin-inline-start: 33.3333%;
    }

    &.#{iv.$class-prefix}is-offset-one-quarter-widescreen {
      margin-inline-start: 25%;
    }

    &.#{iv.$class-prefix}is-offset-one-fifth-widescreen {
      margin-inline-start: 20%;
    }

    &.#{iv.$class-prefix}is-offset-two-fifths-widescreen {
      margin-inline-start: 40%;
    }

    &.#{iv.$class-prefix}is-offset-three-fifths-widescreen {
      margin-inline-start: 60%;
    }

    &.#{iv.$class-prefix}is-offset-four-fifths-widescreen {
      margin-inline-start: 80%;
    }

    @for $i from 0 through 12 {
      &.#{iv.$class-prefix}is-#{$i}-widescreen {
        flex: none;
        width: calc(
          math.percentage(math.div($i, 12)) - calc(
              #{cv.getVar("column-gap")} / 2
            )
        );
      }

      &.#{iv.$class-prefix}is-offset-#{$i}-widescreen {
        margin-inline-start: math.percentage(math.div($i, 12));
      }
    }
  }

  @include mx.fullhd {
    &.#{iv.$class-prefix}is-narrow-fullhd {
      flex: none;
      width: unset;
    }

    &.#{iv.$class-prefix}is-full-fullhd {
      flex: none;
      width: 100%;
    }

    &.#{iv.$class-prefix}is-three-quarters-fullhd {
      flex: none;
      width: calc(75% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-thirds-fullhd {
      flex: none;
      width: calc(66.6666% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-half-fullhd {
      flex: none;
      width: calc(50% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-third-fullhd {
      flex: none;
      width: calc(33.3333% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-quarter-fullhd {
      flex: none;
      width: calc(25% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-one-fifth-fullhd {
      flex: none;
      width: calc(20% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-two-fifths-fullhd {
      flex: none;
      width: calc(40% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-three-fifths-fullhd {
      flex: none;
      width: calc(60% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-four-fifths-fullhd {
      flex: none;
      width: calc(80% - calc(#{cv.getVar("column-gap")} / 2));
    }

    &.#{iv.$class-prefix}is-offset-three-quarters-fullhd {
      margin-inline-start: 75%;
    }

    &.#{iv.$class-prefix}is-offset-two-thirds-fullhd {
      margin-inline-start: 66.6666%;
    }

    &.#{iv.$class-prefix}is-offset-half-fullhd {
      margin-inline-start: 50%;
    }

    &.#{iv.$class-prefix}is-offset-one-third-fullhd {
      margin-inline-start: 33.3333%;
    }

    &.#{iv.$class-prefix}is-offset-one-quarter-fullhd {
      margin-inline-start: 25%;
    }

    &.#{iv.$class-prefix}is-offset-one-fifth-fullhd {
      margin-inline-start: 20%;
    }

    &.#{iv.$class-prefix}is-offset-two-fifths-fullhd {
      margin-inline-start: 40%;
    }

    &.#{iv.$class-prefix}is-offset-three-fifths-fullhd {
      margin-inline-start: 60%;
    }

    &.#{iv.$class-prefix}is-offset-four-fifths-fullhd {
      margin-inline-start: 80%;
    }

    @for $i from 0 through 12 {
      &.#{iv.$class-prefix}is-#{$i}-fullhd {
        flex: none;
        width: calc(
          math.percentage(math.div($i, 12)) - calc(
              #{cv.getVar("column-gap")} / 2
            )
        );
      }

      &.#{iv.$class-prefix}is-offset-#{$i}-fullhd {
        margin-inline-start: math.percentage(math.div($i, 12));
      }
    }
  }
}

.#{iv.$class-prefix}columns {
  @extend %block;
  gap: cv.getVar("column-gap");

  // Modifiers
  &.#{iv.$class-prefix}is-centered {
    justify-content: center;
  }

  &.#{iv.$class-prefix}is-gapless {
    gap: 0;
  }

  &.#{iv.$class-prefix}is-mobile {
    display: flex;
  }

  &.#{iv.$class-prefix}is-multiline {
    flex-wrap: wrap;
  }

  &.#{iv.$class-prefix}is-vcentered {
    align-items: center;
  }

  // Responsiveness
  @include mx.tablet {
    &:not(.#{iv.$class-prefix}is-desktop) {
      display: flex;
    }
  }

  @include mx.desktop {
    // Modifiers
    &.#{iv.$class-prefix}is-desktop {
      display: flex;
    }
  }

  &.#{iv.$class-prefix}is-variable {
    @for $i from 0 through 8 {
      &.#{iv.$class-prefix}is-#{$i} {
        @include cv.register-vars(
          (
            "column-gap": #{$i * 0.25rem},
          )
        );
      }

      @include mx.mobile {
        &.#{iv.$class-prefix}is-#{$i}-mobile {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.tablet {
        &.#{iv.$class-prefix}is-#{$i}-tablet {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.tablet-only {
        &.#{iv.$class-prefix}is-#{$i}-tablet-only {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.touch {
        &.#{iv.$class-prefix}is-#{$i}-touch {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.desktop {
        &.#{iv.$class-prefix}is-#{$i}-desktop {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.desktop-only {
        &.#{iv.$class-prefix}is-#{$i}-desktop-only {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.widescreen {
        &.#{iv.$class-prefix}is-#{$i}-widescreen {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.widescreen-only {
        &.#{iv.$class-prefix}is-#{$i}-widescreen-only {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }

      @include mx.fullhd {
        &.#{iv.$class-prefix}is-#{$i}-fullhd {
          @include cv.register-vars(
            (
              "column-gap": #{$i * 0.25rem},
            )
          );
        }
      }
    }
  }
}
