/* Text */
.muted { color: var(--ink-3); }

.strong { color: var(--ink); font-weight: 600; }

.small { font-size: var(--fs-xs); }
.xs { font-size: var(--fs-2xs); }

.nowrap { white-space: nowrap; }

.right { text-align: right; }

/* Spacing */

.mt8 { margin-top: 8px; }

.mt16 { margin-top: 16px; }

.mb0 { margin-bottom: 0; }
.mb8 { margin-bottom: 8px; }

.mb16 { margin-bottom: 16px; }

.ml-auto { margin-left: auto; }

/* Flex */
.row-flex { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

.gap-6 { gap: 6px; }
.gap-8 { gap: 8px; }

.grow { flex: 1 1 0; min-width: 0; }

/* Icons that sit inline with text */
.icon-s { width: 14px; height: 14px; flex: none; vertical-align: -2px; }

/* Theme specific images, switched by the tokens --only-light and --only-dark. */
.only-light { display: var(--only-light); }
.only-dark { display: var(--only-dark); }

/* State */

.is-disabled { pointer-events: none; opacity: .55; }
fieldset.bare { border: 0; margin: 0; padding: 0; min-width: 0; }

/* Hidden by scripts: the table filter and instant save keep their own flag so they never fight over [hidden]. */
.tf-hidden, .as-hidden { display: none !important; }

/* Set by collapse.js while a panel animates open or shut. */
.collapsing { overflow: hidden; }

/* Read out by screen readers, never shown: a live status line, or a label a design leaves out. */
.sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* A field only bots fill in: kept out of sight and out of the tab order. */
.bot-trap { position: absolute; left: -9999px; top: 0; width: 1px; height: 1px; overflow: hidden; }
