@x: red;
@x: blue;
@z: transparent;
@mix: none;

.mixin {
  @mix: #989;
}
@mix: blue;
.tiny-scope {
  color: @mix; // #989
  .mixin;
}

.scope1 {
  @y: orange;
  @z: black;
  color: @x; // blue
  border-color: @z; // black
  .hidden {
    @x: #131313;
  }
  .scope2 {
    @y: red;
    color: @x; // blue
    .scope3 {
      @local: white;
      color: @y; // red
      border-color: @z; // black
      background-color: @local; // white
    }
  }
}

#namespace {
  .scoped_mixin() {
    @local-will-be-made-global: green;
    .scope {
      scoped-val: @local-will-be-made-global;
	}
  }
}

#namespace > .scoped_mixin();

.setHeight(@h) { @height: 1024px; }
.useHeightInMixinCall(@h) { .useHeightInMixinCall { mixin-height: @h; } }
@mainHeight: 50%;
.setHeight(@mainHeight);
.heightIsSet { height: @height; }
.useHeightInMixinCall(@height);

.importRuleset() {
  .imported {
    exists: true;
  }
}
.importRuleset();
.testImported {
  .imported;
}

@parameterDefault: 'top level';
@anotherVariable: 'top level';
//mixin uses top-level variables
.mixinNoParam(@parameter: @parameterDefault) when (@parameter = 'top level') {
  default: @parameter;
  scope: @anotherVariable;
  sub-scope-only: @subScopeOnly;
}

#allAreUsedHere {
  //redefine top-level variables in different scope
  @parameterDefault: 'inside';
  @anotherVariable: 'inside';
  @subScopeOnly: 'inside';
  //use the mixin
  .mixinNoParam();
}
#parentSelectorScope {
  @col: white;
  & {
    @col: black;
  }
  prop: @col;
  & {
    @col: black;
  }
}
.test-empty-mixin() {
}
#parentSelectorScopeMixins {
  & {
    .test-empty-mixin() {
      should: never seee 1;
    }
  }
  .test-empty-mixin();
  & {
    .test-empty-mixin() {
      should: never seee 2;
    }
  }
}