/* Buttons: the single definition for every action button in the workspace.
   Page stylesheets may position a button (width, margin, order, flex) but never restyle it.
   Variants: secondary (default), primary, soft, ghost, danger, danger-outline.
   Sizes: --ch-control-h-sm (32px), --ch-control-h (40px, shared with fields), --ch-control-h-lg (44px). Touch devices raise every control to 44px in app-devices.css.
   Labels are 14px (see the button contract in platform-typography.css). */

.btn,
.btn-secondary-action,
.settings-primary-button,
.settings-secondary-button,
.settings-danger-button,
.settings-profile-remove-button,
.lb-btn,
.rx-button,
.xs-btn,
.tx-btn,
.sp-button,
.work-button,
.media-prep-button,
.batch-lifecycle-button,
.sample-submit-button,
.audit-download-button {
  --btn-bg: var(--ch-panel);
  --btn-fg: var(--ch-ink);
  --btn-line: var(--ch-gray-200);
  --btn-hover-bg: var(--ch-gray-50);
  --btn-hover-fg: var(--ch-ink);
  --btn-hover-line: var(--ch-gray-300);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: var(--ch-control-h);
  padding: 0 16px;
  color: var(--btn-fg);
  border: 1px solid var(--btn-line);
  border-radius: var(--ch-radius-md);
  background: var(--btn-bg);
  box-shadow: none;
  font-size: var(--ch-text-md);
  font-weight: 600;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}

/* Primary: one per view, the action the page exists for. */
.btn-primary,
.settings-primary-button,
.lb-btn.is-primary,
.rx-button.is-primary,
.xs-btn.is-primary,
.tx-btn.is-primary,
.sp-button.is-primary,
.work-button.is-primary,
.batch-lifecycle-button,
.sample-submit-button {
  --btn-bg: var(--ch-brand-navy);
  --btn-fg: #fff;
  --btn-line: var(--ch-brand-navy);
  --btn-hover-bg: var(--ch-gray-900);
  --btn-hover-fg: #fff;
  --btn-hover-line: var(--ch-gray-900);
}

/* Soft: a supporting action that should still read as a button in a busy header. */
.btn-soft,
.xs-btn.is-soft,
.media-prep-button {
  --btn-bg: var(--ch-brand-soft);
  --btn-fg: var(--ch-brand-navy);
  --btn-line: var(--ch-brand-soft);
  --btn-hover-bg: var(--ch-gray-100);
  --btn-hover-fg: var(--ch-brand-navy);
  --btn-hover-line: var(--ch-brand-border);
}

/* Ghost: low-emphasis actions inside toolbars and footers. */
.btn-link,
.btn-ghost,
.lb-btn.is-ghost,
.rx-button.is-quiet {
  --btn-bg: transparent;
  --btn-fg: var(--ch-gray-600);
  --btn-line: transparent;
  --btn-hover-bg: var(--ch-gray-100);
  --btn-hover-fg: var(--ch-ink);
  --btn-hover-line: transparent;
}

/* Danger: irreversible actions, confirmed in context. */
.btn-danger,
.settings-danger-button,
.settings-primary-button.is-danger {
  --btn-bg: var(--ch-bad);
  --btn-fg: #fff;
  --btn-line: var(--ch-bad);
  --btn-hover-bg: #822a3a;
  --btn-hover-fg: #fff;
  --btn-hover-line: #822a3a;
}

.btn-outline-danger,
.settings-secondary-button.is-danger,
.settings-profile-remove-button,
.lb-btn.is-danger-ghost {
  --btn-bg: var(--ch-panel);
  --btn-fg: var(--ch-bad);
  --btn-line: var(--ch-bad-line);
  --btn-hover-bg: var(--ch-bad-bg);
  --btn-hover-fg: var(--ch-bad);
  --btn-hover-line: var(--ch-bad);
}

.btn-sm,
.lb-btn.is-sm {
  gap: 6px;
  min-height: var(--ch-control-h-sm);
  padding: 0 12px;
}

.btn-lg,
.lb-btn.is-lg {
  min-height: var(--ch-control-h-lg);
  padding: 0 20px;
}

/* States. The selector weight matches Bootstrap's :not(.btn-check)+.btn:active so one rule wins everywhere. */
:is(.btn, .btn-secondary-action, .settings-primary-button, .settings-secondary-button, .settings-danger-button,
    .settings-profile-remove-button, .lb-btn, .rx-button, .xs-btn, .tx-btn, .sp-button, .work-button,
    .media-prep-button, .batch-lifecycle-button, .sample-submit-button, .audit-download-button):is(:hover, :active):not(:disabled):not(.disabled) {
  color: var(--btn-hover-fg);
  border-color: var(--btn-hover-line);
  background: var(--btn-hover-bg);
}

:is(.btn, .btn-secondary-action, .settings-primary-button, .settings-secondary-button, .settings-danger-button,
    .settings-profile-remove-button, .lb-btn, .rx-button, .xs-btn, .tx-btn, .sp-button, .work-button,
    .media-prep-button, .batch-lifecycle-button, .sample-submit-button, .audit-download-button):focus-visible {
  outline: var(--ch-focus-width) solid var(--ch-focus);
  outline-offset: var(--ch-focus-offset);
  box-shadow: none;
}

:is(.btn, .btn-secondary-action, .settings-primary-button, .settings-secondary-button, .settings-danger-button,
    .settings-profile-remove-button, .lb-btn, .rx-button, .xs-btn, .tx-btn, .sp-button, .work-button,
    .media-prep-button, .batch-lifecycle-button, .sample-submit-button, .audit-download-button):is(:disabled, .disabled, [aria-disabled="true"]) {
  color: var(--btn-fg);
  border-color: var(--btn-line);
  background: var(--btn-bg);
  opacity: .5;
  cursor: not-allowed;
}
