////
///
/// Blink Animations Mixin Module
/// ===========================================================================
///
/// Provides blinking animations for cursor effects, status indicators, and
/// attention elements. Includes rapid, slow, and fade variants with
/// customizable opacity levels and timing functions.
///
/// @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
// ============================================================================


///
/// Blink Animation
/// ---------------------------------------------------------------------------
/// Creates a blink animation where the element alternates between visible
/// and invisible states.
///
/// @name animate_blink
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [step-end] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
/// @param {Number} $start_opacity [1] - Opacity at start and end
/// @param {Number} $blink_opacity [0] - Opacity during blink
///
/// @example scss - Basic usage
///   .cursor {
///     @include animate_blink;
///   }
///
@mixin animate_blink(
    $duration: $animate_base_duration,
    $timing_function: step-end,
    $iteration_count: $animate_base_iteration_count,
    $start_opacity: 1,
    $blink_opacity: 0
) {
    @include animate_base(
        animate_blink,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_animate_blink($start_opacity, $blink_opacity);
}


///
/// Rapid Blink Animation
/// ---------------------------------------------------------------------------
/// Creates a rapid blink animation where the element blinks quickly between
/// visible and invisible states.
///
/// @name animate_blink_rapid
/// @param {Time} $duration [$animate_base_duration_fast] - Animation duration
/// @param {String} $timing_function [steps(2, end)] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Usage
///   .alert {
///     @include animate_blink_rapid;
///   }
///
@mixin animate_blink_rapid(
    $duration: $animate_base_duration_fast,
    $timing_function: steps(2, end),
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_blink_rapid,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_animate_blink_rapid();
}


///
/// Soft Blink Animation
/// ---------------------------------------------------------------------------
/// Creates a soft blink animation with a smooth transition in and out of
/// visibility.
///
/// @name animate_blink_soft
/// @param {Time} $duration [$animate_base_duration_slow] - Animation duration
/// @param {String} $timing_function [ease-in-out] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Usage
///   .status {
///     @include animate_blink_soft;
///   }
///
@mixin animate_blink_soft(
    $duration: $animate_base_duration_slow,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_blink_soft,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_animate_blink_soft();
}


///
/// Alternating Blink Animation
/// ---------------------------------------------------------------------------
/// Creates an alternating blink animation where the element blinks at
/// regular intervals.
///
/// @name animate_blink_alternate
/// @param {Time} $duration [$animate_base_duration] - Animation duration
/// @param {String} $timing_function [linear] - Timing function
/// @param {Number|String} $iteration_count - Number of iterations
///
/// @example scss - Usage
///   .indicator {
///     @include animate_blink_alternate;
///   }
///
@mixin animate_blink_alternate(
    $duration: $animate_base_duration,
    $timing_function: linear,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_blink_alternate,
        $duration,
        $timing_function,
        $iteration_count
    );
    @include keyframes_animate_blink_alternate();
}
