@layer utilities {
  /* Flexbox */
  .flex { display: flex; }
  .flex-inline { display: inline-flex; }
  .flex-column { flex-direction: column; }
  .flex-wrap { flex-wrap: wrap; }
  .flex-1 { flex: 1; }
  .flex-item-grow { flex-grow: 1; }
  .flex-item-shrink { flex-shrink: 1; }
  .flex-item-no-shrink { flex-shrink: 0; }

  /* Gap */
  .gap { gap: var(--block-space) var(--inline-space); }
  .gap-half { gap: var(--block-space-half) var(--inline-space-half); }
  .gap-quarter { gap: 0.25rem 0.25ch; }
  .gap-none { gap: 0; }

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

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

  /* 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-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); }

  .unpad { padding: 0; }
  .unpad-block-end { padding-block-end: 0; }
  .unpad-inline { padding-inline: 0; }

  /* Margin */
  .margin { margin: var(--block-space) var(--inline-space); }
  .margin-block { margin-block: var(--block-space); }
  .margin-block-start { margin-block-start: var(--block-space); }
  .margin-block-end { margin-block-end: var(--block-space); }
  .margin-block-half { margin-block: var(--block-space-half); }
  .margin-block-double { margin-block: var(--block-space-double); }
  .margin-block-none { margin-block: 0; }
  .margin-inline { margin-inline: var(--inline-space); }
  .margin-inline-start { margin-inline-start: var(--inline-space); }
  .margin-inline-end { margin-inline-end: var(--inline-space); }
  .margin-inline-none { margin-inline: 0; }
  .margin-none { margin: 0; }
  .center { margin-inline: auto; }

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

  /* Text colors */
  .txt-ink { color: var(--color-ink); }
  .txt-subtle { color: var(--color-ink-light); }
  .txt-negative { color: var(--color-negative); }
  .txt-positive { color: var(--color-positive); }
  .txt-highlight { color: var(--color-highlight); }
  .txt-primary { color: var(--color-primary); }
  .txt-alert { color: var(--color-highlight); }
  .txt-tight-lines { line-height: 1.1; }

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

  /* Overflow */
  .overflow-x { overflow-x: auto; }
  .overflow-y { overflow-y: auto; }
  .overflow-ellipsis {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* Font weight */
  .font-weight-bold { font-weight: 700; }
  .font-weight-black { font-weight: 900; }
  .font-weight-semibold { font-weight: 600; }
  .font-weight-normal { font-weight: 400; }

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

  .display-contents { display: contents; }

  /* Borders */
  .border { border: 1px solid var(--border-color); }
  .border-block { border-block: 1px solid var(--border-color); }
  .border-top { border-block-start: 1px solid var(--border-color); }
  .border-bottom { border-block-end: 1px solid var(--border-color); }
  .borderless { border: none; }
  .border-radius { border-radius: var(--border-radius); }

  /* Shadow */
  .shadow { box-shadow: var(--shadow); }
  .shadow-sm { box-shadow: var(--shadow-sm); }
  .shadow-lg { box-shadow: var(--shadow-lg); }

  /* Text alignment */
  .text-center { text-align: center; }
  .text-end { text-align: end; }
}
