/* LovelyHair — Button (ported from Button.jsx) */
.lh-button {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: auto;
  font-family: var(--font-body);
  font-weight: var(--weight-semibold);
  line-height: 1;
  letter-spacing: 0.01em;
  border: 1.5px solid transparent;
  border-radius: var(--radius-sm);
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  transition: var(--transition-base);
  transform: translateY(0);
}
/* Lift only where a real pointer hovers — on touch a tap leaves :hover stuck,
   so the button would stay raised after the finger has gone. */
@media (hover: hover) and (pointer: fine) {
  .lh-button:hover { transform: translateY(-1px); }
}
.lh-button--block { width: 100%; }

/* Sizes */
.lh-button--sm { min-height: 36px; padding: 8px 16px;  font-size: var(--font-body-sm); gap: 7px; }
.lh-button--md { min-height: 44px; padding: 13px 24px; font-size: var(--font-body-sm); gap: 8px; }
.lh-button--lg { min-height: 52px; padding: 16px 32px; font-size: var(--font-body-md); gap: 10px; }

/* Variant — primary (CTA black) */
.lh-button--primary { background: var(--color-action); color: var(--color-on-action); }
.lh-button--primary:hover { background: var(--color-action-hover); box-shadow: var(--shadow-md); }

/* Variant — secondary (amber fill) */
.lh-button--secondary { background: var(--color-primary); color: #fff; }
.lh-button--secondary:hover { background: var(--color-primary-hover); box-shadow: var(--shadow-md); }

/* Variant — outline (amber outline) */
.lh-button--outline { background: transparent; color: var(--color-primary); border-color: var(--color-primary); }
.lh-button--outline:hover { background: var(--color-primary); color: #fff; }

/* Variant — ghost */
.lh-button--ghost { background: transparent; color: var(--text-body); }
.lh-button--ghost:hover { background: var(--surface-sunken); }

/* Disabled */
.lh-button:disabled,
.lh-button[aria-disabled="true"] {
  background: var(--lh-stone-200);
  color: var(--text-muted);
  border-color: transparent;
  opacity: 0.55;
  cursor: not-allowed;
  transform: none;
  box-shadow: none;
}

/* Loading spinner */
.lh-button.is-loading { cursor: progress; }

/* In-button loader — the brand mark, same as the wig PDP's Add to cart.
   The label keeps its box (visibility, never display) so the button does not
   resize mid-request and shift everything under it. */
.lh-button__loader {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
}
.lh-button__loader[hidden] { display: none; }
/* Keyed off the loader's own visibility, NOT `is-loading`. Other controls in
   this theme put `is-loading` on a button that has no loader inside it — the
   salon booking submit is one — and hiding the label there would blank the
   button mid-request with nothing in its place. The loader is emitted before
   the label, so the sibling combinator reaches it. */
.lh-button__loader:not([hidden]) ~ .lh-button__label,
.lh-button__loader:not([hidden]) ~ .lh-icon { visibility: hidden; }

.lh-button__spinner {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  border: 2px solid currentColor;
  border-top-color: transparent;
  display: inline-block;
  animation: lh-spin 0.7s linear infinite;
}
@keyframes lh-spin { to { transform: rotate(360deg); } }
