.text-unit-rem,
.text-unit-em,
.text-unit-px {
  font-size: var(--text-unit);
}

.text-unit-rem { --text-unit: 1rem; }
.text-unit-em { --text-unit: 1em; }
.text-unit-px { --text-unit: 15px; }

.text-200 { font-size: var(--text-xs, 0.6875rem); }
.text-300 { font-size: var(--text-sm, 0.75rem); }
.text-400 { font-size: var(--text-md, 1rem); }
.text-500 { font-size: var(--text-lg, 1.125rem); }
.text-600 { font-size: var(--text-xl, 1.375rem); }
.text-700 { font-size: var(--text-xxl, 1.75rem); }
.text-800 { font-size: var(--text-xxxl, 2rem); }
.text-900 { font-size: var(--text-xxxxl, 2.5rem); }

.font-light { font-weight: var(--fw-light); }
.font-normal { font-weight: var(--fw-normal); }
.font-medium { font-weight: var(--fw-medium); }
.font-semibold { font-weight: var(--fw-semi-bold); }
.font-bold,
.text-bold { font-weight: var(--fw-bold); }
.font-extrabold { font-weight: var(--fw-extra-bold); }
.font-black { font-weight: var(--fw-black); }

.font-primary { font-family: var(--font-primary); }
.font-italic { font-style: italic; }
.font-smooth {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.text-center { text-align: center; }
.text-left { text-align: left; }
.text-right { text-align: right; }
.text-justify { text-align: justify; }

.text-line-through { text-decoration: line-through; }
.text-underline { text-decoration: underline; }
.text-decoration-none { text-decoration: none; }

.text-uppercase { text-transform: uppercase; }
.text-capitalize { text-transform: capitalize; }

.letter-spacing-xs { letter-spacing: -0.1em; }
.letter-spacing-sm { letter-spacing: -0.05em; }
.letter-spacing-md { letter-spacing: 0.05em; }
.letter-spacing-lg { letter-spacing: 0.1em; }
.letter-spacing-xl { letter-spacing: 0.2em; }

.text-shadow-xs { text-shadow: 0 1px 1px rgb(0 0 0 / 0.15); }
.text-shadow-sm { text-shadow: 0 1px 2px rgb(0 0 0 / 0.25); }
.text-shadow-md { text-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 2px 4px rgb(0 0 0 / 0.2); }
.text-shadow-lg { text-shadow: 0 1px 4px rgb(0 0 0 / 0.1), 0 2px 8px rgb(0 0 0 / 0.15), 0 4px 16px rgb(0 0 0 / 0.2); }
.text-shadow-xl { text-shadow: 0 1px 4px rgb(0 0 0 / 0.1), 0 2px 8px rgb(0 0 0 / 0.15), 0 4px 16px rgb(0 0 0 / 0.2), 0 6px 24px rgb(0 0 0 / 0.25); }
.text-shadow-none { text-shadow: none; }

.line-height-xs {
  --heading-line-height: 1;
  --body-line-height: 1.1;
}
.line-height-sm {
  --heading-line-height: 1.1;
  --body-line-height: 1.2;
}
.line-height-md {
  --heading-line-height: 1.15;
  --body-line-height: 1.4;
}
.line-height-lg {
  --heading-line-height: 1.22;
  --body-line-height: 1.58;
}
.line-height-xl {
  --heading-line-height: 1.3;
  --body-line-height: 1.72;
}

.line-height-xs:not(.text-component) { line-height: 1.1; }
.line-height-sm:not(.text-component) { line-height: 1.2; }
.line-height-md:not(.text-component) { line-height: 1.4; }
.line-height-lg:not(.text-component) { line-height: 1.58; }
.line-height-xl:not(.text-component) { line-height: 1.72; }

.line-height-body { line-height: var(--body-line-height); }
.line-height-heading { line-height: var(--heading-line-height); }
.line-height-normal { line-height: normal !important; }
.line-height-1 { line-height: 1 !important; }

.truncate,
.text-truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.text-replace {
  overflow: hidden;
  color: transparent;
  text-indent: 100%;
  white-space: nowrap;
}

.break-word {
  overflow-wrap: break-word;
  hyphens: auto;
  min-width: 0;
}

.text-component {
  --line-height-multiplier: 1;
  --text-space-y-multiplier: 1;
}

.text-component > * {
  --text-unit: 1em;
  --space-unit: 1em;
}

.text-component blockquote {
  padding-left: 1em;
  border-left: 4px solid var(--color-contrast-lower);
  font-style: italic;
}

.text-component hr {
  background: var(--color-contrast-lower);
  height: 1px;
}

.text-component figcaption {
  font-size: var(--text-sm);
  color: var(--color-contrast-low);
}

.article {
  --body-line-height: 1.58;
  --text-space-y-multiplier: 1.2;
}

.text-space-y-xxs { --text-space-y-multiplier: 0.25 !important; }
.text-space-y-xs { --text-space-y-multiplier: 0.5 !important; }
.text-space-y-sm { --text-space-y-multiplier: 0.75 !important; }
.text-space-y-md { --text-space-y-multiplier: 1.25 !important; }
.text-space-y-lg { --text-space-y-multiplier: 1.5 !important; }
.text-space-y-xl { --text-space-y-multiplier: 1.75 !important; }
.text-space-y-xxl { --text-space-y-multiplier: 2 !important; }

.ws-nowrap,
.text-nowrap {
  white-space: nowrap;
}
