@layer utilities {
  /* Text */
  .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-medium { font-size: var(--text-medium); }
  .txt-large { font-size: var(--text-large); }
  .txt-subtle { color: var(--color-ink-muted); }
  .txt-negative { color: var(--color-negative); }
  .txt-positive { color: var(--color-positive); }
  .txt-start { text-align: start; }
  .txt-center { text-align: center; }
  .txt-end { text-align: end; }
  .txt-uppercase { text-transform: uppercase; }
  .txt-nowrap { white-space: nowrap; }
  .txt-tabular-nums { font-variant-numeric: tabular-nums; }
  .font-weight-normal { font-weight: 400; }
  .font-weight-medium { font-weight: 500; }
  .font-weight-semibold { font-weight: 600; }
  .font-weight-bold { font-weight: 700; }
  .font-weight-black { font-weight: 800; }

  /* Flexbox and Grid */
  .flex { display: flex; }
  .flex-column { display: flex; flex-direction: column; }
  .stack { display: flex; flex-direction: column; gap: var(--block-space); }
  .flex-wrap { flex-wrap: wrap; }
  .flex-item-grow { flex-grow: 1; }
  .flex-item-shrink { flex-shrink: 1; }
  .flex-item-no-shrink { flex-shrink: 0; }
  .justify-start { justify-content: flex-start; }
  .justify-center { justify-content: center; }
  .justify-end { justify-content: flex-end; }
  .justify-between { justify-content: space-between; }
  .align-start { align-items: flex-start; }
  .align-center { align-items: center; }
  .align-end { align-items: flex-end; }

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

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

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

  /* Overflow */
  .overflow-x { overflow-x: auto; }
  .overflow-y { overflow-y: auto; }
  .overflow-clip { overflow: clip; }

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

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

  /* Mouse pointer */
  .pointer { cursor: pointer; }
  .pointer-none { pointer-events: none; }

  /* Padding */
  .pad { padding: var(--block-space) var(--inline-space); }
  .pad-block { padding-block: var(--block-space); }
  .pad-block-half { padding-block: var(--block-space-half); }
  .pad-block-double { padding-block: var(--block-space-double); }
  .pad-inline { padding-inline: 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-block-start { margin-block-start: var(--block-space); }
  .margin-block-start-half { margin-block-start: var(--block-space-half); }
  .margin-block-start-double { margin-block-start: var(--block-space-double); }
  .margin-block-end { margin-block-end: var(--block-space); }
  .margin-block-end-half { margin-block-end: var(--block-space-half); }
  .margin-block-end-double { margin-block-end: var(--block-space-double); }
  .margin-inline-auto { margin-inline: auto; }
  .margin-none { margin: 0; }

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

  .position-sticky {
    inset: var(--inset, 0 auto auto auto);
    position: sticky;
    z-index: var(--z, 1);
  }

  /* Fills */
  .fill-canvas { background-color: var(--color-canvas); }
  .fill-surface { background-color: var(--color-surface); }
  .fill-surface-subtle { background-color: var(--color-surface-subtle); }
  .fill-highlight { background-color: var(--color-highlight); }

  /* Borders */
  .border { border: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-border)); }
  .border-block-start { border-block-start: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-border)); }
  .border-block-end { border-block-end: var(--border-size, 1px) var(--border-style, solid) var(--border-color, var(--color-border)); }
  .borderless { border: 0; }

  /* Border radius */
  .border-radius { border-radius: var(--border-radius); }
  .border-radius-large { border-radius: var(--border-radius-large); }
  .border-radius-circle { border-radius: 50%; }

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

  /* Lists */
  :where(.list-style-none) { list-style: none; margin: 0 auto; padding: 0; }

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

  /* Visibility */
  .translucent { opacity: var(--opacity, 0.66); }
  .hide-on-phone { @media (max-width: 639px) { display: none; } }
  .show-on-phone { @media (min-width: 640px) { display: none; } }
  .hide-on-touch { @media (any-hover: none) { display: none; } }
  .show-on-touch { @media (any-hover: hover) { display: none; } }
  .hide-in-pwa { @media (display-mode: standalone) { display: none; } }
  .hide-in-browser { @media (display-mode: browser) { display: none; } }
  .hide-on-print { @media print { display: none; } }

  /* `hidden` must beat any display a component sets */
  [hidden] { display: none !important; }
}
