/*
 * Кнопки. Варианты: --primary, --secondary (outline), --accent, --text, --icon.
 * Цвета задаются через --btn-* в варианте и состоянии; классы .is-hover/.is-active/.is-focus
 * нужны только для показа состояний на демо-странице.
 */

.op-button {
  --btn-bg: var(--color-primary);
  --btn-fg: var(--color-on-primary);
  --btn-border: var(--color-primary);

  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: var(--hit-min);
  min-width: var(--hit-min);
  padding: var(--space-2) var(--space-6);
  border: var(--border-width) solid var(--btn-border);
  border-radius: var(--radius-md);
  background: var(--btn-bg);
  color: var(--btn-fg);
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--font-weight-semibold);
  line-height: var(--leading-snug);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--transition-ui), border-color var(--transition-ui), color var(--transition-ui), transform var(--transition-ui);
}

/* Перекрывает a:hover из base.css: цвет текста кнопки задаёт только сама кнопка */
.op-button:hover,
.op-button:focus,
.op-button:active {
  color: var(--btn-fg);
  text-decoration: none;
}

.op-button--primary:is(:hover, .is-hover, :active, .is-active) {
  --btn-bg: var(--color-primary-hover);
  --btn-border: var(--color-primary-hover);
}

.op-button--secondary {
  --btn-bg: var(--color-surface);
  --btn-fg: var(--color-primary);
  --btn-border: var(--color-primary);
}

.op-button--secondary:is(:hover, .is-hover, :active, .is-active) {
  --btn-bg: var(--color-blue-soft);
  --btn-fg: var(--color-primary-hover);
  --btn-border: var(--color-primary-hover);

  text-decoration: underline;
  text-underline-offset: 0.2em;
}

/* Accent: бронза с белым текстом (--color-on-bronze, 4.93:1). Шампань и светлое золото — только подложки, белый текст на них запрещён */
.op-button--accent {
  --btn-bg: var(--color-bronze);
  --btn-fg: var(--color-on-bronze);
  --btn-border: var(--color-bronze);
}

.op-button--accent:is(:hover, .is-hover) {
  --btn-bg: var(--color-bronze-hover);
  --btn-border: var(--color-bronze-hover);
}

.op-button--accent:is(:active, .is-active) {
  --btn-bg: var(--color-bronze-active);
  --btn-border: var(--color-bronze-active);
}

.op-button--text {
  --btn-bg: transparent;
  --btn-fg: var(--color-primary);
  --btn-border: transparent;

  padding-inline: var(--space-4);
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.op-button--text:hover,
.op-button--text:focus,
.op-button--text:active {
  text-decoration: underline;
}

.op-button--text:is(:hover, .is-hover, :active, .is-active) {
  --btn-bg: var(--color-blue-soft);
  --btn-fg: var(--color-primary-hover);
}

/* Иконка без текста: обязателен aria-label */
.op-button--icon {
  --btn-bg: var(--color-surface);
  --btn-fg: var(--color-primary);
  --btn-border: var(--color-primary);

  width: var(--hit-min);
  padding: 0;
  border-radius: var(--radius-full);
}

.op-button--icon:is(:hover, .is-hover, :active, .is-active) {
  --btn-bg: var(--color-blue-soft);
  --btn-fg: var(--color-primary-hover);
  --btn-border: var(--color-primary-hover);
}

/* Нажатие: сдвиг на 1px помимо смены цвета */
.op-button:is(:active, .is-active) {
  transform: translateY(var(--border-width));
}

/* Показ фокуса на демо-странице (в реальном UI — :focus-visible из base.css) */
.op-button.is-focus {
  outline: var(--focus-width) solid var(--color-focus);
  outline-offset: var(--focus-offset);
}

/* Загрузка: текст остаётся, перед ним индикатор; повторное нажатие блокируется в JS */
.op-button[aria-busy="true"] {
  cursor: progress;
}

.op-button[aria-busy="true"]::before {
  content: "";
  flex: none;
  width: var(--icon-size);
  height: var(--icon-size);
  border: var(--border-width-strong) solid currentColor;
  border-right-color: transparent;
  border-radius: var(--radius-full);
  animation: op-spin var(--duration-spin) linear infinite;
}

@keyframes op-spin {
  to {
    transform: rotate(360deg);
  }
}

/* Недоступна: идёт последней, чтобы перекрыть hover/active любого варианта */
.op-button:is(:disabled, [aria-disabled="true"]) {
  --btn-bg: var(--color-disabled-bg);
  --btn-fg: var(--color-text-muted);
  --btn-border: var(--color-disabled-bg);

  cursor: not-allowed;
  transform: none;
}
