==============================
Import statements
==============================

@import url("fineprint.css") print;
@import url("bluish.css") speech;
@import 'custom.css';
@import url("chrome://communicator/skin/");
@import "common.css" screen;

---

(stylesheet
  (import_statement (call_expression (function_name) (arguments (string_value (string_content)))) (keyword_query))
  (import_statement (call_expression (function_name) (arguments (string_value (string_content)))) (keyword_query))
  (import_statement (string_value (string_content)))
  (import_statement (call_expression (function_name) (arguments (string_value (string_content)))))
  (import_statement (string_value (string_content)) (keyword_query)))

==============================
Namespace statements
==============================

/* Default namespace */
@namespace url(XML-namespace-URL);
@namespace "XML-namespace-URL";
@namespace url(http://www.w3.org/1999/xhtml);
@namespace svg url(http://www.w3.org/2000/svg);

/* Prefixed namespace */
@namespace prefix url(XML-namespace-URL);
@namespace prefix "XML-namespace-URL";

---

(stylesheet
  (comment)
  (namespace_statement (call_expression (function_name) (arguments (plain_value))))
  (namespace_statement (string_value (string_content)))
  (namespace_statement (call_expression (function_name) (arguments (plain_value))))
  (namespace_statement (namespace_name) (call_expression (function_name) (arguments (plain_value))))
  (comment)
  (namespace_statement (namespace_name) (call_expression (function_name) (arguments (plain_value))))
  (namespace_statement (namespace_name) (string_value (string_content))))

==============================
Keyframes statements
==============================

@keyframes important1 {
  from { margin-top: 50px; }
  50%  { margin-top: 150px !important; } /* ignored */
  to   { margin-top: 100px; }
}

@keyframes hello {
  0%, 50% {}
}

---

(stylesheet
  (keyframes_statement (keyframes_name) (keyframe_block_list
    (keyframe_block (from) (block (declaration (property_name) (integer_value (unit)))))
    (keyframe_block (integer_value (unit)) (block (declaration (property_name) (integer_value (unit)) (important))))
    (comment)
    (keyframe_block (to) (block (declaration (property_name) (integer_value (unit)))))))
  (keyframes_statement (keyframes_name) (keyframe_block_list
    (keyframe_block (integer_value (unit)) (integer_value (unit)) (block)))))

==============================
Media statements
==============================

@media screen and (min-width: 30em) and (orientation: landscape) {}
@media (min-height: 680px), screen and (orientation: portrait) {}
@media not all and (monochrome) {}
@media only screen {}
@media screen and (min-width: 0 0) {
    .tooltipped-multiline: after {}
}

---

(stylesheet
  (media_statement
    (binary_query
      (binary_query
        (keyword_query)
        (feature_query (feature_name) (integer_value (unit))))
      (feature_query (feature_name) (plain_value)))
    (block))
  (media_statement
    (feature_query (feature_name) (integer_value (unit)))
    (binary_query (keyword_query) (feature_query (feature_name) (plain_value)))
    (block))
  (media_statement
    (binary_query (unary_query (keyword_query)) (parenthesized_query (keyword_query)))
    (block))
  (media_statement (unary_query (keyword_query)) (block))
  (media_statement
    (binary_query
      (keyword_query)
      (feature_query (feature_name) (integer_value) (integer_value)))
    (block
      (rule_set
        (selectors (pseudo_class_selector (class_selector (class_name (identifier))) (class_name (identifier))))
        (block)))))

==============================
Supports statements
==============================

@supports (animation-name: test) {
  div { animation-name: test; }
}
@supports (transform-style: preserve) or (-moz-transform-style: preserve) {}
@supports not ((text-align-last: justify) or (-moz-text-align-last: justify)) {}
@supports not selector(:matches(a, b)) {}

---

(stylesheet
  (supports_statement
    (feature_query (feature_name) (plain_value))
    (block
      (rule_set (selectors (tag_name)) (block
        (declaration (property_name) (plain_value))))))
  (supports_statement
    (binary_query
      (feature_query (feature_name) (plain_value))
      (feature_query (feature_name) (plain_value)))
    (block))
  (supports_statement
    (unary_query (parenthesized_query (binary_query
      (feature_query (feature_name) (plain_value))
      (feature_query (feature_name) (plain_value)))))
    (block))
  (supports_statement
    (unary_query (selector_query (pseudo_class_selector
      (class_name (identifier))
      (arguments (tag_name) (tag_name)))))
    (block)))

==============================
Charset statements
==============================

@charset "utf-8";

---

(stylesheet
  (charset_statement (string_value (string_content))))

==============================
Scope statements
==============================

@scope (.card) {
  h1 {
    color: blue;
  }
}

@scope (.article-body) to (figure) {
  img {
    border: 5px solid black;
  }
}

---

(stylesheet
  (scope_statement
    (class_selector (class_name (identifier)))
    (block
      (rule_set (selectors (tag_name))
        (block
          (declaration (property_name) (plain_value))))))
  (scope_statement
    (class_selector (class_name (identifier)))
    (tag_name)
    (block
      (rule_set (selectors (tag_name))
        (block
          (declaration (property_name) (integer_value (unit)) (plain_value) (plain_value)))))))

==============================
Other at-statements
==============================

@font-face {
  font-family: "Open Sans";
  src: url("/a") format("woff2"), url("/b/c") format("woff");
}

---

(stylesheet
  (at_rule
    (at_keyword)
    (block
      (declaration (property_name) (string_value (string_content)))
      (declaration (property_name)
        (call_expression (function_name) (arguments (string_value (string_content))))
        (call_expression (function_name) (arguments (string_value (string_content))))
        (call_expression (function_name) (arguments (string_value (string_content))))
        (call_expression (function_name) (arguments (string_value (string_content))))))))
