@mixin hu-pseudo($class-name, $pseudos, $modules) {
  @each $module in hu-format-modules($modules) {
    @each $pseudo in $pseudos {
      $pseudo-class-name: hu-escape-class-name($pseudo);

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

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

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

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

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

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

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

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

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

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

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

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

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

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