module.exports = function (e) {
  var n = "[\\w-]+",
    a = "([\\w-]+|@{[\\w-]+})",
    t = [],
    s = [],
    r = function (e) {
      return { className: "string", begin: "~?" + e + ".*?" + e };
    },
    i = function (e, n, a) {
      return { className: e, begin: n, relevance: a };
    },
    c = { begin: "\\(", end: "\\)", contains: s, relevance: 0 };
  s.push(
    e.C_LINE_COMMENT_MODE,
    e.C_BLOCK_COMMENT_MODE,
    r("'"),
    r('"'),
    e.CSS_NUMBER_MODE,
    {
      begin: "(url|data-uri)\\(",
      starts: { className: "string", end: "[\\)\\n]", excludeEnd: !0 },
    },
    i("number", "#[0-9A-Fa-f]+\\b"),
    c,
    i("variable", "@@?" + n, 10),
    i("variable", "@{[\\w-]+}"),
    i("built_in", "~?`[^`]*?`"),
    {
      className: "attribute",
      begin: n + "\\s*:",
      end: ":",
      returnBegin: !0,
      excludeEnd: !0,
    },
    { className: "meta", begin: "!important" }
  );
  var l = s.concat({ begin: "{", end: "}", contains: t }),
    o = {
      beginKeywords: "when",
      endsWithParent: !0,
      contains: [{ beginKeywords: "and not" }].concat(s),
    },
    d = {
      begin: a + "\\s*:",
      returnBegin: !0,
      end: "[;}]",
      relevance: 0,
      contains: [
        {
          className: "attribute",
          begin: a,
          end: ":",
          excludeEnd: !0,
          starts: {
            endsWithParent: !0,
            illegal: "[<=$]",
            relevance: 0,
            contains: s,
          },
        },
      ],
    },
    b = {
      className: "keyword",
      begin:
        "@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
      starts: { end: "[;{}]", returnEnd: !0, contains: s, relevance: 0 },
    },
    g = {
      className: "variable",
      variants: [{ begin: "@[\\w-]+\\s*:", relevance: 15 }, { begin: "@" + n }],
      starts: { end: "[;}]", returnEnd: !0, contains: l },
    },
    u = {
      variants: [
        { begin: "[\\.#:&\\[>]", end: "[;{}]" },
        { begin: a, end: "{" },
      ],
      returnBegin: !0,
      returnEnd: !0,
      illegal: "[<='$\"]",
      relevance: 0,
      contains: [
        e.C_LINE_COMMENT_MODE,
        e.C_BLOCK_COMMENT_MODE,
        o,
        i("keyword", "all\\b"),
        i("variable", "@{[\\w-]+}"),
        i("selector-tag", a + "%?", 0),
        i("selector-id", "#" + a),
        i("selector-class", "\\." + a, 0),
        i("selector-tag", "&", 0),
        { className: "selector-attr", begin: "\\[", end: "\\]" },
        {
          className: "selector-pseudo",
          begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/,
        },
        { begin: "\\(", end: "\\)", contains: l },
        { begin: "!important" },
      ],
    };
  return (
    t.push(e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, b, g, d, u),
    { case_insensitive: !0, illegal: "[=>'/<($\"]", contains: t }
  );
};
