/* =========================================================
   OBS DESIGN SYSTEM
   Button Component
   ========================================================= */

/* =========================================================
   BASE BUTTON
   ========================================================= */

.obs-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--obs-space-2);

    min-height: var(--obs-control-height-md);
    padding: var(--obs-space-2) var(--obs-space-4);

    border: var(--obs-border-width-thin) solid transparent;
    border-radius: var(--obs-radius-md);

    font-family: inherit;
    font-size: var(--obs-font-size-md);
    font-weight: var(--obs-font-weight-semibold);
    line-height: var(--obs-line-height-tight);
    text-align: center;
    white-space: nowrap;

    cursor: pointer;
    user-select: none;

    transition:
        background var(--obs-transition-fast),
        border-color var(--obs-transition-fast),
        color var(--obs-transition-fast),
        box-shadow var(--obs-transition-fast),
        transform var(--obs-transition-fast),
        opacity var(--obs-transition-fast);
}

.obs-btn:hover {
    transform: translateY(-1px);
}

.obs-btn:active {
    transform: translateY(0);
}

.obs-btn:focus-visible {
    outline: none;
    box-shadow: var(--obs-focus-ring);
}

.obs-btn:disabled,
.obs-btn.is-disabled {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
    transform: none;
}

/* =========================================================
   PRIMARY
   ========================================================= */

.obs-btn-primary {
    color: var(--obs-button-primary-text);
    background: var(--obs-primary);
    border-color: var(--obs-primary);
    box-shadow: var(--obs-shadow-sm);
}

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

.obs-btn-primary:active {
    background: var(--obs-primary-active);
    border-color: var(--obs-primary-active);
}

/* =========================================================
   SECONDARY
   ========================================================= */

.obs-btn-secondary {
    color: var(--obs-text-primary);
    background: var(--obs-surface-2);
    border-color: var(--obs-border-primary);
}

.obs-btn-secondary:hover {
    background: var(--obs-surface-hover);
    border-color: var(--obs-primary);
}

/* =========================================================
   SUCCESS
   ========================================================= */

.obs-btn-success {
    color: var(--obs-button-success-text);
    background: var(--obs-success);
    border-color: var(--obs-success);
}

.obs-btn-success:hover {
    background: var(--obs-success-hover);
    border-color: var(--obs-success-hover);
}

/* =========================================================
   DANGER
   ========================================================= */

.obs-btn-danger {
    color: var(--obs-button-danger-text);
    background: var(--obs-danger);
    border-color: var(--obs-danger);
}

.obs-btn-danger:hover {
    background: var(--obs-danger-hover);
    border-color: var(--obs-danger-hover);
}

/* =========================================================
   OUTLINE
   ========================================================= */

.obs-btn-outline {
    color: var(--obs-primary);
    background: transparent;
    border-color: var(--obs-primary);
}

.obs-btn-outline:hover {
    color: var(--obs-button-primary-text);
    background: var(--obs-primary);
}

/* =========================================================
   GHOST
   ========================================================= */

.obs-btn-ghost {
    color: var(--obs-text-secondary);
    background: transparent;
    border-color: transparent;
}

.obs-btn-ghost:hover {
    color: var(--obs-text-primary);
    background: var(--obs-surface-hover);
}

/* =========================================================
   SIZES
   ========================================================= */

.obs-btn-sm {
    min-height: var(--obs-control-height-sm);
    padding: var(--obs-space-1) var(--obs-space-3);
    font-size: var(--obs-font-size-sm);
    border-radius: var(--obs-radius-sm);
}

.obs-btn-lg {
    min-height: var(--obs-control-height-lg);
    padding: var(--obs-space-3) var(--obs-space-5);
    font-size: var(--obs-font-size-lg);
    border-radius: var(--obs-radius-lg);
}

/* =========================================================
   ICON BUTTON
   ========================================================= */

.obs-btn-icon {
    width: var(--obs-control-height-md);
    min-width: var(--obs-control-height-md);
    padding: 0;
}

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

.obs-btn-icon.obs-btn-lg {
    width: var(--obs-control-height-lg);
    min-width: var(--obs-control-height-lg);
}

/* =========================================================
   LOADING
   ========================================================= */

.obs-btn.is-loading {
    cursor: wait;
    pointer-events: none;
}

.obs-btn-spinner {
    width: var(--obs-icon-size-sm);
    height: var(--obs-icon-size-sm);

    border: var(--obs-border-width-medium) solid var(--obs-button-spinner-track);
    border-top-color: var(--obs-button-spinner-color);
    border-radius: var(--obs-radius-circle);

    animation: obs-spin 800ms linear infinite;
}

.obs-btn-spinner[hidden] {
    display: none;
}

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