//
// Typography
// --------------------------------------------------


// Headings
// -------------------------

.#{$class-prefix}-html-h1, .#{$class-prefix}-html-h2, .#{$class-prefix}-html-h3, .#{$class-prefix}-html-h4, .#{$class-prefix}-html-h5, .#{$class-prefix}-html-h6,
.#{$class-prefix}-h1, .#{$class-prefix}-h2, .#{$class-prefix}-h3, .#{$class-prefix}-h4, .#{$class-prefix}-h5, .#{$class-prefix}-h6 {
  font-family: $headings-font-family;
  font-weight: $headings-font-weight;
  line-height: $headings-line-height;
  color: $headings-color;

  .#{$class-prefix}-html-small,
  .#{$class-prefix}-small {
    font-weight: normal;
    line-height: 1;
    color: $headings-small-color;
  }
}

.#{$class-prefix}-html-h1, .#{$class-prefix}-h1,
.#{$class-prefix}-html-h2, .#{$class-prefix}-h2,
.#{$class-prefix}-html-h3, .#{$class-prefix}-h3 {
  margin-top: $line-height-computed;
  margin-bottom: ($line-height-computed / 2);

  .#{$class-prefix}-html-small,
  .#{$class-prefix}-small {
    font-size: 65%;
  }
}
.#{$class-prefix}-html-h4, .#{$class-prefix}-h4,
.#{$class-prefix}-html-h5, .#{$class-prefix}-h5,
.#{$class-prefix}-html-h6, .#{$class-prefix}-h6 {
  margin-top: ($line-height-computed / 2);
  margin-bottom: ($line-height-computed / 2);

  .#{$class-prefix}-html-small,
  .#{$class-prefix}-small {
    font-size: 75%;
  }
}

.#{$class-prefix}-html-h1, .#{$class-prefix}-h1 { font-size: $font-size-h1; }
.#{$class-prefix}-html-h2, .#{$class-prefix}-h2 { font-size: $font-size-h2; }
.#{$class-prefix}-html-h3, .#{$class-prefix}-h3 { font-size: $font-size-h3; }
.#{$class-prefix}-html-h4, .#{$class-prefix}-h4 { font-size: $font-size-h4; }
.#{$class-prefix}-html-h5, .#{$class-prefix}-h5 { font-size: $font-size-h5; }
.#{$class-prefix}-html-h6, .#{$class-prefix}-h6 { font-size: $font-size-h6; }


// Body text
// -------------------------

.#{$class-prefix}-html-p {
  margin: 0 0 ($line-height-computed / 2);
}

.#{$class-prefix}-lead {
  margin-bottom: $line-height-computed;
  font-size: floor(($font-size-base * 1.15));
  font-weight: 300;
  line-height: 1.4;

  @media (min-width: $screen-sm-min) {
    font-size: ($font-size-base * 1.5);
  }
}


// Emphasis & misc
// -------------------------

// Ex: (12px small font / 14px base font) * 100% = about 85%
.#{$class-prefix}-html-small,
.#{$class-prefix}-small {
  font-size: floor((100% * $font-size-small / $font-size-base));
}

.#{$class-prefix}-html-mark,
.#{$class-prefix}-mark {
  background-color: $state-warning-bg;
  padding: .2em;
}

// Alignment
.#{$class-prefix}-text-left           { text-align: left; }
.#{$class-prefix}-text-right          { text-align: right; }
.#{$class-prefix}-text-center         { text-align: center; }
.#{$class-prefix}-text-justify        { text-align: justify; }
.#{$class-prefix}-text-nowrap         { white-space: nowrap; }

// Transformation
.#{$class-prefix}-text-lowercase      { text-transform: lowercase; }
.#{$class-prefix}-text-uppercase      { text-transform: uppercase; }
.#{$class-prefix}-text-capitalize     { text-transform: capitalize; }

// Contextual colors
.#{$class-prefix}-text-muted {
  color: $text-muted;
}

@include text-emphasis-variant('.text-primary', $brand-primary);

@include text-emphasis-variant('.text-success', $state-success-text);

@include text-emphasis-variant('.text-info', $state-info-text);

@include text-emphasis-variant('.text-warning', $state-warning-text);

@include text-emphasis-variant('.text-danger', $state-danger-text);

// Contextual backgrounds
// For now we'll leave these alongside the text classes until v4 when we can
// safely shift things around (per SemVer rules).
.#{$class-prefix}-bg-primary {
  // Given the contrast here, this is the only class to have its color inverted
  // automatically.
  color: #fff;
}
@include bg-variant('.bg-primary', $brand-primary);

