/*
|--------------------------------------------------------------------------
| Button-Grundlage
|--------------------------------------------------------------------------
|
| Diese Datei enthält ausschließlich gemeinsame Eigenschaften aller Buttons.
|
| Farben, Hintergründe und besondere Zustände bleiben in den jeweiligen
| Button-Dateien getrennt definiert.
|
*/

.button {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    min-height: 44px;
    padding:
        var(--spacing-3)
        var(--spacing-5);

    color: var(--text-primary);
    font-family: inherit;
    font-size: var(--font-size-base);
    font-weight: var(--font-weight-semibold);
    line-height: 1.2;
    text-align: center;
    text-decoration: none;
    white-space: nowrap;

    background: transparent;
    border:
        var(--border-width)
        solid
        transparent;
    border-radius: var(--radius-md);

    cursor: pointer;

    transition:
        color var(--transition-base),
        background-color var(--transition-base),
        border-color var(--transition-base),
        box-shadow var(--transition-base),
        opacity var(--transition-base),
        transform var(--transition-base);
}


/*
|--------------------------------------------------------------------------
| Interaktionszustände
|--------------------------------------------------------------------------
*/

.button:hover {
    text-decoration: none;
    transform: translateY(-1px);
}

.button:active {
    transform: translateY(0);
}

.button:focus-visible {
    outline: 2px solid var(--theme-current);
    outline-offset: 3px;
}


/*
|--------------------------------------------------------------------------
| Deaktivierter Zustand
|--------------------------------------------------------------------------
*/

.button:disabled,
.button.is-disabled,
.button[aria-disabled="true"] {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
    transform: none;
}


/*
|--------------------------------------------------------------------------
| Button-Größen
|--------------------------------------------------------------------------
*/

.button-small {
    min-height: 36px;
    padding:
        var(--spacing-2)
        var(--spacing-4);

    font-size: var(--font-size-sm);
}

.button-large {
    min-height: 52px;
    padding:
        var(--spacing-4)
        var(--spacing-6);

    font-size: var(--font-size-md);
}


/*
|--------------------------------------------------------------------------
| Volle Breite
|--------------------------------------------------------------------------
*/

.button-block {
    width: 100%;
}


/*
|--------------------------------------------------------------------------
| Button-Gruppen
|--------------------------------------------------------------------------
*/

.button-group {
    display: flex;
    align-items: center;
    flex-wrap: wrap;

    gap: var(--spacing-3);
}


/*
|--------------------------------------------------------------------------
| Buttons mit Symbolen
|--------------------------------------------------------------------------
*/

.button-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    gap: var(--spacing-2);
}

.button-icon-only {
    width: 44px;
    min-width: 44px;
    padding: 0;
}


/*
|--------------------------------------------------------------------------
| Ladezustand
|--------------------------------------------------------------------------
*/

.button.is-loading {
    position: relative;

    color: transparent;
    pointer-events: none;
}

.button.is-loading::after {
    position: absolute;

    width: 18px;
    height: 18px;

    content: "";

    border:
        2px
        solid
        currentColor;
    border-right-color: transparent;
    border-radius: 50%;

    animation: button-loading 0.7s linear infinite;
}

@keyframes button-loading {
    to {
        transform: rotate(360deg);
    }
}


/*
|--------------------------------------------------------------------------
| Reduzierte Bewegung
|--------------------------------------------------------------------------
*/

@media (prefers-reduced-motion: reduce) {
    .button {
        transition: none;
    }

    .button:hover,
    .button:active {
        transform: none;
    }

    .button.is-loading::after {
        animation-duration: 1.4s;
    }
}


/*
|--------------------------------------------------------------------------
| Mobile Geräte
|--------------------------------------------------------------------------
*/

@media (max-width: 520px) {
    .button-group {
        align-items: stretch;
        flex-direction: column;
    }

    .button-group .button {
        width: 100%;
    }
}