.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

.text-muted {
  color: var(--color-text-muted);
}

.mt-0 {
  margin-top: 0;
}

.stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.stack--sm {
  gap: var(--space-2);
}

/* Consistent gap between a section's heading/intro copy and the grid,
   card row or timeline that follows it — an intentional block rhythm
   instead of relying on a paragraph's incidental bottom margin. */
.mb-block {
  margin-bottom: var(--space-block-gap);
}

.mt-block {
  margin-top: var(--space-block-gap);
}

.cluster {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
}
