@mixin hu-pseudo-responsive($class-name, $pseudos, $modules, $mq-scale) {
  @if (index($modules, responsive)) {
    @each $pseudo in $pseudos {
      $pseudo-class-name: hu-escape-class-name($pseudo);

      @if (index($modules, base)) {
        .#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, visited)) {
        .#{hu-escape-class-name("@mq-#{$mq-scale}:visited")}#{$pseudo-class-name}--#{$class-name}:visited#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, focus)) {
        #{$hu-focus-parent} .#{hu-escape-class-name("@mq-#{$mq-scale}:focus")}#{$pseudo-class-name}--#{$class-name}#{$hu-focus-pseudo}#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, hover)) {
        .#{hu-escape-class-name("@mq-#{$mq-scale}:hover")}#{$pseudo-class-name}--#{$class-name}:hover#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, hocus)) {
        #{$hu-focus-parent} .#{hu-escape-class-name("@mq-#{$mq-scale}:hocus")}#{$pseudo-class-name}--#{$class-name}#{$hu-focus-pseudo}#{$pseudo},
        .#{hu-escape-class-name("@mq-#{$mq-scale}:hocus")}#{$pseudo-class-name}--#{$class-name}:hover#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, active)) {
        .#{hu-escape-class-name("@mq-#{$mq-scale}:active")}#{$pseudo-class-name}--#{$class-name}:active#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, state)) {
        @each $state in $hu-states {
          .#{$state}.#{hu-escape-class-name("@mq-#{$mq-scale}")}-#{$state}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
            @content;
          }
        }
      }

      @if (index($modules, group-visited)) {
        .group:visited .group#{hu-escape-class-name(":visited")}__#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, group-focus)) {
        #{$hu-focus-parent} .group#{$hu-focus-pseudo} .group#{hu-escape-class-name(":focus")}__#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, group-hover)) {
        .group:hover .group#{hu-escape-class-name(":hover")}__#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, group-hocus)) {
        #{$hu-focus-parent} .group#{$hu-focus-pseudo} .group#{hu-escape-class-name(":hocus")}__#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo},
        .group:hover .group#{hu-escape-class-name(":hocus")}__#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
          @content;
        }
      }

      @if (index($modules, group-state)) {
        @each $state in $hu-states {
          .group.#{$state} .group-#{$state}__#{hu-escape-class-name("@mq-#{$mq-scale}")}#{$pseudo-class-name}--#{$class-name}#{$pseudo} {
            @content;
          }
        }
      }
    }
  }
}
