/* Text */
.txt-small { font-size: var(--font-size-small); }
.txt-medium { font-size: var(--font-size-normal); }
.txt-large { font-size: var(--font-size-large); }
.txt-x-large { font-size: var(--font-size-5); }
.txt-xx-large { font-size: var(--font-size-6); }

.txt-align-center { text-align: center; }
.txt-align-start { text-align: start; }
.txt-align-end { text-align: end; }

.txt-primary { color: var(--text-1); }
.txt-secondary { color: var(--text-2); }
.txt-undecorated { text-decoration: none; }
.txt-tight-lines { line-height: 1.2; }
.txt-nowrap { white-space: nowrap; }

.txt-weight-primary { font-weight: var(--font-weight-primary); }
.txt-weight-secondary { font-weight: var(--font-weight-secondary); }
.txt-weight-tertiary { font-weight: var(--font-weight-tertiary); }

/* Flexbox and Grid */
.justify-end { justify-content: flex-end; }
.justify-start { justify-content: flex-start; }
.justify-center { justify-content: center; }
.justify-space-between { justify-content: space-between; }

.align-center { align-items: center; }
.align-start { align-items: flex-start; }
.align-end { align-items: flex-end; }

.contain { contain: inline-size; }

.flex { display: flex; }
.flex-inline { display: inline-flex; }
.flex-column { flex-direction: column; }
.flex-wrap { flex-wrap: wrap; }

.flex-item-grow { flex-grow: 1; }
.flex-item-no-shrink { flex-shrink: 0; }
.flex-item-justify-start { margin-inline-end: auto; }
.flex-item-justify-end { margin-inline-start: auto; }

.gap {
  column-gap: var(--size-3);
  row-gap: var(--size-4);
}

/* Sizing */
.full-width { inline-size: 100%; }
.min-width { min-width: 0; }
.max-width { max-width: 100%; }
.min-content { width: min-content; }
.max-inline-size { max-inline-size: 100%; }
.constrain-height { max-block-size: var(--max-height, 50vh); }

/* Overflow */
.overflow-x { overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; }
.overflow-y { overflow-y: auto; scroll-snap-type: y mandatory; scroll-behavior: smooth; }
.overflow-clip { text-overflow: clip; white-space: nowrap; overflow: hidden; }
.overflow-ellipsis { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }

.overflow-hide-scrollbar::-webkit-scrollbar {
  display: none;
}

/* Padding */
.pad { padding: var(--size-5) var(--size-4); }
.pad-block { padding-block: var(--size-5); }
.pad-block-start { padding-block-start: var(--size-5); }
.pad-block-end { padding-block-end: var(--size-5); }
.pad-block-half { padding-block: var(--size-3); }
.pad-block-start-half { padding-block-start: var(--size-3); }

.pad-inline { padding-inline: var(--size-4); }
.pad-inline-start { padding-inline-start: var(--size-4); }
.pad-inline-end { padding-inline-end: var(--size-4); }
.pad-inline-half { padding-inline: var(--size-2); }
.pad-inline-double { padding-inline: var(--size-6); }

.unpad { padding: 0; }

/* Margins */
.margin { margin: var(--size-5) var(--size-4); }
.margin-block { margin-block: var(--size-5); }
.margin-block-half { margin-block: var(--size-3); }
.margin-block-start { margin-block-start: var(--size-5); }
.margin-block-start-half { margin-block-start: var(--size-3); }
.margin-block-end { margin-block-end: var(--size-5); }
.margin-block-end-half { margin-block-end: var(--size-3); }
.margin-block-double { margin-block: var(--size-7); }

.margin-inline { margin-inline: var(--size-4); }
.margin-inline-start { margin-inline-start: var(--size-4); }
.margin-inline-start-half { margin-inline-start: var(--size-2); }
.margin-inline-end { margin-inline-end: var(--size-4); }
.margin-inline-half { margin-inline: var(--size-2); }

.margin-none { margin: 0; }
.margin-none-block { margin-block: 0; }
.margin-none-block-start { margin-block-start: 0; }
.margin-none-block-end { margin-block-end: 0; }

.margin-none-inline { margin-inline: 0; }
.margin-none-inline-start { margin-inline-start: 0; }
.margin-none-inline-end { margin-inline-end: 0; }

.center { margin-inline: auto; }
.center-block { margin-block: auto; }

/* Position */
.position-relative { position: relative; }

/* Fills */
.fill { background-color: var(--gray-0); }
.fill-white { background-color: var(--gray-0); }
.fill-shade { background-color: var(--gray-2); }
.fill-transparent { background-color: transparent; }

.translucent { opacity: var(--opacity-50); }

/* Borders */
.border { border: var(--border-size-1) solid var(--gray-3); }
.border-top { border-top: var(--border-size-1) solid var(--gray-3); }
.borderless { border: 0; }

/* Border radius */
.border-radius { border-radius: var(--radius-3); }

/* Shadows */
.shadow { box-shadow: var(--shadow-3); }

/* Accessibility */
.for-screen-reader {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Visibility */
[hidden] { display: none; }
[contents] { display: contents; }

/* PWA */
.hide-in-pwa {
  @media (display-mode: standalone) {
    display: none;
  }
}

.hide-in-browser {
  @media (display-mode: browser) {
    display: none;
  }
}
