////
///
/// Pop Animations Mixin Module
/// ===========================================================================
///
/// Provides quick pop-in/pop-out animations for element emphasis.
/// Includes rapid and subtle variants with customizable scale factors.
/// Perfect for button clicks, notifications, and micro-interactions.
///
/// @group Animations
/// @author Scape Agency
/// @link https://move.gl
/// @since 0.1.0 initial release
/// @access public
///
////


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

@use "../../dev" as *;
@use "../../variables" as *;
@use "../keyframes" as *;
@use "base" as *;


// ============================================================================
// Mixins
// ============================================================================


///
/// Pop Animation
/// ---------------------------------------------------------------------------
/// Creates a pop animation where the element scales up and then back down.
///
/// @name animate_pop
/// @param {Number} $scale [1.2] - Scale factor for the pop effect
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
///
/// @example scss - Basic usage
///   .button {
///     @include animate_pop;
///   }
///
@mixin animate_pop(
    $scale: 1.2,
    $duration: $animate_base_duration_fast,
    $timing_function: ease-in-out
) {
    @include animate_base(
        animate_pop,
        $duration,
        $timing_function,
        1,
    );
    @include keyframes_animate_pop($scale);
}


///
/// Rapid Pop Animation
/// ---------------------------------------------------------------------------
/// Creates a rapid pop animation with a quick scaling effect.
///
/// @name animate_pop_fast
/// @param {Number} $scale [1.2] - Scale factor for the pop effect
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
///
/// @example scss - Usage
///   .icon {
///     @include animate_pop_fast;
///   }
///
@mixin animate_pop_fast(
    $scale: 1.2,
    $duration: $animate_base_duration_fast,
    $timing_function: ease-in-out
) {
    @include animate_base(
        animate_pop_fast,
        $duration,
        $timing_function,
        1,
    );
    @include keyframes_animate_pop_fast($scale);
}


///
/// Gentle Pop Animation
/// ---------------------------------------------------------------------------
/// Creates a gentler pop animation with a slower scaling effect.
///
/// @name animate_pop_slow
/// @param {Number} $scale [1.1] - Scale factor for the pop effect
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
///
/// @example scss - Usage
///   .soft-button {
///     @include animate_pop_slow;
///   }
///
@mixin animate_pop_slow(
    $scale: 1.1,
    $duration: $animate_base_duration,
    $timing_function: ease-in-out
) {
    @include animate_base(
        animate_pop_slow,
        $duration,
        $timing_function,
        1,
);
    @include keyframes_animate_pop_slow($scale);
}


///
/// Pop with Rotation Animation
/// ---------------------------------------------------------------------------
/// Creates a pop animation combined with a rotation effect.
///
/// @name animate_pop_rotate
/// @param {Number} $scale [1.2] - Scale factor for the pop effect
/// @param {Angle} $rotation_angle [10deg] - Rotation angle during the pop
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
///
/// @example scss - Usage
///   .fancy-button {
///     @include animate_pop_rotate;
///   }
///
@mixin animate_pop_rotate(
    $scale: 1.2,
    $rotation_angle: 10deg,
    $duration: $animate_base_duration_fast,
    $timing_function: ease-in-out
) {
    @include animate_base(
        animate_pop_rotate,
        $duration,
        $timing_function,
        1,
    );
    @include keyframes_animate_pop_rotate($scale, $rotation_angle);
}
