/* ------------------------------------------------------------------------------
*
*  # Ladda progress buttons
*
*  Buttons with built-in loading indicators
*
*  Version: 1.0
*  Latest update: May 25, 2015
*
* ---------------------------------------------------------------------------- */


// Common styles
// ------------------------------

.btn-ladda {
    &,
    .ladda-spinner,
    .ladda-label {
        .transition(all cubic-bezier(0.175, 0.885, 0.32, 1.275) 0.3s);
    }

    // Spinner
    .ladda-spinner {
        position: absolute;
        z-index: 2;
        display: inline-block;
        top: 50%;
        pointer-events: none;
        .opacity(0);
    }

    // Label
    .ladda-label {
        z-index: 3;
    }

    // Progress bar
    .ladda-progress {
        position: absolute;
        width: 0;
        height: 100%;
        right: 0;
        top: 0;
        background-color: fade(#000, 20%);
        visibility: hidden;
        .transition(all linear 0.3s);
        .opacity(0);
    }
    &[data-loading] .ladda-progress {
        visibility: visible;
        .opacity(1);
    }
}


// Zoom animation
// ------------------------------

.btn-ladda {

    // Common
    &[data-style=zoom-in],
    &[data-style=zoom-out] {
        overflow: hidden;

        &,
        .ladda-spinner,
        .ladda-label {
            .transition(0.3s ease all);
        }

        // Label
        .ladda-label {
            position: relative;
            display: inline-block;
        }

        // Spinner
        .ladda-spinner {
            right: 50%;
        }

        // Loading
        &[data-loading] {
            .ladda-label {
                .opacity(0);
            }

            .ladda-spinner {
                -webkit-transform: none;
                -moz-transform: none;
                -ms-transform: none;
                -o-transform: none;
                transform: none;
                .opacity(1);
            }
        }
    }

    // Zoom in
    &[data-style=zoom-in] {
        .ladda-spinner {
            .scale(0.2);
        }

        &[data-loading] {
            .ladda-label {
                .scale(2.2);
            }
        }
    }

    // Zoom out
    &[data-style=zoom-out] {
        .ladda-spinner {
            .scale(2.5);
        }

        &[data-loading] {
            .ladda-label {
                .scale(0.5);
            }
        }
    }
}


// Expand animation
// ------------------------------

.btn-ladda {

    // Left
    &[data-style=expand-left] {
        overflow: hidden;

        .ladda-spinner {
            right: 20px;
        }

        &[data-loading] {
            padding-right: 35px;

            .ladda-spinner {
                .opacity(1);
            }
        }
    }

    // Right
    &[data-style=expand-right] {
        overflow: hidden;

        .ladda-spinner {
            left: 20px;
        }

        &[data-loading] {
            padding-left: 35px;

            .ladda-spinner {
                .opacity(1);
            }
        }
    }

    // Up
    &[data-style=expand-up] {
        overflow: hidden;

        .ladda-spinner {
            top: -16px;
            right: 50%;
        }

        &[data-loading] {
            padding-top: 40px;

            .ladda-spinner {
                top: 12px;
                margin-top: 8px;
                .opacity(1);
            }
        }
    }

    // Down
    &[data-style=expand-down] {
        overflow: hidden;

        .ladda-spinner {
            top: 44px;
            right: 50%;
        }
        &[data-loading] {
            padding-bottom: 40px;

            .ladda-spinner {
                .opacity(1);
            }
        }
    }
}


// Slide animation
// ------------------------------

.btn-ladda {

    // Left
    &[data-style=slide-left] {
        overflow: hidden;

        .ladda-label {
            right: 0;
            position: relative;
        }

        .ladda-spinner {
            left: 0;
        }

        &[data-loading] {
            .ladda-label {
                right: -100%;
                .opacity(0);
            }

            .ladda-spinner {
                left: 50%;
                .opacity(1);
            }
        }
    }

    // Right
    &[data-style=slide-right] {
        overflow: hidden;

        .ladda-label {
            left: 0;
            position: relative;
        }

        .ladda-spinner {
            right: 0;
        }

        &[data-loading] {
            .ladda-label {
                left: -100%;
                .opacity(0);
            }

            .ladda-spinner {
                right: 50%;
                .opacity(1);
            }
        }
    }

    // Up
    &[data-style=slide-up] {
        overflow: hidden;

        .ladda-label {
            top: 0;
            position: relative;
        }

        .ladda-spinner {
            top: 100%;
            right: 50%;
        }

        &[data-loading] {
            .ladda-label {
                top: -16px;
                .opacity(0);
            }

            .ladda-spinner {
                top: 16px;
                .opacity(1);
            }
        }
    }

    // Down
    &[data-style=slide-down] {
        overflow: hidden;

        .ladda-label {
            top: 0;
            position: relative;
        }

        .ladda-spinner {
            top: -100%;
            right: 50%;
        }

        &[data-loading] {
            .ladda-label {
                top: 16px;
                .opacity(0);
            }

            .ladda-spinner {
                top: 16px;
                .opacity(1);
            }
        }
    }
}


// Fade animation
// ------------------------------

.btn-ladda {
    &[data-style=fade] {
        overflow: hidden;

        .ladda-spinner {
            right: 50%;
        }

        &[data-loading] {
            .ladda-label {
                .opacity(0);
            }

            .ladda-spinner {
                .opacity(1);
            }
        }
    }
}


// Radius animation
// ------------------------------

.btn-ladda {
    &[data-style=radius] {
        overflow: hidden;
        border-radius: @border-radius-small;
        .transition(all ease-in-out 0.5s);

        .ladda-spinner {
            right: 50%;
        }

        &[data-loading] {
            border-radius: @border-radius-large;

            .ladda-label {
                .opacity(0);
            }

            .ladda-spinner {
                .opacity(1);
            }
        }
    }
}
