/// Automatically scale type values?
/// @group config
/// @type boolean
///
$auto-scale-type: false !default;

/// Modular scale ratio
/// @group config
/// @type number
///
$auto-scale-type-ratio: 1.125 !default;

/// @alias auto-scale-type-ratio
///
$scale-ratio: 1.125 !default;

/// Generates a pixel value that is an exponent of a ratio
/// (`$ratio` defaults to `$scale-ratio` value)
/// @param {number} $scale
/// @param {number | list} $ratio [$scale-ratio]
///
@function modular-scale($scale, $ratio: $auto-scale-type-ratio) {
    // allow for legacy $scale-ratio config
    $ratio: _legacy-check($auto-scale-type-ratio, $scale-ratio, 1.125);
    $modular-scale: $ratio;

    $ratio: cache(_normalize-ratio, $ratio);

    $font-size: strip-units($base-font-size);
    $pow: pow($modular-scale, $scale);
    @return ($font-size * $pow) * 1px;
}

/// Convert list ratios into single values, allowing for larger values first
/// and then normalizing those by reversing the division logic.
/// Always returns a value with a decimal (float).
///
/// @returns {number}
///
@function _normalize-ratio($ratio) {
    @if length($ratio) == 2 {
        // Making sure we don't have a ratio below 1.
        @if nth($ratio, 1) < nth($ratio, 2) {
            @return (nth($ratio, 2) / nth($ratio, 1));
        } @else {
            @return (nth($ratio, 1) / nth($ratio, 2));
        }
    }

    @return $ratio;
}
