Index: frontend/node_modules/cssnano-utils/LICENSE
===================================================================
--- frontend/node_modules/cssnano-utils/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,22 @@
+Copyright (c) Ben Briggs <beneb.info@gmail.com> (http://beneb.info)
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
Index: frontend/node_modules/cssnano-utils/README.md
===================================================================
--- frontend/node_modules/cssnano-utils/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+# cssnano-utils
+
+Utility methods and plugin for cssnano projects
+
+## List of methods and plugin(s)
+
+| **utility methods** | **description**                                                           |
+| ------------------- | ------------------------------------------------------------------------- |
+| `rawCache`          | Postcss plugin to manage the raw value formatting for generated AST nodes |
+| `getArguments`      | Get a list of arguments, separated by a comma.                            |
+| `sameParent`        | Check that two PostCSS nodes share the same parent.                       |
+
+## Contributors
+
+See [CONTRIBUTORS.md](https://github.com/cssnano/cssnano/blob/master/CONTRIBUTORS.md).
Index: frontend/node_modules/cssnano-utils/package.json
===================================================================
--- frontend/node_modules/cssnano-utils/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+{
+  "name": "cssnano-utils",
+  "version": "3.1.0",
+  "repository": "cssnano/cssnano",
+  "main": "src/index.js",
+  "types": "types/index.d.ts",
+  "description": "Utility methods and plugin for cssnano projects",
+  "homepage": "https://github.com/cssnano/cssnano",
+  "bugs": {
+    "url": "https://github.com/cssnano/cssnano/issues"
+  },
+  "engines": {
+    "node": "^10 || ^12 || >=14.0"
+  },
+  "files": [
+    "src",
+    "LICENSE",
+    "types"
+  ],
+  "license": "MIT",
+  "devDependencies": {
+    "postcss": "^8.2.15"
+  },
+  "peerDependencies": {
+    "postcss": "^8.2.15"
+  },
+  "readme": "# cssnano-utils\n\nUtility methods and plugin for cssnano projects\n\n## List of methods and plugin(s)\n\n| **utility methods** | **description**                                                           |\n| ------------------- | ------------------------------------------------------------------------- |\n| `rawCache`          | Postcss plugin to manage the raw value formatting for generated AST nodes |\n| `getArguments`      | Get a list of arguments, separated by a comma.                            |\n| `sameParent`        | Check that two PostCSS nodes share the same parent.                       |\n\n## Contributors\n\nSee [CONTRIBUTORS.md](https://github.com/cssnano/cssnano/blob/master/CONTRIBUTORS.md).\n"
+}
Index: frontend/node_modules/cssnano-utils/src/getArguments.js
===================================================================
--- frontend/node_modules/cssnano-utils/src/getArguments.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/src/getArguments.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+'use strict';
+/**
+ * Extracts the arguments of a CSS function or AtRule.
+ *
+ * @param {import('postcss-value-parser').ParsedValue | import('postcss-value-parser').FunctionNode} node
+ * @return {import('postcss-value-parser').Node[][]}
+ */
+module.exports = function getArguments(node) {
+  /** @type {import('postcss-value-parser').Node[][]} */
+  const list = [[]];
+  for (const child of node.nodes) {
+    if (child.type !== 'div') {
+      list[list.length - 1].push(child);
+    } else {
+      list.push([]);
+    }
+  }
+  return list;
+};
Index: frontend/node_modules/cssnano-utils/src/index.js
===================================================================
--- frontend/node_modules/cssnano-utils/src/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/src/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,6 @@
+'use strict';
+const rawCache = require('./rawCache.js');
+const getArguments = require('./getArguments.js');
+const sameParent = require('./sameParent.js');
+
+module.exports = { rawCache, getArguments, sameParent };
Index: frontend/node_modules/cssnano-utils/src/rawCache.js
===================================================================
--- frontend/node_modules/cssnano-utils/src/rawCache.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/src/rawCache.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,34 @@
+'use strict';
+
+/**
+ * @type {import('postcss').PluginCreator<void>}
+ * @return {import('postcss').Plugin}
+ */
+function pluginCreator() {
+  return {
+    postcssPlugin: 'cssnano-util-raw-cache',
+    /**
+     * @param {import('postcss').Root} css
+     * @param {{result: import('postcss').Result & {root: {rawCache?: any}}}} arg
+     */
+    OnceExit(css, { result }) {
+      result.root.rawCache = {
+        colon: ':',
+        indent: '',
+        beforeDecl: '',
+        beforeRule: '',
+        beforeOpen: '',
+        beforeClose: '',
+        beforeComment: '',
+        after: '',
+        emptyBody: '',
+        commentLeft: '',
+        commentRight: '',
+      };
+    },
+  };
+}
+
+pluginCreator.postcss = true;
+
+module.exports = pluginCreator;
Index: frontend/node_modules/cssnano-utils/src/sameParent.js
===================================================================
--- frontend/node_modules/cssnano-utils/src/sameParent.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/src/sameParent.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,44 @@
+'use strict';
+
+/**
+ * @param {import('postcss').AnyNode} nodeA
+ * @param {import('postcss').AnyNode} nodeB
+ * @return {boolean}
+ */
+function checkMatch(nodeA, nodeB) {
+  if (nodeA.type === 'atrule' && nodeB.type === 'atrule') {
+    return (
+      nodeA.params === nodeB.params &&
+      nodeA.name.toLowerCase() === nodeB.name.toLowerCase()
+    );
+  }
+  return nodeA.type === nodeB.type;
+}
+
+/** @typedef {import('postcss').AnyNode & {parent?: Child}} Child */
+/**
+ * @param {Child} nodeA
+ * @param {Child} nodeB
+ * @return {boolean}
+ */
+function sameParent(nodeA, nodeB) {
+  if (!nodeA.parent) {
+    // A is orphaned, return if B is orphaned as well
+    return !nodeB.parent;
+  }
+
+  if (!nodeB.parent) {
+    // B is orphaned and A is not
+    return false;
+  }
+
+  // Check if parents match
+  if (!checkMatch(nodeA.parent, nodeB.parent)) {
+    return false;
+  }
+
+  // Check parents' parents
+  return sameParent(nodeA.parent, nodeB.parent);
+}
+
+module.exports = sameParent;
Index: frontend/node_modules/cssnano-utils/types/getArguments.d.ts
===================================================================
--- frontend/node_modules/cssnano-utils/types/getArguments.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/types/getArguments.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+declare function _exports(node: import('postcss-value-parser').ParsedValue | import('postcss-value-parser').FunctionNode): import('postcss-value-parser').Node[][];
+export = _exports;
Index: frontend/node_modules/cssnano-utils/types/index.d.ts
===================================================================
--- frontend/node_modules/cssnano-utils/types/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/types/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+import rawCache = require("./rawCache.js");
+import getArguments = require("./getArguments.js");
+import sameParent = require("./sameParent.js");
+export { rawCache, getArguments, sameParent };
Index: frontend/node_modules/cssnano-utils/types/rawCache.d.ts
===================================================================
--- frontend/node_modules/cssnano-utils/types/rawCache.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/types/rawCache.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+export = pluginCreator;
+/**
+ * @type {import('postcss').PluginCreator<void>}
+ * @return {import('postcss').Plugin}
+ */
+declare function pluginCreator(): import('postcss').Plugin;
+declare namespace pluginCreator {
+    const postcss: true;
+}
Index: frontend/node_modules/cssnano-utils/types/sameParent.d.ts
===================================================================
--- frontend/node_modules/cssnano-utils/types/sameParent.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/cssnano-utils/types/sameParent.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+export = sameParent;
+/** @typedef {import('postcss').AnyNode & {parent?: Child}} Child */
+/**
+ * @param {Child} nodeA
+ * @param {Child} nodeB
+ * @return {boolean}
+ */
+declare function sameParent(nodeA: Child, nodeB: Child): boolean;
+declare namespace sameParent {
+    export { Child };
+}
+type Child = import('postcss').AnyNode & {
+    parent?: Child;
+};
