/* Text */
.muted { color: var(--ink-3); }
.subtle { color: var(--ink-4); }
.strong { color: var(--ink); font-weight: 600; }
.text-brand { color: var(--brand-text); }
.text-ok { color: var(--ok); }
.text-warn { color: var(--warn); }
.text-bad { color: var(--bad); }
.small { font-size: var(--fs-xs); }
.xs { font-size: var(--fs-2xs); }
.tnum { font-variant-numeric: tabular-nums; }
.nowrap { white-space: nowrap; }
.clip { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.right { text-align: right; }
.text-center { text-align: center; }
.grad-text { background: var(--text-grad); -webkit-background-clip: text; background-clip: text; color: transparent; -webkit-text-fill-color: transparent; }

/* The small uppercase line above a title, as on the platform pages. */
.eyebrow { font-size: var(--fs-xs); font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--brand-text); }
.caps { font-size: var(--fs-2xs); font-weight: 600; letter-spacing: var(--tr-caps); text-transform: uppercase; color: var(--ink-4); }

/* Spacing */
.mt0 { margin-top: 0; }
.mt4 { margin-top: 4px; }
.mt8 { margin-top: 8px; }
.mt12 { margin-top: 12px; }
.mt16 { margin-top: 16px; }
.mt20 { margin-top: 20px; }
.mt24 { margin-top: 24px; }
.mb0 { margin-bottom: 0; }
.mb8 { margin-bottom: 8px; }
.mb12 { margin-bottom: 12px; }
.mb16 { margin-bottom: 16px; }
.mb24 { margin-bottom: 24px; }
.ml-6 { margin-left: 6px; }
.ml-auto { margin-left: auto; }
.pad { padding: 14px 18px; }

/* Flex */
.row-flex { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.d-inline { display: inline; }
.gap-4 { gap: 4px; }
.gap-6 { gap: 6px; }
.gap-8 { gap: 8px; }
.gap-12 { gap: 12px; }
.gap-16 { gap: 16px; }
.gap-24 { gap: 24px; }
.wrap { flex-wrap: wrap; }
.no-wrap { flex-wrap: nowrap; }
.items-start { align-items: flex-start; }
.justify-end { justify-content: flex-end; }
.justify-between { justify-content: space-between; }
.grow { flex: 1 1 0; min-width: 0; }
.min-0 { min-width: 0; }

/* Widths for inputs and short blocks */
.mw-s { max-width: 220px; }
.mw-m { max-width: 340px; }
.mw-l { max-width: 420px; }
.mw-xl { max-width: 620px; }
.w-full { width: 100%; }

/* Icons that sit inline with text */
.icon-s { width: 14px; height: 14px; flex: none; vertical-align: -2px; }
.icon-m { width: 16px; height: 16px; flex: none; vertical-align: -3px; }

/* 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 */
.dim { opacity: .6; }
.is-disabled { pointer-events: none; opacity: .55; }
.hr { height: 1px; border: 0; margin: 22px 0; background: var(--line); }
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; }

/* 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; }
