| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | 
							- // Scaling Variables
 
- $golden:           1.618;
 
- $minor-second:     1.067;
 
- $major-second:     1.125;
 
- $minor-third:      1.2;
 
- $major-third:      1.25;
 
- $perfect-fourth:   1.333;
 
- $augmented-fourth: 1.414;
 
- $perfect-fifth:    1.5;
 
- $minor-sixth:      1.6;
 
- $major-sixth:      1.667;
 
- $minor-seventh:    1.778;
 
- $major-seventh:    1.875;
 
- $octave:           2;
 
- $major-tenth:      2.5;
 
- $major-eleventh:   2.667;
 
- $major-twelfth:    3;
 
- $double-octave:    4;
 
- @function modular-scale($value, $increment, $ratio) {
 
-   $v1: nth($value, 1);
 
-   $v2: nth($value, length($value));
 
-   $value: $v1;
 
-   // scale $v2 to just above $v1
 
-   @while $v2 > $v1 {
 
-     $v2: ($v2 / $ratio); // will be off-by-1
 
-   }
 
-   @while $v2 < $v1 {
 
-     $v2: ($v2 * $ratio); // will fix off-by-1
 
-   }
 
-   // check AFTER scaling $v2 to prevent double-counting corner-case
 
-   $double-stranded: $v2 > $v1;
 
-   @if $increment > 0 {
 
-     @for $i from 1 through $increment {
 
-       @if $double-stranded and ($v1 * $ratio) > $v2 {
 
-         $value: $v2;
 
-         $v2: ($v2 * $ratio);
 
-       } @else {
 
-         $v1: ($v1 * $ratio);
 
-         $value: $v1;
 
-       }
 
-     }
 
-   }
 
-   @if $increment < 0 {
 
-     // adjust $v2 to just below $v1
 
-     @if $double-stranded {
 
-       $v2: ($v2 / $ratio);
 
-     }
 
-     @for $i from $increment through -1 {
 
-       @if $double-stranded and ($v1 / $ratio) < $v2 {
 
-         $value: $v2;
 
-         $v2: ($v2 / $ratio);
 
-       } @else {
 
-         $v1: ($v1 / $ratio);
 
-         $value: $v1;
 
-       }
 
-     }
 
-   }
 
-   @return $value;
 
- }
 
 
  |