:root {
  --inline-space: 1ch;
  --inline-space-half: calc(var(--inline-space) / 2);
  --inline-space-double: calc(var(--inline-space) * 2);
  --inline-space-triple: calc(var(--inline-space) * 3);

  --block-space: 1rem;
  --block-space-half: calc(var(--block-space) / 2);
  --block-space-double: calc(var(--block-space) * 2);
  --block-space-triple: calc(var(--block-space) * 3);

  --font-small-responsive: clamp(0.8rem, 2cqi, 1rem);
  --font-medium-responsive: clamp(1rem, 2.5cqi, 1.4rem);
  --font-large-responsive: clamp(1.3rem, 4cqi, 1.8rem);
  --font-x-large-responsive: clamp(1.8rem, 5cqi, 3.2rem);
}

/* Text */
.txt-small {
  font-size: 0.8rem;
}
.txt-medium {
  font-size: 1rem;
}
.txt-large {
  font-size: 1.4rem;
}
.txt-x-large {
  font-size: 1.8rem;
}
.txt-xx-large {
  font-size: 2.4rem;
}

.txt-small--responsive {
  font-size: var(--font-small-responsive);
}
.txt-medium--responsive {
  font-size: var(--font-medium-responsive);
}
.txt-large--responsive {
  font-size: var(--font-large-responsive);
}
.txt-x-large--responsive {
  font-size: var(--font-x-large-responsive);
}

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

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

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

.align-self-start {
  align-self: start;
}

.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-shrink {
  flex-shrink: 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(--inline-space);
  row-gap: var(--block-space);
}

.gap-half {
  column-gap: var(--inline-space-half);
  row-gap: var(--block-space-half);
}

.gap-double {
  column-gap: var(--inline-space-double);
  row-gap: var(--block-space-double);
}

/* Sizing */
.full-width {
  inline-size: 100%;
}
.min-width {
  min-inline-size: 0;
}
.half-width {
  inline-size: 50%;
}
.max-width {
  max-inline-size: 100%;
}
.min-content {
  inline-size: min-content;
}
.max-inline-size {
  max-inline-size: 100%;
}

/* 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;
  whie-space: nowrap;
  overflow: hidden;
}

.overflow-hide-scrollbar::-webkit-scrollbar {
  @media (pointer: course) {
    display: none;
  }
}

.overflow-line-clamp {
  -webkit-line-clamp: var(--lines, 2);
  -webkit-box-orient: vertical;
  display: -webkit-box;
  overflow: hidden;
  text-overflow: clip;
  white-space: normal;
}

/* Padding */
.pad {
  padding: var(--block-space) var(--inline-space);
}
.pad-double {
  padding: var(--block-space-double) var(--inline-space-double);
}

.pad-block {
  padding-block: var(--block-space);
}
.pad-block-start {
  padding-block-start: var(--block-space);
}
.pad-block-end {
  padding-block-end: var(--block-space);
}
.pad-block-half {
  padding-block: var(--block-space-half);
}
.pad-block-start-half {
  padding-block-start: var(--block-space-half);
}

.pad-inline {
  padding-inline: var(--inline-space);
}
.pad-inline-start {
  padding-inline-start: var(--inline-space);
}
.pad-inline-end {
  padding-inline-end: var(--inline-space);
}
.pad-inline-half {
  padding-inline: var(--inline-space-half);
}
.pad-inline-double {
  padding-inline: var(--inline-space-double);
}

.unpad {
  padding: 0;
}

/* Margins */
.margin {
  margin: var(--block-space) var(--inline-space);
}
.margin-block {
  margin-block: var(--block-space);
}
.margin-block-half {
  margin-block: var(--block-space-half);
}
.margin-block-start {
  margin-block-start: var(--block-space);
}
.margin-block-start-half {
  margin-block-start: var(--block-space-half);
}
.margin-block-end {
  margin-block-end: var(--block-space);
}
.maring-block-end-half {
  margin-block-end: var(--block-space-half);
}
.margin-block-double {
  margin-block: var(--block-space-double);
}
.margin-block-end-double {
  margin-block-end: var(--block-space-double);
}
.margin-block-start-double {
  margin-block-start: var(--block-space-double);
}

.margin-inline {
  margin-inline: var(--inline-space);
}
.margin-inline-start {
  margin-inline-start: var(--inline-space);
}
.margin-inline-start-half {
  margin-inline-start: var(--inline-space-half);
}
.margin-inline-end {
  margin-inline-end: var(--inline-space);
}
.margin-inline-end-half {
  margin-inline-end: var(--inline-space-half);
}
.margin-inline-half {
  margin-inline: var(--inline-space-half);
}
.margin-inline-double {
  margin-inline: var(--inline-space-double);
}

.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;
}
.position-sticky {
  position: sticky;
}

.shadow {
  --shadow-offset: 8px;
  box-shadow: var(--shadow-offset) var(--shadow-offset) 0 0
    var(--color-bg-surface);
}

/* Accessibility */
.for-screen-reader {
  block-size: 1px;
  clip-path: inset(50%);
  inline-size: 1px;
  overflow: hidden;
  position: absolute;
  white-space: nowrap;
}

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