/**
 * Button
 */

.button {
    display: inline-flex;
    font-weight: var(--button--font-weight, var(--font-weight-normal));
    font-size: var(--button--font-size, var(--font-size));
    line-height: 1;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    user-select: none;
    color: var(--button--color);
    background: var(--button--background);
    border-style: var(
        --button--border-style,
        var(--button--border-top-style, var(--border-top-style))
            var(--button--border-right-style, var(--border-right-style))
            var(--button--border-bottom-style, var(--border-bottom-style))
            var(--button--border-left-style, var(--border-left-style))
    );
    border-width: var(
        --button--border-width,
        var(--button--border-top-width, var(--border-top-width))
            var(--button--border-right-width, var(--border-right-width))
            var(--button--border-bottom-width, var(--border-bottom-width))
            var(--button--border-left-width, var(--border-left-width))
    );
    border-color: var(
        --button--border-color,
        var(--button--border-top-color, var(--border-top-color))
            var(--button--border-right-color, var(--border-right-color))
            var(--button--border-bottom-color, var(--border-bottom-color))
            var(--button--border-left-color, var(--border-left-color))
    );
    border-radius: var(
        --button--border-radius,
        var(--button--border-top-left-radius, var(--border-top-left-radius))
            var(--button--border-top-right-radius, var(--border-top-right-radius))
            var(--button--border-bottom-right-radius, var(--border-bottom-right-radius))
            var(--button--border-bottom-left-radius, var(--border-bottom-left-radius))
    );
    box-shadow: var(
        --button--box-shadow,
        var(--button--box-shadow-x-offset, var(--box-shadow-offset-x))
            var(--button--box-shadow-y-offset, var(--box-shadow-offset-y))
            var(--button--box-shadow-blur-radius, var(--box-shadow-blur-radius))
            var(--button--box-shadow-spread-radius, var(--box-shadow-spread-radius))
            var(--button--box-shadow-color, var(--box-shadow-color))
    );
    padding: var(
        --button--padding,
        var(--button--padding-top, var(--padding-top))
            var(--button--padding-right, var(--padding-right))
            var(--button--padding-bottom, var(--padding-bottom))
            var(--button--padding-left, var(--padding-left))
    );
    justify-content: center;
    align-items: center;
    transition-property: var(
        --button--transition-property,
        (background-color, color, border-color)
    );
    transition-duration: var(--button--transition-duration, var(--transition-duration));
    transition-timing-function: var(
        --button--transition-timing-function,
        var(--transition-timing-function)
    );

    // Target non disabled buttons
    &:not(:disabled, .-disabled) {
        // Add "hand" cursor to non-disabled .button elements
        cursor: pointer;

        // Focus and hover state
        &:hover,
        &:focus,
        &.-hovered,
        &.-focused {
            background: var(--button--hover--background, var(--button--background));
            border-color: var(
                --button--hover--border-color,
                var(--button--hover--border-top-color, var(--button--border-top-color))
                    var(--button--hover--border-right-color, var(--button--border-right-color))
                    var(--button--hover--border-bottom-color, var(--button--border-bottom-color))
                    var(--button--hover--border-left-color, var(--button--border-left-color))
            );
            text-decoration: none;
            color: var(--button--color);
            outline: 0;
        }

        &:active,
        &.-active {
            background: var(--button--active--background, var(--button--background));
        }
    }

    // Disabled state
    // Disabled state comes first so active can properly restyle
    &.-disabled,
    &:disabled {
        opacity: var(--button--disabled--opacity, 0.8);
        box-shadow: none;
        cursor: not-allowed;
    }

    // Block buttons
    // Make buttons span the whole parent width
    &.-block {
        display: flex;
        width: 100%;

        + .button.-block {
            margin-left: 0;
            margin-top: var(--button--block--margin-top, var(--margin-top));
        }
    }

    // Link buttons
    // Make a button look and behave like a link
    &.-link {
        color: var(--button--link--color, var(--button--color));
        box-shadow: none;
        background-color: transparent;
        border-color: transparent;

        &:not(:disabled, .-disabled) {
            &:hover,
            &:focus,
            &:active,
            &.-hovered,
            &.-focused,
            &.-active {
                color: var(--button--link--active--color, var(--button--color));
                background-color: transparent;
                border-color: transparent;
                box-shadow: none;
                text-decoration: underline;
            }
        }

        &:disabled,
        &.-disabled {
            pointer-events: none;
        }
    }

    // Outline buttons
    // Remove button background and add a beautiful transition on hover
    &.-outline {
        background: transparent;
        color: var(--button--background);
        border-color: var(--button--background);
        box-shadow: none;

        &:not(:disabled, .-disabled) {
            &:hover,
            &:focus,
            &:active,
            &.-hovered,
            &.-focused,
            &.-active {
                border-color: var(--button--background);
                background: var(--button--background);
                color: var(--button--color);
            }
        }
    }

    // Circle button
    &.-circle {
        border-radius: 50%;
        width: var(--button--circle--size);
        height: var(--button--circle--size);
        padding: 0;
    }

    &.-loading {
        pointer-events: none;
        cursor: default;
    }

    .loader {
        width: var(--button--font-size);
        height: var(--button--font-size);

        > svg > circle {
            stroke: var(--button--color) !important;
        }
    }

    .button-icon,
    .button-content {
        display: inline-flex;
        justify-content: center;
        align-items: center;
    }

    .button-icon {
        + .button-content {
            margin-left: var(--button--icon--margin-right, var(--margin-right-1-2));
        }
    }

    //
    // Button group border accent
    //

    .button-group:not(.-vertical) > &:not(:first-of-type) {
        border-left-color: var(--button--border-left-color);
    }

    .button-group.-vertical > &:not(:first-of-type) {
        border-top-color: var(--button--border-top-color);
    }
}

// Future-proof disabling of clicks on `<a>` elements
a.button.-disabled,
*:disabled a.button {
    pointer-events: none;
}

// Specificity overrides
input[type='submit'],
input[type='reset'],
input[type='button'] {
    &.-block {
        width: 100%;
    }
}
