@mixin hu-generic($class-name, $modules) {
  $modules: hu-format-modules($modules);

  @each $module in $modules {
    @if ($module == base) {
      .#{$class-name} {
        @content;
      }
    }

    @else if ($module == visited) {
      .#{hu-escape-class-name("#{$hu-pseudo-prefix}:visited")}--#{$class-name}:visited {
        @content;
      }
    }

    @else if ($module == focus) {
      #{$hu-focus-parent} .#{hu-escape-class-name("#{$hu-pseudo-prefix}:focus")}--#{$class-name}#{$hu-focus-pseudo} {
        @content;
      }
    }

    @else if ($module == hover) {
      .#{hu-escape-class-name("#{$hu-pseudo-prefix}:hover")}--#{$class-name}:hover {
        @content;
      }
    }

    @else if ($module == hocus) {
      #{$hu-focus-parent} .#{hu-escape-class-name("#{$hu-pseudo-prefix}:hocus")}--#{$class-name}#{$hu-focus-pseudo},
      .#{hu-escape-class-name("#{$hu-pseudo-prefix}:hocus")}--#{$class-name}:hover {
        @content;
      }
    }

    @else if ($module == active) {
      .#{hu-escape-class-name("#{$hu-pseudo-prefix}:active")}--#{$class-name}:active {
        @content;
      }
    }

    @else if ($module == state) {
      @each $state in $hu-states {
        .#{$state}.#{$state}--#{$class-name} {
          @content;
        }
      }
    }

    @else if ($module == group-visited) {
      .group:visited .group#{hu-escape-class-name(":visited")}__#{$class-name} {
        @content;
      }
    }

    @else if ($module == group-focus) {
      #{$hu-focus-parent} .group#{$hu-focus-pseudo} .group#{hu-escape-class-name(":focus")}__#{$class-name} {
        @content;
      }
    }

    @else if ($module == group-hover) {
      .group:hover .group#{hu-escape-class-name(":hover")}__#{$class-name} {
        @content;
      }
    }

    @else if ($module == group-hocus) {
      #{$hu-focus-parent} .group#{$hu-focus-pseudo} .group#{hu-escape-class-name(":hocus")}__#{$class-name},
      .group:hover .group#{hu-escape-class-name(":hocus")}__#{$class-name} {
        @content;
      }
    }

    @else if ($module == group-state) {
      @each $state in $hu-states {
        .group.#{$state} .group-#{$state}__#{$class-name} {
          @content;
        }
      }
    }

    @else if ($module == reduced-motion) {
      @media (prefers-reduced-motion: reduce) {
        .#{hu-escape-class-name("@reduced-motion")}--#{$class-name} {
          @include hu-bump-specificity {
            @content;
          }
        }
      }
    }

    @else if ($module == print) {
      @media print {
        .#{hu-escape-class-name("@print")}--#{$class-name} {
          @include hu-bump-specificity {
            @content;
          }
        }
      }
    }
  }
}
