//
// Positions
//

@mixin position($position, $args: ()) {
  $offsets: top right bottom left;
  position: $position;

  @each $offset in $offsets {
    $index: index($args, $offset);

    @if $index {
      @if $index == length($args) {
        #{$offset}: 0;
      }
      @else {
        $next: nth($args, $index + 1);
        @if is-valid-length($next) {
          @include px-to-rem(#{$offset}, $next);
        }
        @else if index($offsets, $next) {
          #{$offset}: 0;
        }
        @else {
          @warn "Invalid value '#{$next}'' for offset '#{$offset}'.";
        }
      }
    }
  }
}
@function is-valid-length($value) {
  @return (type-of($value) == "number" and not unitless($value))
    or (index(auto initial inherit 0, $value) != false);
}
@mixin absolute($args: ()) {
  @include position(absolute, $args);
}
@mixin fixed($args: ()) {
  @include position(fixed, $args);
}
@mixin relative($args: ()) {
  @include position(relative, $args);
}