/* Badges (icon + text + color, never color alone), chips and tags (ui.md §2.4). */

.sv-badge {
  --_fg: var(--sv-result-pending-fg);
  --_bg: var(--sv-result-pending-bg);
  --_border: var(--sv-result-pending-border);
  display: inline-flex;
  align-items: center;
  gap: 0.3em;
  max-width: 100%;
  min-height: 1.5rem;
  padding: 0.1rem 0.55rem 0.1rem 0.45rem;
  border: 1px solid var(--_border);
  border-radius: var(--sv-radius-pill);
  background: var(--_bg);
  color: var(--_fg);
  font-size: var(--sv-text-sm);
  font-weight: var(--sv-weight-semibold);
  line-height: 1.2;
  white-space: nowrap;
  vertical-align: middle;
}
.sv-badge .sv-icon { width: 1em; height: 1em; vertical-align: 0; stroke-width: 2.25; }
.sv-badge__label { overflow: hidden; text-overflow: ellipsis; }
.sv-badge__extra { font-weight: var(--sv-weight-regular); }
.sv-badge--sm {
  min-height: 1.25rem;
  padding: 0 0.45rem 0 0.35rem;
  font-size: var(--sv-text-xs);
}
.sv-badge--lg {
  min-height: 2rem;
  padding-inline: 0.75rem 0.85rem;
  font-size: var(--sv-text-md);
}

/* Inspection / analysis result. */
.sv-badge.result--pending { --_fg: var(--sv-result-pending-fg); --_bg: var(--sv-result-pending-bg); --_border: var(--sv-result-pending-border); }
.sv-badge.result--suspected { --_fg: var(--sv-result-suspected-fg); --_bg: var(--sv-result-suspected-bg); --_border: var(--sv-result-suspected-border); }
.sv-badge.result--negative { --_fg: var(--sv-result-negative-fg); --_bg: var(--sv-result-negative-bg); --_border: var(--sv-result-negative-border); }
.sv-badge.result--positive { --_fg: var(--sv-result-positive-fg); --_bg: var(--sv-result-positive-bg); --_border: var(--sv-result-positive-border); }
.sv-badge.result--not-evaluable { --_fg: var(--sv-result-not-evaluable-fg); --_bg: var(--sv-result-not-evaluable-bg); --_border: var(--sv-result-not-evaluable-border); }

/* Site status (also derived program status). */
.sv-badge.site-status--preparation { --_fg: var(--sv-status-preparation-fg); --_bg: var(--sv-status-preparation-bg); --_border: var(--sv-status-preparation-border); }
.sv-badge.site-status--planning { --_fg: var(--sv-status-planning-fg); --_bg: var(--sv-status-planning-bg); --_border: var(--sv-status-planning-border); }
.sv-badge.site-status--in-progress { --_fg: var(--sv-status-in-progress-fg); --_bg: var(--sv-status-in-progress-bg); --_border: var(--sv-status-in-progress-border); }
.sv-badge.site-status--closed { --_fg: var(--sv-status-closed-fg); --_bg: var(--sv-status-closed-bg); --_border: var(--sv-status-closed-border); }

/* Sample status. */
.sv-badge.sample-status--draft { --_fg: var(--sv-sample-draft-fg); --_bg: var(--sv-sample-draft-bg); --_border: var(--sv-sample-draft-border); }
.sv-badge.sample-status--at-lab { --_fg: var(--sv-sample-at-lab-fg); --_bg: var(--sv-sample-at-lab-bg); --_border: var(--sv-sample-at-lab-border); }
.sv-badge.sample-status--results-entered { --_fg: var(--sv-sample-results-entered-fg); --_bg: var(--sv-sample-results-entered-bg); --_border: var(--sv-sample-results-entered-border); }
.sv-badge.sample-status--closed { --_fg: var(--sv-sample-closed-fg); --_bg: var(--sv-sample-closed-bg); --_border: var(--sv-sample-closed-border); }

/* Notification status: pending=info, sent=success, failed=error, suppressed/cancelled=gray. */
.sv-badge.notification-status--pending { --_fg: var(--sv-info-fg); --_bg: var(--sv-info-bg); --_border: var(--sv-info-border); }
.sv-badge.notification-status--sent { --_fg: var(--sv-success-fg); --_bg: var(--sv-success-bg); --_border: var(--sv-success-border); }
.sv-badge.notification-status--failed { --_fg: var(--sv-error-fg); --_bg: var(--sv-error-bg); --_border: var(--sv-error-border); }
.sv-badge.notification-status--suppressed,
.sv-badge.notification-status--cancelled { --_fg: var(--sv-result-pending-fg); --_bg: var(--sv-result-pending-bg); --_border: var(--sv-result-pending-border); }

