////
///
/// Button Utility Classes
/// ===========================================================================
///
/// CSS classes for button variants, sizes, and states.
/// All functionality is defined in mixins - classes only include them.
///
/// @group Classes.BodyAtoms.Buttons
/// @author Scape Agency
/// @link https://scape.style
/// @since 0.1.0 initial release
/// @access public
///
////

// ============================================================================
// Use
// ============================================================================

@use "../../../dev" as *;
@use "../../../mixins" as *;

// ============================================================================
// Base Button Classes
// ============================================================================

/// Base button styles
.button {
    @include button--base;
    @include button--size-md;
    gap: q(8);
    line-height: 1.5;
    text-decoration: none;
    border: q(1) solid transparent;
    border-radius: var(--corner_radius_02);
    white-space: nowrap;

    &:disabled,
    &[disabled] {
        @include button--disabled;
    }

    &:focus-visible {
        @include button--focus-visible;
    }
}

// ============================================================================
// Button Variants
// ============================================================================

/// Primary button
.button--primary {
    @include button--primary;
}

/// Secondary button
.button--secondary {
    @include button--secondary;
}

/// Outline button
.button--outline {
    @include button--outline;
}

/// Ghost button (no border)
.button--ghost {
    @include button--ghost;
}

/// Link-style button
.button--link {
    @include button--link;
}

/// Solid button
.button--solid {
    @include button--solid;
}

/// Accent button
.button--accent {
    @include button--accent;
}

/// Clear button
.button--clear {
    @include button--clear;
}

// ============================================================================
// Status Variants
// ============================================================================

/// Success button
.button--success {
    @include button--success;
}

/// Warning button
.button--warning {
    @include button--warning;
}

/// Danger/Error button
.button--danger {
    @include button--danger;
}

/// Info button
.button--info {
    @include button--info;
}

// ============================================================================
// Button Sizes
// ============================================================================

/// Extra small button
.button--size-xs {
    @include button--size-xs;
}

/// Small button
.button--size-sm {
    @include button--size-sm;
}

/// Medium button
.button--size-md {
    @include button--size-md;
}

/// Large button
.button--size-lg {
    @include button--size-lg;
}

/// Extra large button
.button--size-xl {
    @include button--size-xl;
}

// ============================================================================
// Button Shapes
// ============================================================================

/// Rounded button
.button--rounded {
    @include button--rounded;
}

/// Pill button
.button--pill {
    @include button--pill;
}

/// Square button (no radius)
.button--square {
    @include button--square;
}

/// Icon button (square aspect)
.button--icon {
    @include button--icon;
}

// ============================================================================
// Button States
// ============================================================================

/// Disabled button
.button--disabled {
    @include button--disabled;
}

/// Focus visible button
.button--focus-visible {
    @include button--focus-visible;
}

/// Full-width button
.button--block {
    @include button--block;
}

/// Loading button
.button--loading {
    @include button--loading;
}

// Animation keyframes for loading spinner
@include button--spin-keyframes;
