@layer utilities {
  /* -------------------------------------------------------------------------
     Text Utilities
     ------------------------------------------------------------------------- */
  .txt-xs { font-size: var(--text-xs); }
  .txt-sm { font-size: var(--text-sm); }
  .txt-base { font-size: var(--text-base); }
  .txt-lg { font-size: var(--text-lg); }
  .txt-xl { font-size: var(--text-xl); }
  .txt-2xl { font-size: var(--text-2xl); }
  .txt-3xl { font-size: var(--text-3xl); }

  .txt-subtle { color: var(--color-ink-subtle); }
  .txt-muted { color: var(--color-ink-muted); }
  .txt-link { color: var(--color-link); }
  .txt-positive { color: var(--color-positive); }
  .txt-negative { color: var(--color-negative); }

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

  .txt-nowrap { white-space: nowrap; }
  .txt-uppercase {
    text-transform: uppercase;
    letter-spacing: var(--tracking-wide);
  }
  .txt-mono { font-family: var(--font-mono); }

  .txt-bold { font-weight: 600; }
  .txt-normal { font-weight: 400; }

  /* -------------------------------------------------------------------------
     Spacing Utilities
     ------------------------------------------------------------------------- */

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

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

  /* Margin */
  .margin-block { margin-block: var(--block-space); }
  .margin-block-half { margin-block: var(--block-space-half); }
  .margin-block-double { margin-block: var(--block-space-double); }

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

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

  /* -------------------------------------------------------------------------
     Flexbox Utilities
     ------------------------------------------------------------------------- */
  .flex { display: flex; }
  .flex-inline { display: inline-flex; }
  .flex-column { flex-direction: column; }
  .flex-row { flex-direction: row; }
  .flex-wrap { flex-wrap: wrap; }
  .flex-1 { flex: 1; }
  .flex-shrink-0 { flex-shrink: 0; }

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

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

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

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

  /* -------------------------------------------------------------------------
     Display & Visibility
     ------------------------------------------------------------------------- */
  .block { display: block; }
  .inline { display: inline; }
  .inline-block { display: inline-block; }
  .hidden { display: none; }

  .visually-hidden {
    position: absolute;
    inline-size: 1px;
    block-size: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }

  /* -------------------------------------------------------------------------
     Width & Height
     ------------------------------------------------------------------------- */
  .w-full { inline-size: 100%; }
  .w-auto { inline-size: auto; }
  .h-full { block-size: 100%; }
  .h-auto { block-size: auto; }
  .max-w-full { max-inline-size: 100%; }

  /* -------------------------------------------------------------------------
     Borders
     ------------------------------------------------------------------------- */
  .border {
    border: 1px solid var(--color-border);
  }
  .border-strong {
    border: 1px solid var(--color-border-strong);
  }
  .border-block-start {
    border-block-start: 1px solid var(--color-border);
  }
  .border-block-end {
    border-block-end: 1px solid var(--color-border);
  }
  .rounded {
    border-radius: var(--input-radius);
  }
  .rounded-lg {
    border-radius: var(--card-radius);
  }
  .rounded-full {
    border-radius: 99rem;
  }

  /* -------------------------------------------------------------------------
     Background
     ------------------------------------------------------------------------- */
  .fill-canvas { background-color: var(--color-canvas); }
  .fill-canvas-alt { background-color: var(--color-canvas-alt); }
  .fill-primary-light { background-color: var(--color-primary-light); }
  .fill-positive-light { background-color: var(--color-positive-light); }
  .fill-negative-light { background-color: var(--color-negative-light); }

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

  /* -------------------------------------------------------------------------
     Cursor
     ------------------------------------------------------------------------- */
  .cursor-pointer { cursor: pointer; }
  .cursor-not-allowed { cursor: not-allowed; }

  /* -------------------------------------------------------------------------
     Position
     ------------------------------------------------------------------------- */
  .relative { position: relative; }
  .absolute { position: absolute; }
  .sticky { position: sticky; }
  .fixed { position: fixed; }

  .inset-0 {
    inset: 0;
  }
}
