$x: global-x;
$y: global-y;
$z: global-z;

@mixin foo($x, $y) {
  /* begin foo */
  margin: $x $y;
  blip {
    hey: now;
  }
  /* end foo */
}

@mixin foogoo($x, $y, $z) {
  margin: $x $y $z;
}

@mixin hux($y) {
  /* begin hux */
  color: $y;
  @include foo(called-from-hux, $y: $y);
  /* end hux */
}

div {
  @include foo(1, 2);
  @include foo(1, 3);
  @include foogoo(1, 2, $z: zee);
  @include foogoo(1, $y /* blah */ : kwd-y, $z: kwd-z);
}

div {
  @include hux($y: $y);
}

$y: different-global-y;

div {
  @include hux(calling-hux-again);
}

@mixin bung() {
  blah: original-bung;
}

div {
  @include bung();
}

@mixin bung() {
  blah: redefined-bung;
}

div {
  @include bung();
}

div {
  /* calls to nullary mixins may omit the empty argument list */
  @include bung;
}

div {
  @include foo($x: kwdarg1, $y: kwdarg2);
}

@mixin ruleset() {
  hoo {
    color: boo;
  }
}

@include ruleset();

$da: default argument;

@mixin default_args($x, $y: $da) {
  blah: $x $y;
}
$da: some other default;

div {
  @include default_args(boogoo);
}

@mixin original() {
  value: original;
}

div {
  @include original();
}

@mixin original() {
  value: no longer original;
}

div {
  @include original();
}

@mixin set-x($x) {
  $x: changed local x;
  arg: $x;
  $y: changed global y !global;
  blarg: $y;
}

div {
  @include set-x(blah);
  a: $x;
  b: $y;
}
