////
///
/// Float Animations Mixin Module
/// ===========================================================================
///
/// Provides gentle floating animations that simulate buoyancy and levitation.
/// Includes vertical, horizontal, and combined float patterns with optional
/// rotation. Perfect for background elements, icons, and ambient effects.
///
/// @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
// ============================================================================


///
/// Float Animation
/// ---------------------------------------------------------------------------
/// Creates a floating animation where the element moves up and down smoothly.
///
/// @name animate_float
/// @param {Length} $start_position [0] - Starting position of the animation
/// @param {Length} $mid_position [10px] - Mid-position of the animation
/// @param {Length} $end_position [0] - Ending position of the animation
/// @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 - Basic usage
///   .cloud {
///     @include animate_float;
///   }
///
@mixin animate_float(
    $start_position: 0,
    $mid_position: 10px,
    $end_position: 0,
    $duration: $animate_base_duration_slow,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_float,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @keyframes animate_float {
        0%, 100% { transform: translateY($start_position); }
        50% { transform: translateY($mid_position); }
    }
}


///
/// Horizontal Float Animation
/// ---------------------------------------------------------------------------
/// Creates a floating animation where the element moves horizontally.
///
/// @name animate_float_horizontal
/// @param {Length} $horizontal-distance [10px] - Horizontal movement distance
/// @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
///   .icon {
///     @include animate_float_horizontal;
///   }
///
@mixin animate_float_horizontal(
    $horizontal-distance: 10px,
    $duration: $animate_base_duration_slow,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_float_horizontal,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @keyframes animate_float_horizontal {
        0%, 100% { transform: translateX(0); }
        50% { transform: translateX($horizontal-distance); }
    }
}


///
/// Float with Rotation Animation
/// ---------------------------------------------------------------------------
/// Creates a floating animation where the element moves up and down with a
/// rotation.
///
/// @name animate_float_rotate
/// @param {Angle} $rotation_angle [15deg] - Rotation angle during float
/// @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
///   .leaf {
///     @include animate_float_rotate;
///   }
///
@mixin animate_float_rotate(
    $rotation_angle: 15deg,
    $duration: $animate_base_duration_slow,
    $timing_function: ease-in-out,
    $iteration_count: $animate_base_iteration_count
) {
    @include animate_base(
        animate_float_rotate,
        $duration,
        $timing_function,
        $iteration_count,
    );
    @keyframes animate_float_rotate {
        0%, 100% { transform: translateY(0) rotate(0); }
        50% { transform: translateY(-10px) rotate($rotation_angle); }
    }
}
