// importing plugin globally
@plugin "./plugin/plugin-global";

// transitively include plugins from importing another sheet
@import "./plugin/plugin-transitive";


// `test-global` function should be reachable
// `test-local`  function should not be reachable
// `test-shadow` function should return global version
.class {
  trans  : test-transitive();
  global : test-global();
  local  : test-local();
  shadow : test-shadow();

  // `test-global` function should propagate and be reachable
  // `test-local`  function should be reachable
  // `test-shadow` function should return local version, shadowing global version
  .local {
    @plugin "./plugin/plugin-local";
    global : test-global();
    local  : test-local();
    shadow : test-shadow();
  }
}

// calling a mixin or detached ruleset should not bubble local plugins
// imported inside either into the parent scope.
.mixin() {
  @plugin "./plugin/plugin-local";
  mixin-local  : test-local();
  mixin-global : test-global();
  mixin-shadow : test-shadow();
}
@ruleset : {
  @plugin "./plugin/plugin-local";
  ruleset-local  : test-local();
  ruleset-global : test-global();
  ruleset-shadow : test-shadow();
};
#ns {
  @plugin "./plugin/plugin-local";
  .mixin() {
    ns-mixin-global : test-global();
    ns-mixin-local  : test-local();
    ns-mixin-shadow : test-shadow();
  }
}
.class {
  #ns > .mixin();
  .mixin();
  @ruleset();
  class-local : test-local();
}


// `test-global` function should propagate into directive scope
@media screen {
  .test {
    result : test-global();
  }
}
@font-face {
  result : test-global();
}

// `test-global` function should propagate into nested directive scopes
@media screen and (min-width:100px) {
  @media (max-width:400px) {
		.test {
			result : test-global();
		}
	}
}

.test {
  @media screen {
    @plugin "./plugin/plugin-local";
    result : test-local();
  }
}

@plugin "./plugin/plugin-tree-nodes";
@ruleset2: test-detached-ruleset();
.root {
  @ruleset2();
}

test-directive("@charset"; '"utf-8"');
test-directive("@arbitrary"; "value after ()");