// ==========================================================================
// Helper classes
// ==========================================================================

%ir,
.ir { // Image replacement
  background-color: transparent;
  border: 0;
  overflow: hidden;

  &::before {
    content: '';
    display: block;
    width: 0;
    height: 100%;
  }
}

%hidden,
.hidden { // Hide from both screenreaders and browsers: h5bp.com/u
  display: none !important;
  visibility: hidden;
}

%visuallyhidden,
.visuallyhidden { // Hide only visually, but have it available for screenreaders: h5bp.com/v
  border: 0;
  clip: rect(0 0 0 0);
  height: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
  width: 1px;

  &.focusable {

    &:active, // Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p
    &:focus {
      clip: auto;
      height: auto;
      margin: 0;
      overflow: visible;
      position: static;
      width: auto;
    }
  }
}

%invisible,
.invisible { // Hide visually and from screenreaders, but maintain layout
  visibility: hidden;
}

// For modern browsers
// 1. The space content is one way to avoid an Opera bug when the
//    `contenteditable` attribute is included anywhere else in the document.
//    Otherwise it causes space to appear at the top and bottom of elements
//    that receive the `clearfix` class.
// 2. The use of `table` rather than `block` is only necessary if using
//    `:before` to contain the top-margins of child elements.

%clearfix,
.clearfix {

  &::before,
  &::after {
    content: ' '; // 1
    display: table; // 2
  }

  &::after {
    clear: both;
  }
}
