Index: frontend/node_modules/postcss-js/parser.js
===================================================================
--- frontend/node_modules/postcss-js/parser.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-js/parser.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,104 @@
+let postcss = require('postcss')
+
+let IMPORTANT = /\s*!important\s*$/i
+
+let UNITLESS = {
+  'box-flex': true,
+  'box-flex-group': true,
+  'column-count': true,
+  'flex': true,
+  'flex-grow': true,
+  'flex-positive': true,
+  'flex-shrink': true,
+  'flex-negative': true,
+  'font-weight': true,
+  'line-clamp': true,
+  'line-height': true,
+  'opacity': true,
+  'order': true,
+  'orphans': true,
+  'tab-size': true,
+  'widows': true,
+  'z-index': true,
+  'zoom': true,
+  'fill-opacity': true,
+  'stroke-dashoffset': true,
+  'stroke-opacity': true,
+  'stroke-width': true
+}
+
+function dashify(str) {
+  return str
+    .replace(/([A-Z])/g, '-$1')
+    .replace(/^ms-/, '-ms-')
+    .toLowerCase()
+}
+
+function decl(parent, name, value) {
+  if (value === false || value === null) return
+
+  if (!name.startsWith('--')) {
+    name = dashify(name)
+  }
+
+  if (typeof value === 'number') {
+    if (value === 0 || UNITLESS[name]) {
+      value = value.toString()
+    } else {
+      value += 'px'
+    }
+  }
+
+  if (name === 'css-float') name = 'float'
+
+  if (IMPORTANT.test(value)) {
+    value = value.replace(IMPORTANT, '')
+    parent.push(postcss.decl({ prop: name, value, important: true }))
+  } else {
+    parent.push(postcss.decl({ prop: name, value }))
+  }
+}
+
+function atRule(parent, parts, value) {
+  let node = postcss.atRule({ name: parts[1], params: parts[3] || '' })
+  if (typeof value === 'object') {
+    node.nodes = []
+    parse(value, node)
+  }
+  parent.push(node)
+}
+
+function parse(obj, parent) {
+  let name, node, value
+  for (name in obj) {
+    value = obj[name]
+    if (value === null || typeof value === 'undefined') {
+      continue
+    } else if (name[0] === '@') {
+      let parts = name.match(/@(\S+)(\s+([\W\w]*)\s*)?/)
+      if (Array.isArray(value)) {
+        for (let i of value) {
+          atRule(parent, parts, i)
+        }
+      } else {
+        atRule(parent, parts, value)
+      }
+    } else if (Array.isArray(value)) {
+      for (let i of value) {
+        decl(parent, name, i)
+      }
+    } else if (typeof value === 'object') {
+      node = postcss.rule({ selector: name })
+      parse(value, node)
+      parent.push(node)
+    } else {
+      decl(parent, name, value)
+    }
+  }
+}
+
+module.exports = function (obj) {
+  let root = postcss.root()
+  parse(obj, root)
+  return root
+}