/* Review marker (legacy blue-violet box). */
.sv-badge.review--open { --_fg: var(--sv-review-fg); --_bg: var(--sv-review-bg); --_border: var(--sv-review-border); }
.sv-badge.review--done { --_fg: var(--sv-success-fg); --_bg: var(--sv-success-bg); --_border: var(--sv-success-border); }
.sv-badge.review--cleared { --_fg: var(--sv-result-pending-fg); --_bg: var(--sv-result-pending-bg); --_border: var(--sv-result-pending-border); }

/* Generic tones (import actions, misc). */
.sv-badge--info { --_fg: var(--sv-info-fg); --_bg: var(--sv-info-bg); --_border: var(--sv-info-border); }
.sv-badge--success { --_fg: var(--sv-success-fg); --_bg: var(--sv-success-bg); --_border: var(--sv-success-border); }
.sv-badge--warning { --_fg: var(--sv-warning-fg); --_bg: var(--sv-warning-bg); --_border: var(--sv-warning-border); }
.sv-badge--error { --_fg: var(--sv-error-fg); --_bg: var(--sv-error-bg); --_border: var(--sv-error-border); }
.sv-badge--neutral { --_fg: var(--sv-color-text); --_bg: var(--sv-color-surface); --_border: var(--sv-color-border-strong); }

/* Neutral chip: codes, authority, languages, counts. */
.sv-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.3em;
  max-width: 100%;
  min-height: 1.5rem;
  padding: 0.1rem 0.5rem;
  border: 1px solid var(--sv-color-border);
  border-radius: var(--sv-radius-sm);
  background: var(--sv-color-surface-sunken);
  color: var(--sv-color-text);
  font-size: var(--sv-text-xs);
  font-weight: var(--sv-weight-medium);
  line-height: 1.2;
  white-space: nowrap;
  vertical-align: middle;
}
.sv-chip .sv-icon { width: 1em; height: 1em; vertical-align: 0; }
a.sv-chip { color: var(--sv-color-link); text-decoration: none; }
a.sv-chip:hover { border-color: var(--sv-color-link); background: var(--sv-blue-50); }
.sv-chip--mono { font-family: var(--sv-font-mono); letter-spacing: 0; }
.sv-chip--primary { border-color: var(--sv-green-100); background: var(--sv-color-primary-subtle); color: var(--sv-color-primary); }
.sv-chip--error { border-color: var(--sv-error-border); background: var(--sv-error-bg); color: var(--sv-error-fg); }
.sv-chip--success { border-color: var(--sv-success-border); background: var(--sv-success-bg); color: var(--sv-success-fg); }
.sv-chip--warning { border-color: var(--sv-warning-border); background: var(--sv-warning-bg); color: var(--sv-warning-fg); }
.sv-chip--muted { border-style: dashed; background: transparent; color: var(--sv-color-text-muted); }

/* Small tag ("co-examined", "manual", "inactive"). */
.sv-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.25em;
  padding: 0 0.4rem;
  border-radius: var(--sv-radius-sm);
  background: var(--sv-color-surface-sunken);
  color: var(--sv-color-text-muted);
  font-size: var(--sv-text-xs);
  font-weight: var(--sv-weight-medium);
  line-height: 1.5;
  white-space: nowrap;
  vertical-align: middle;
}
.sv-tag .sv-icon { width: 0.9em; height: 0.9em; vertical-align: 0; }
.sv-tag--review { background: var(--sv-review-bg); color: var(--sv-review-fg); }
.sv-tag--admin { background: var(--sv-info-bg); color: var(--sv-info-fg); }

/* Count bubble (filters, tabs). */
.sv-count {
  display: inline-grid;
  place-items: center;
  min-width: 1.25rem;
  height: 1.25rem;
  padding: 0 0.35rem;
  border-radius: var(--sv-radius-pill);
  background: var(--sv-color-primary);
  color: var(--sv-color-on-primary);
  font-size: var(--sv-text-xs);
  font-weight: var(--sv-weight-bold);
  line-height: 1;
}
