/**
 * Button component (Style Guide 03)
 *
 * Square, flat, uppercase. Three levels of emphasis:
 *   .button--primary    filled forest      "ADD TO CART"
 *   .button--secondary  outlined on white  "VIEW DETAILS"
 *   .button--tertiary    underlined text    "NOTIFY ME"
 *
 * Usage:
 *   <button class="button button--primary">Add to cart</button>
 *   <a class="button button--secondary button--block" href="#">View details</a>
 *   <button class="button button--tertiary">Notify me</button>
 */

.button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--space-2);
	min-height: var(--control-height);
	padding: var(--space-3) var(--space-8);
	font-family: var(--font-heading);
	font-size: var(--text-sm);
	font-weight: var(--weight-semibold);
	line-height: 1;
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	text-align: center;
	text-decoration: none;
	white-space: nowrap;
	background: var(--color-primary);
	color: var(--color-inverse);
	border: var(--border-width) solid transparent;
	border-radius: var(--radius-none);
	cursor: pointer;
	transition: background var(--transition-fast), color var(--transition-fast),
		border-color var(--transition-fast);
}

.button:hover {
	background: var(--color-primary-hover);
	color: var(--color-inverse);
}

.button:focus-visible {
	outline: var(--border-width-strong) solid var(--color-border-strong);
	outline-offset: 2px;
}

.button:active {
	transform: translateY(1px);
}

/* --- Variants --- */

.button--primary {
	background: var(--color-primary);
	color: var(--color-inverse);
	border-color: var(--color-primary);
}

.button--primary:hover {
	background: var(--color-primary-hover);
	border-color: var(--color-primary-hover);
}

.button--secondary {
	background: var(--color-surface);
	color: var(--color-heading);
	border-color: var(--color-border);
}

.button--secondary:hover {
	background: var(--color-surface-muted);
	color: var(--color-heading);
	border-color: var(--color-border-strong);
}

.button--tertiary {
	min-height: 0;
	padding: 0;
	background: none;
	color: var(--color-heading);
	border-color: transparent;
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 0.35em;
}

.button--tertiary:hover {
	background: none;
	color: var(--color-primary-hover);
	text-decoration-thickness: var(--border-width-strong);
}

/* Accent / destructive — sale and alert contexts. */
.button--accent {
	background: var(--color-accent);
	color: var(--color-inverse);
	border-color: var(--color-accent);
}

.button--accent:hover {
	background: var(--color-accent-hover);
	border-color: var(--color-accent-hover);
}

/* On a forest background. */
.button--inverse {
	background: var(--color-inverse);
	color: var(--color-heading);
	border-color: var(--color-inverse);
}

.button--inverse:hover {
	background: var(--color-surface-strong);
	color: var(--color-heading);
	border-color: var(--color-surface-strong);
}

/* --- Sizes --- */

.button--sm {
	min-height: var(--control-height-sm);
	padding: var(--space-2) var(--space-4);
	font-size: var(--text-2xs);
}

.button--lg {
	min-height: var(--control-height-lg);
	padding: var(--space-4) var(--space-10);
	font-size: var(--text-md);
}

/* --- Layout modifiers --- */

.button--block {
	display: flex;
	width: 100%;
}

/* Square icon-only button. */
.button--icon {
	width: var(--control-height);
	min-height: var(--control-height);
	padding: 0;
	gap: 0;
}

.button--icon.button--sm {
	width: var(--control-height-sm);
	min-height: var(--control-height-sm);
}

/* --- States --- */

.button:disabled,
.button.is-disabled,
.button[aria-disabled="true"] {
	opacity: 0.4;
	cursor: not-allowed;
	pointer-events: none;
}

.button.is-loading {
	pointer-events: none;
	color: transparent;
	position: relative;
}

.button.is-loading::after {
	content: "";
	position: absolute;
	width: 1rem;
	height: 1rem;
	border: var(--border-width-strong) solid currentcolor;
	border-top-color: var(--color-inverse);
	border-radius: var(--radius-full);
	animation: button-spin 700ms linear infinite;
}

@keyframes button-spin {
	to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
	.button,
	.button.is-loading::after {
		transition: none;
		animation: none;
	}

	.button:active {
		transform: none;
	}
}

/* --- Button group --- */

.button-group {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-3);
	align-items: center;
}

/* --- WordPress core button blocks inherit the primary style --- */

.wp-block-button__link,
.wp-element-button {
	min-height: var(--control-height);
	padding: var(--space-3) var(--space-8);
	font-family: var(--font-heading);
	font-size: var(--text-sm);
	font-weight: var(--weight-semibold);
	letter-spacing: var(--tracking-wider);
	text-transform: uppercase;
	text-decoration: none;
	background: var(--color-primary);
	color: var(--color-inverse);
	border-radius: var(--radius-none);
}

.wp-block-button__link:hover,
.wp-element-button:hover {
	background: var(--color-primary-hover);
	color: var(--color-inverse);
}

.wp-block-button.is-style-outline .wp-block-button__link {
	background: var(--color-surface);
	color: var(--color-heading);
	border: var(--border-width) solid var(--color-border);
}
