$mp-types: ( mg: margin, pd: padding );
$mp-increments: ( a, 0, 1, 2, 3, 5, 7, 10, 15, 20, 25, 30, 40, 50, 60, 70, 75, 80, 90, 100, 150 );
$mp-axis: (
    x: ( left, right ),
    y: ( top, bottom ),
);
$mp-directions: ( t: top, r: right, b: bottom, l: left );

@function mpVal($val, $mb) {
    $value: if($val == 'a', auto, $val / $mb +em);
    @return $value;
}

@each $type, $declaration in $mp-types {
    .#{$type}\: {
        @include isMedia() using ($mc, $mb){
            // ALL
            @include isList($mp-increments, $mc) using ($size) {
                #{$declaration}: mpVal($size, $mb);
            }
            // X & Y
            @include isMap($mp-axis) using ($key, $axis) {
                @include isList($mp-increments, $mc) using ($size) {
                    @include isProp($axis) using ($side) {
                        #{$declaration}-#{$side}: mpVal($size, $mb);
                    }
                }
            }
            // SIDE
            @include isMap($mp-directions) using ($key, $side) {
                @include isList($mp-increments, $mc) using ($size) {
                    #{$declaration}-#{$side}: mpVal($size, $mb);
                }
            }
        }
    }
}
