:root {
  --fh-space-1: 0.25rem;
  --fh-space-2: 0.5rem;
  --fh-space-3: 0.75rem;
  --fh-space-4: 1rem;
  --fh-space-6: 1.5rem;
  --fh-space-8: 2rem;
  --fh-space-12: 3rem;
  --fh-measure-sm: 40rem;
  --fh-measure-md: 56rem;
  --fh-measure-lg: 72rem;
  --fh-measure-xl: 88rem;
}

.fh-center {
  margin-inline: auto;
}

.fh-max-sm {
  max-width: var(--fh-measure-sm);
}

.fh-max-md {
  max-width: var(--fh-measure-md);
}

.fh-max-lg {
  max-width: var(--fh-measure-lg);
}

.fh-max-xl {
  max-width: var(--fh-measure-xl);
}

.fh-full {
  width: 100%;
}

.fh-p-2 {
  padding: var(--fh-space-2);
}

.fh-p-4 {
  padding: var(--fh-space-4);
}

.fh-p-6 {
  padding: var(--fh-space-6);
}

.fh-p-8 {
  padding: var(--fh-space-8);
}

.fh-px-4 {
  padding-inline: var(--fh-space-4);
}

.fh-px-6 {
  padding-inline: var(--fh-space-6);
}

.fh-px-8 {
  padding-inline: var(--fh-space-8);
}

.fh-py-4 {
  padding-block: var(--fh-space-4);
}

.fh-py-6 {
  padding-block: var(--fh-space-6);
}

.fh-py-8 {
  padding-block: var(--fh-space-8);
}

.fh-my-4 {
  margin-block: var(--fh-space-4);
}

.fh-my-8 {
  margin-block: var(--fh-space-8);
}

.fh-my-12 {
  margin-block: var(--fh-space-12);
}

.fh-mt-4 {
  margin-block-start: var(--fh-space-4);
}

.fh-mt-8 {
  margin-block-start: var(--fh-space-8);
}

.fh-mb-4 {
  margin-block-end: var(--fh-space-4);
}

.fh-mb-8 {
  margin-block-end: var(--fh-space-8);
}

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

.fh-gap-4 {
  gap: var(--fh-space-4);
}

.fh-gap-6 {
  gap: var(--fh-space-6);
}

.fh-gap-8 {
  gap: var(--fh-space-8);
}

.fh-stack > * + * {
  margin-block-start: var(--fh-stack-gap, var(--fh-space-4));
}

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

.fh-stack-lg {
  --fh-stack-gap: var(--fh-space-8);
}

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

.fh-cluster-between {
  justify-content: space-between;
}

.fh-grid {
  display: grid;
  gap: var(--fh-grid-gap, var(--fh-space-6));
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
}

.fh-grid-compact {
  --fh-grid-gap: var(--fh-space-3);
}

.fh-grid-roomy {
  --fh-grid-gap: var(--fh-space-8);
}

.fh-text-balance {
  text-wrap: balance;
}

.fh-muted {
  opacity: 0.78;
}

.fh-no-margin {
  margin: 0;
}
