/* Text */
.txt--nowrap { white-space: nowrap; }
.txt--tight-lines { line-height: 1.2; }
.txt--normal { font-weight: 400; font-style: normal; }
.txt--underline { text-decoration: underline; }
.txt--no-decoration { text-decoration: none; }
.txt--primary { color: var(--color-text); }
.txt--uppercase { text-transform: uppercase; }
.txt--plain { color: var(--color-text); }
.txt--reversed { color: var(--color-text--reversed); }

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

.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; }

/* Layout (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--end { align-items: end; }
.align-self--center { align-self: center; }
.align-self--end { align-self: end; }

.contain { contain: inline-size; }

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

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

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

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

.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; }

/* Display */
[hidden] { display: none !important; }
[contents] { display: contents !important; }

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

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

  --block-space: 1rem;
  --block-space--half: calc(var(--block-space) / 2);
}

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

.pad { padding: var(--block-space) var(--inline-space); }

.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-half--block { padding-block: var(--block-space--half); }
.pad-half--block-start { 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-half--inline { padding-inline: var(--inline-space--half); }
.pad-double--inline { padding-inline: var(--inline-space--double); }

.unpad { padding: 0; }

.push { margin: var(--block-space) var(--inline-space); }

.push--block { margin-block: var(--block-space); }
.push--block-start { margin-block-start: var(--block-space); }
.push--block-end { margin-block-end: var(--block-space); }

.push-half--block { margin-block: var(--block-space--half); }

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

.push-half--inline { margin-inline: var(--inline-space--half); }

.flush { margin: 0; }

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

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

/* Fills */
.fill { background-color: var(--color-bg); }
.fill--white { background-color: var(--color-text--reversed); }
.fill--bg { background-color: var(--color-bg); }
.fill--shade { background-color: var(--color-border); }
.fill--primary { background-color: var(--color-text); }
.fill--transparent { background-color: transparent; }

.translucent { opacity: var(--opacity, 0.5); }

/* Border */
.borderless { border: 0; }

/* Border radius */
.border-radius { border-radius: var(--border-radius, 1em); }

/* Separators */
.separator {
  border: none;
  border-block-start: 1px var(--border-style, dashed) var(--color-border--heavy);
  flex-grow: 1;
}

.separator--vertical {
  border: 0;
  border-inline-start: 1px solid var(--color-border--heavy);
  width: 0;
  margin: 0;
}

.separator--dashed {
  border: 1px dashed var(--color-border--heavy);
  flex-grow: 1;
  min-inline-size: 2ch;
}

/* Shadows */
.shadowed {
  box-shadow:
    0 0 0 1px color(display-p3 var(--rbg-always-black) / 0.02),
    0 .2em 1.6em -0.8em color(display-p3 var(--rbg-always-black) / 0.2),
    0 .4em 2.4em -1em color(display-p3 var(--rbg-always-black) / 0.3),
    0 .4em .8em -1.2em color(display-p3 var(--rbg-always-black) / 0.4),
    0 .8em 1.2em -1.6em color(display-p3 var(--rbg-always-black) / 0.5),
    0 1.2em 1.6em -2em color(display-p3 var(--rbg-always-black) / 0.6);
}

/* Animate */
.shake { animation: shake 400ms both; }

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

/* Panels */
.panel {
  padding: 1em;
  margin: calc(var(--navbar-height) - var(--block-space)) auto auto;
  max-inline-size: 100vw;
  inline-size: 50ch;

  @media (min-width: 100ch) {
    box-shadow:
      0 0 0 1px color(display-p3 var(--rbg-always-black) / 0.02),
      0 .2em 1.6em -0.8em color(display-p3 var(--rbg-always-black) / 0.2),
      0 .4em 2.4em -1em color(display-p3 var(--rbg-always-black) / 0.3),
      0 .4em .8em -1.2em color(display-p3 var(--rbg-always-black) / 0.4),
      0 .8em 1.2em -1.6em color(display-p3 var(--rbg-always-black) / 0.5),
      0 1.2em 1.6em -2em color(display-p3 var(--rbg-always-black) / 0.6);
    border-radius: 0.8em;
    background-color: var(--color-bg);
    padding: 2em;
    border: 1px solid var(--color-border);
  }
}