@include bg-variant('.bg-success', $state-success-bg);

@include bg-variant('.bg-info', $state-info-bg);

@include bg-variant('.bg-warning', $state-warning-bg);

@include bg-variant('.bg-danger', $state-danger-bg);


// Page header
// -------------------------

.#{$class-prefix}-page-header {
  padding-bottom: (($line-height-computed / 2) - 1);
  margin: ($line-height-computed * 2) 0 $line-height-computed;
  border-bottom: 1px solid $page-header-border-color;
}


// Lists
// -------------------------

// Unordered and Ordered lists
.#{$class-prefix}-html-ul,
.#{$class-prefix}-html-ol {
  margin-top: 0;
  margin-bottom: ($line-height-computed / 2);
  .#{$class-prefix}-html-ul,
  .#{$class-prefix}-html-ol {
    margin-bottom: 0;
  }
}

// List options

// [converter] extracted from `.list-unstyled` for libsass compatibility
@mixin list-unstyled {
  padding-left: 0;
  list-style: none;
}
// [converter] extracted as `@mixin list-unstyled` for libsass compatibility
.#{$class-prefix}-list-unstyled {
  @include list-unstyled;
}


// Inline turns list items into inline-block
.#{$class-prefix}-list-inline {
  @include list-unstyled;
  margin-left: -5px;

  > .#{$class-prefix}-html-li {
    display: inline-block;
    padding-left: 5px;
    padding-right: 5px;
  }
}

// Description Lists
.#{$class-prefix}-html-dl {
  margin-top: 0; // Remove browser default
  margin-bottom: $line-height-computed;
}
.#{$class-prefix}-html-dt,
.#{$class-prefix}-html-dd {
  line-height: $line-height-base;
}
.#{$class-prefix}-html-dt {
  font-weight: bold;
}
.#{$class-prefix}-html-dd {
  margin-left: 0; // Undo browser default
}

// Horizontal description lists
//
// Defaults to being stacked without any of the below styles applied, until the
// grid breakpoint is reached (default of ~768px).

.#{$class-prefix}-dl-horizontal {
  .#{$class-prefix}-html-dd {
    @include clearfix; // Clear the floated `dt` if an empty `dd` is present
  }

  @media (min-width: $dl-horizontal-breakpoint) {
    .#{$class-prefix}-html-dt {
      float: left;
      width: ($dl-horizontal-offset - 20);
      clear: left;
      text-align: right;
      @include text-overflow;
    }
    .#{$class-prefix}-html-dd {
      margin-left: $dl-horizontal-offset;
    }
  }
}


// Misc
// -------------------------

// Abbreviations and acronyms
.#{$class-prefix}-html-abbr[title],
// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
.#{$class-prefix}-html-abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted $abbr-border-color;
}
.#{$class-prefix}-initialism {
  font-size: 90%;
  @extend .#{$class-prefix}-text-uppercase;
}

// Blockquotes
.#{$class-prefix}-html-blockquote {
  padding: ($line-height-computed / 2) $line-height-computed;
  margin: 0 0 $line-height-computed;
  font-size: $blockquote-font-size;
  border-left: 5px solid $blockquote-border-color;

  .#{$class-prefix}-html-p,
  .#{$class-prefix}-html-ul,
  .#{$class-prefix}-html-ol {
    &:last-child {
      margin-bottom: 0;
    }
  }

  // Note: Deprecated small and .small as of v3.1.0
  // Context: https://github.com/twbs/bootstrap/issues/11660
  .#{$class-prefix}-html-footer,
  .#{$class-prefix}-html-small,
  .#{$class-prefix}-small {
    display: block;
    font-size: 80%; // back to default font-size
    line-height: $line-height-base;
    color: $blockquote-small-color;

    &:before {
      content: '\2014 \00A0'; // em dash, nbsp
    }
  }
}

// Opposite alignment of blockquote
//
// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.
.#{$class-prefix}-blockquote-reverse,
.#{$class-prefix}-html-blockquote.#{$class-prefix}-pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid $blockquote-border-color;
  border-left: 0;
  text-align: right;

  // Account for citation
  .#{$class-prefix}-html-footer,
  .#{$class-prefix}-html-small,
  .#{$class-prefix}-small {
    &:before { content: ''; }
    &:after {
      content: '\00A0 \2014'; // nbsp, em dash
    }
  }
}

// Addresses
.#{$class-prefix}-html-address {
  margin-bottom: $line-height-computed;
  font-style: normal;
  line-height: $line-height-base;
}
