Index: frontend/node_modules/postcss-custom-media/CHANGELOG.md
===================================================================
--- frontend/node_modules/postcss-custom-media/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-custom-media/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,118 @@
+# Changes to PostCSS Custom Media
+
+### 8.0.2 (June 4, 2022)
+
+- Fixed: dependency declarations in package.json
+
+### 8.0.1 (June 3, 2022)
+
+- Updated: use specific AtRule visitor
+- Fixed: allow any valid ident in custom media (`@custom-media --🧑🏾‍🎤 (min-width: 320px);`)
+- Fixed: allow white space around custom media (`@media ( --mq-1   );`) (https://github.com/csstools/postcss-custom-media/pull/59) (https://github.com/csstools/postcss-custom-media/pull/71)
+
+### 8.0.0 (January 12, 2021)
+
+- Added: Support for PostCSS v8
+
+### 7.0.8 (March 30, 2019)
+
+- Fixed: Issue importing from `.pcss` files
+- Updated: `postcss` to 7.0.14 (patch)
+
+### 7.0.7 (October 19, 2018)
+
+- Fixed: Issue combining custom media media queries with `and`
+
+### 7.0.6 (October 12, 2018)
+
+- Fixed: Issue combining multiple custom media
+
+### 7.0.5 (October 5, 2018)
+
+- Fixed: Possible issues resolving paths to imports and exports
+- Added: Imports from `customMedia` and `custom-media` simultaneously
+- Updated: `postcss` to 7.0.5
+
+### 7.0.4 (September 23, 2018)
+
+- Added: `importFromPlugins` option to process imports
+
+### 7.0.3 (September 20, 2018)
+
+- Fixed: Do not break on an empty `importFrom` object
+
+### 7.0.2 (September 15, 2018)
+
+- Fixed: An issue with re-assigning params as a non-string
+
+### 7.0.1 (September 14, 2018)
+
+- Fixed: An issue with how opposing queries are resolved.
+
+### 7.0.0 (September 14, 2018)
+
+- Added: New `preserve` option to preserve custom media and atrules using them
+- Added: New `exportTo` function to specify where to export custom media
+- Added: New `importFrom` option to specify where to import custom media
+- Added: Support for PostCSS v7
+- Added: Support for Node v6+
+
+# 6.0.0 (May 12, 2017)
+
+- Added: compatibility with postcss v6.x
+
+# 5.0.1 (February 3, 2016)
+
+- Fixed: circular dependencies are properly detected
+(https://github.com/postcss/postcss-custom-media/pull/17)
+
+# 5.0.0 (August 25, 2015)
+
+- Removed: compatibility with postcss v4.x
+- Added: compatibility with postcss v5.x
+
+# 4.1.0 (06 30, 2015)
+
+- Added: Allow custom media to reference each other
+(https://github.com/postcss/postcss-custom-media/pull/10)
+
+# 4.0.0 (May 17, 2015)
+
+- Changed: warning messages are now sent via postcss messages api (^4.1.0)
+- Added: automatic custom media `--` prefixing
+(https://github.com/postcss/postcss-custom-media/issues/11)
+- Added: `preserve` allows you to preserve custom media query defintions
+- Added: `appendExtensions` allows you (when `preserve` is truthy) to append your extensions as media queries
+
+# 3.0.0 (January 29, 2015)
+
+- Added: compatibility with postcss v4.x
+- Removed: compatibility with postcss v3.x
+
+# 2.0.0 [Yanked]
+
+_You never saw this version (this is a bad release that points to 1.0.0)._
+
+# 1.3.0 (November 25, 2014)
+
+- Changed: better gnu message
+
+# 1.2.1 (October 9, 2014)
+
+- Fixed: npm description
+
+# 1.2.0 (October 1, 2014)
+
+- Added: support for multiples media in query list (ref https://github.com/reworkcss/rework-custom-media/pull/5)
+
+# 1.1.0 (September 30, 2014)
+
+- Added: support for js-defined media queries (fix https://github.com/postcss/postcss-custom-media/issues/3)
+
+# 1.0.1 (September 16, 2014)
+
+- Added: Allow whitespace around custom media name (fix https://github.com/postcss/postcss-custom-media/issues/2)
+
+# 1.0.0 (August 12, 2014)
+
+✨ First release based on https://github.com/reworkcss/rework-custom-media v0.1.1
Index: frontend/node_modules/postcss-custom-media/LICENSE.md
===================================================================
--- frontend/node_modules/postcss-custom-media/LICENSE.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-custom-media/LICENSE.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+# The MIT License (MIT)
+
+Copyright © PostCSS
+
+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/postcss-custom-media/README.md
===================================================================
--- frontend/node_modules/postcss-custom-media/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-custom-media/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,171 @@
+# PostCSS Custom Media [<img src="https://postcss.github.io/postcss/logo.svg" alt="PostCSS Logo" width="90" height="90" align="right">][postcss]
+
+[<img alt="npm version" src="https://img.shields.io/npm/v/postcss-custom-media.svg" height="20">][npm-url] [<img alt="CSS Standard Status" src="https://cssdb.org/images/badges/custom-media-queries.svg" height="20">][css-url] [<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/workflows/test/badge.svg" height="20">][cli-url] [<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
+
+[PostCSS Custom Media] lets you define `@custom-media` in CSS following the [Custom Media Specification].
+
+```pcss
+@custom-media --small-viewport (max-width: 30em);
+
+@media (--small-viewport) {
+	/* styles for small viewport */
+}
+
+/* becomes */
+
+@media (max-width: 30em) {
+	/* styles for small viewport */
+}
+```
+
+## Usage
+
+Add [PostCSS Custom Media] to your project:
+
+```bash
+npm install postcss postcss-custom-media --save-dev
+```
+
+Use it as a [PostCSS] plugin:
+
+```js
+const postcss = require('postcss');
+const postcssCustomMedia = require('postcss-custom-media');
+
+postcss([
+	postcssCustomMedia(/* pluginOptions */)
+]).process(YOUR_CSS /*, processOptions */);
+```
+
+[PostCSS Custom Media] runs in all Node environments, with special
+instructions for:
+
+| [Node](INSTALL.md#node) | [PostCSS CLI](INSTALL.md#postcss-cli) | [Webpack](INSTALL.md#webpack) | [Create React App](INSTALL.md#create-react-app) | [Gulp](INSTALL.md#gulp) | [Grunt](INSTALL.md#grunt) |
+| --- | --- | --- | --- | --- | --- |
+
+## Options
+
+### preserve
+
+The `preserve` option determines whether the original notation
+is preserved. By default, it is not preserved.
+
+```js
+postcssCustomMedia({ preserve: true })
+```
+
+```pcss
+@custom-media --small-viewport (max-width: 30em);
+
+@media (--small-viewport) {
+	/* styles for small viewport */
+}
+
+/* becomes */
+
+@custom-media --small-viewport (max-width: 30em);
+
+@media (max-width: 30em) {
+	/* styles for small viewport */
+}
+
+@media (--small-viewport) {
+	/* styles for small viewport */
+}
+```
+
+
+### importFrom
+
+The `importFrom` option specifies sources where custom media can be imported
+from, which might be CSS, JS, and JSON files, functions, and directly passed
+objects.
+
+```js
+postcssCustomMedia({
+	importFrom: 'path/to/file.css' // => @custom-selector --small-viewport (max-width: 30em);
+});
+```
+
+```pcss
+@media (max-width: 30em) {
+	/* styles for small viewport */
+}
+
+@media (--small-viewport) {
+	/* styles for small viewport */
+}
+```
+
+Multiple sources can be passed into this option, and they will be parsed in the
+order they are received. JavaScript files, JSON files, functions, and objects
+will need to namespace custom media using the `customMedia` or
+`custom-media` key.
+
+```js
+postcssCustomMedia({
+	importFrom: [
+		'path/to/file.css',
+		'and/then/this.js',
+		'and/then/that.json',
+		{
+			customMedia: { '--small-viewport': '(max-width: 30em)' }
+		},
+		() => {
+			const customMedia = { '--small-viewport': '(max-width: 30em)' };
+
+			return { customMedia };
+		}
+	]
+});
+```
+
+### exportTo
+
+The `exportTo` option specifies destinations where custom media can be exported
+to, which might be CSS, JS, and JSON files, functions, and directly passed
+objects.
+
+```js
+postcssCustomMedia({
+	exportTo: 'path/to/file.css' // @custom-media --small-viewport (max-width: 30em);
+});
+```
+
+Multiple destinations can be passed into this option, and they will be parsed
+in the order they are received. JavaScript files, JSON files, and objects will
+need to namespace custom media using the `customMedia` or
+`custom-media` key.
+
+```js
+const cachedObject = { customMedia: {} };
+
+postcssCustomMedia({
+	exportTo: [
+		'path/to/file.css',   // @custom-media --small-viewport (max-width: 30em);
+		'and/then/this.js',   // module.exports = { customMedia: { '--small-viewport': '(max-width: 30em)' } }
+		'and/then/this.mjs',  // export const customMedia = { '--small-viewport': '(max-width: 30em)' } }
+		'and/then/that.json', // { "custom-media": { "--small-viewport": "(max-width: 30em)" } }
+		cachedObject,
+		customMedia => {
+			customMedia    // { '--small-viewport': '(max-width: 30em)' }
+		}
+	]
+});
+```
+
+See example exports written to [CSS](test/export-media.css),
+[JS](test/export-media.js), [MJS](test/export-media.mjs), and
+[JSON](test/export-media.json).
+
+[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
+[css-url]: https://cssdb.org/#custom-media-queries
+[discord]: https://discord.gg/bUadyRwkJS
+[npm-url]: https://www.npmjs.com/package/postcss-custom-media
+
+[Gulp PostCSS]: https://github.com/postcss/gulp-postcss
+[Grunt PostCSS]: https://github.com/nDmitry/grunt-postcss
+[PostCSS]: https://github.com/postcss/postcss
+[PostCSS Loader]: https://github.com/postcss/postcss-loader
+[PostCSS Custom Media]: https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-custom-media
+[Custom Media Specification]: https://www.w3.org/TR/mediaqueries-5/#at-ruledef-custom-media
Index: frontend/node_modules/postcss-custom-media/dist/index.cjs
===================================================================
--- frontend/node_modules/postcss-custom-media/dist/index.cjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-custom-media/dist/index.cjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+"use strict";var e=require("postcss-value-parser"),t=require("fs"),n=require("path"),s=require("postcss");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var s=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var i=r(e),a=r(t),c=r(n);function u(e,t){const n=[];let s="",r=!1,o=0,i=-1;for(;++i<e.length;){const a=e[i];"("===a?o+=1:")"===a?o>0&&(o-=1):0===o&&(t&&p.test(s+a)?r=!0:t||","!==a||(r=!0)),r?(n.push(t?new l(s+a):new d(s)),s="",r=!1):s+=a}return""!==s&&n.push(t?new l(s):new d(s)),n}class f{constructor(e){this.nodes=u(e)}invert(){return this.nodes.forEach((e=>{e.invert()})),this}clone(){return new f(String(this))}toString(){return this.nodes.join(",")}}class d{constructor(e){const[,t,n,s]=e.match(m),[,r="",o=" ",i="",a="",c="",f="",d="",l=""]=n.match(w)||[],p={before:t,after:s,afterModifier:o,originalModifier:r||"",beforeAnd:a,and:c,beforeExpression:f},h=u(d||l,!0);Object.assign(this,{modifier:r,type:i,raws:p,nodes:h})}clone(e){const t=new d(String(this));return Object.assign(t,e),t}invert(){return this.modifier=this.modifier?"":this.raws.originalModifier,this}toString(){const{raws:e}=this;return`${e.before}${this.modifier}${this.modifier?`${e.afterModifier}`:""}${this.type}${e.beforeAnd}${e.and}${e.beforeExpression}${this.nodes.join("")}${this.raws.after}`}}class l{constructor(e){const[,t,n="",s="",r=""]=e.match(p)||[null,e],o={after:n,and:s,afterAnd:r};Object.assign(this,{value:t,raws:o})}clone(e){const t=new l(String(this));return Object.assign(t,e),t}toString(){const{raws:e}=this;return`${this.value}${e.after}${e.and}${e.afterAnd}`}}const p=new RegExp("^([\\W\\w]+)(?:(?:(\\s+)(and))(\\s+))$","i"),m=new RegExp("^(\\s*)([\\W\\w]*)(\\s*)$"),w=new RegExp("^(?:(not|only)(\\s+))?(?:(all|print|screen|speech)(?:(?:(\\s+)(and))(\\s+)([\\W\\w]+))?|([\\W\\w]+))$","i");var h=e=>new f(e),g=(e,t)=>{const n={};return e.nodes.slice().forEach((e=>{if("atrule"!==e.type)return;if("custom-media"!==e.name.toLowerCase())return;let s=null;try{s=i.default(e.params)}catch(e){return}if(!s||!s.nodes||!s.nodes.length)return;let r=-1;for(let e=0;e<s.nodes.length;e++){const t=s.nodes[e];if("space"!==t.type&&"comment"!==t.type){if("word"===t.type&&t.value.startsWith("--")){r=e;break}return}}if(r<0)return;const o=s.nodes[r].value.trim(),a=i.default.stringify(s.nodes.slice(r+1)).trim();n[o]=h(a),Object(t).preserve||e.remove()})),n};function b(e){const t=Object.assign({},Object(e).customMedia,Object(e)["custom-media"]);for(const e in t)t[e]=h(t[e]);return t}function y(e){return e.map((e=>{if(e instanceof Promise)return e;if(e instanceof Function)return e();const t=e===Object(e)?e:{from:String(e)};if(Object(t).customMedia||Object(t)["custom-media"])return t;const n=c.default.resolve(String(t.from||""));return{type:(t.type||c.default.extname(n).slice(1)).toLowerCase(),from:n}})).reduce((async(e,t)=>{const{type:n,from:r}=await t;return"css"===n||"pcss"===n?Object.assign(await e,await async function(e){const t=await j(e),n=s.parse(t,{from:e});return g(n,{preserve:!0})}(r)):"js"===n?Object.assign(await e,await async function(e){var t;return b(await(t=e,Promise.resolve().then((function(){return o(require(t))}))))}(r)):"json"===n?Object.assign(await e,await async function(e){return b(await O(e))}(r)):Object.assign(await e,b(await t))}),{})}const j=e=>new Promise(((t,n)=>{a.default.readFile(e,"utf8",((e,s)=>{e?n(e):t(s)}))})),O=async e=>JSON.parse(await j(e));function v(e){if(!e)return;let t=null;try{t=i.default(e)}catch(e){return}if(!t||!t.nodes||!t.nodes.length)return;if(1!==t.nodes.length)return;for(;"function"===t.nodes[0].type&&""===t.nodes[0].value;)t=t.nodes[0];let n=-1;for(let e=0;e<t.nodes.length;e++){const s=t.nodes[e];if("space"!==s.type&&"comment"!==s.type){if("word"===s.type&&s.value.startsWith("--")){n=e;break}return}}return n<0?void 0:t.nodes[n].value.trim()}function $(e,t){let n=e.nodes.length-1;for(;n>=0;){const s=S(e.nodes[n],t);s.length&&e.nodes.splice(n,1,...s),--n}return e}function S(e,t){const n=[];for(const s in e.nodes){const{value:r,nodes:o}=e.nodes[s],i=v(r);if(i&&i in t){for(const r of t[i].nodes){const o=e.modifier!==r.modifier?e.modifier||r.modifier:"",a=e.clone({modifier:o,raws:!o||e.modifier?{...e.raws}:{...r.raws},type:e.type||r.type});a.type===r.type&&Object.assign(a.raws,{and:r.raws.and,beforeAnd:r.raws.beforeAnd,beforeExpression:r.raws.beforeExpression}),a.nodes.splice(s,1,...r.clone().nodes.map((t=>(e.nodes[s].raws.and&&(t.raws={...e.nodes[s].raws}),t.spaces={...e.nodes[s].spaces},t))));const c=S(a,x(t,i));c.length?n.push(...c):n.push(a)}return n}o&&o.length&&$(e.nodes[s],t)}return n}const x=(e,t)=>{const n=Object.assign({},e);return delete n[t],n};function M(e,t){return Promise.all(t.map((async t=>{if(t instanceof Function)await t(E(e));else{const n=t===Object(t)?t:{to:String(t)},s=n.toJSON||E;if("customMedia"in n)n.customMedia=s(e);else if("custom-media"in n)n["custom-media"]=s(e);else{const t=String(n.to||""),r=(n.type||c.default.extname(t).slice(1)).toLowerCase(),o=s(e);"css"===r&&await async function(e,t){const n=`${Object.keys(t).reduce(((e,n)=>(e.push(`@custom-media ${n} ${t[n]};`),e)),[]).join("\n")}\n`;await P(e,n)}(t,o),"js"===r&&await async function(e,t){const n=`module.exports = {\n\tcustomMedia: {\n${Object.keys(t).reduce(((e,n)=>(e.push(`\t\t'${k(n)}': '${k(t[n])}'`),e)),[]).join(",\n")}\n\t}\n};\n`;await P(e,n)}(t,o),"json"===r&&await async function(e,t){const n=`${JSON.stringify({"custom-media":t},null,"\t")}\n`;await P(e,n)}(t,o),"mjs"===r&&await async function(e,t){const n=`export const customMedia = {\n${Object.keys(t).reduce(((e,n)=>(e.push(`\t'${k(n)}': '${k(t[n])}'`),e)),[]).join(",\n")}\n};\n`;await P(e,n)}(t,o)}}})))}const E=e=>Object.keys(e).reduce(((t,n)=>(t[n]=String(e[n]),t)),{}),P=(e,t)=>new Promise(((n,s)=>{a.default.writeFile(e,t,(e=>{e?s(e):n()}))})),k=e=>e.replace(/\\([\s\S])|(')/g,"\\$1$2").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),A=e=>{const t="preserve"in Object(e)&&Boolean(e.preserve),n=[].concat(Object(e).importFrom||[]),s=[].concat(Object(e).exportTo||[]),r=y(n),o=Symbol("customMediaHelper");return{postcssPlugin:"postcss-custom-media",Once:async(e,n)=>{n[o]=Object.assign(await r,g(e,{preserve:t})),await M(n[o],s)},AtRule:(e,n)=>{"media"===e.name&&((e,t,{preserve:n})=>{if(e.params.indexOf("--")>-1){const s=h(e.params),r=String($(s,t));if(null===r)return;if(r===e.params)return;e.cloneBefore({params:r}),n||e.remove()}})(e,n[o],{preserve:t})}}};A.postcss=!0,module.exports=A;
Index: frontend/node_modules/postcss-custom-media/dist/index.mjs
===================================================================
--- frontend/node_modules/postcss-custom-media/dist/index.mjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-custom-media/dist/index.mjs	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+import e from"postcss-value-parser";import t from"fs";import n from"path";import{parse as s}from"postcss";function r(e,t){const n=[];let s="",r=!1,o=0,u=-1;for(;++u<e.length;){const f=e[u];"("===f?o+=1:")"===f?o>0&&(o-=1):0===o&&(t&&c.test(s+f)?r=!0:t||","!==f||(r=!0)),r?(n.push(t?new a(s+f):new i(s)),s="",r=!1):s+=f}return""!==s&&n.push(t?new a(s):new i(s)),n}class o{constructor(e){this.nodes=r(e)}invert(){return this.nodes.forEach((e=>{e.invert()})),this}clone(){return new o(String(this))}toString(){return this.nodes.join(",")}}class i{constructor(e){const[,t,n,s]=e.match(u),[,o="",i=" ",a="",c="",d="",m="",p="",l=""]=n.match(f)||[],w={before:t,after:s,afterModifier:i,originalModifier:o||"",beforeAnd:c,and:d,beforeExpression:m},h=r(p||l,!0);Object.assign(this,{modifier:o,type:a,raws:w,nodes:h})}clone(e){const t=new i(String(this));return Object.assign(t,e),t}invert(){return this.modifier=this.modifier?"":this.raws.originalModifier,this}toString(){const{raws:e}=this;return`${e.before}${this.modifier}${this.modifier?`${e.afterModifier}`:""}${this.type}${e.beforeAnd}${e.and}${e.beforeExpression}${this.nodes.join("")}${this.raws.after}`}}class a{constructor(e){const[,t,n="",s="",r=""]=e.match(c)||[null,e],o={after:n,and:s,afterAnd:r};Object.assign(this,{value:t,raws:o})}clone(e){const t=new a(String(this));return Object.assign(t,e),t}toString(){const{raws:e}=this;return`${this.value}${e.after}${e.and}${e.afterAnd}`}}const c=new RegExp("^([\\W\\w]+)(?:(?:(\\s+)(and))(\\s+))$","i"),u=new RegExp("^(\\s*)([\\W\\w]*)(\\s*)$"),f=new RegExp("^(?:(not|only)(\\s+))?(?:(all|print|screen|speech)(?:(?:(\\s+)(and))(\\s+)([\\W\\w]+))?|([\\W\\w]+))$","i");var d=e=>new o(e),m=(t,n)=>{const s={};return t.nodes.slice().forEach((t=>{if("atrule"!==t.type)return;if("custom-media"!==t.name.toLowerCase())return;let r=null;try{r=e(t.params)}catch(e){return}if(!r||!r.nodes||!r.nodes.length)return;let o=-1;for(let e=0;e<r.nodes.length;e++){const t=r.nodes[e];if("space"!==t.type&&"comment"!==t.type){if("word"===t.type&&t.value.startsWith("--")){o=e;break}return}}if(o<0)return;const i=r.nodes[o].value.trim(),a=e.stringify(r.nodes.slice(o+1)).trim();s[i]=d(a),Object(n).preserve||t.remove()})),s};function p(e){const t=Object.assign({},Object(e).customMedia,Object(e)["custom-media"]);for(const e in t)t[e]=d(t[e]);return t}function l(e){return e.map((e=>{if(e instanceof Promise)return e;if(e instanceof Function)return e();const t=e===Object(e)?e:{from:String(e)};if(Object(t).customMedia||Object(t)["custom-media"])return t;const s=n.resolve(String(t.from||""));return{type:(t.type||n.extname(s).slice(1)).toLowerCase(),from:s}})).reduce((async(e,t)=>{const{type:n,from:r}=await t;return"css"===n||"pcss"===n?Object.assign(await e,await async function(e){const t=await w(e),n=s(t,{from:e});return m(n,{preserve:!0})}(r)):"js"===n?Object.assign(await e,await async function(e){return p(await import(e))}(r)):"json"===n?Object.assign(await e,await async function(e){return p(await h(e))}(r)):Object.assign(await e,p(await t))}),{})}const w=e=>new Promise(((n,s)=>{t.readFile(e,"utf8",((e,t)=>{e?s(e):n(t)}))})),h=async e=>JSON.parse(await w(e));function g(t){if(!t)return;let n=null;try{n=e(t)}catch(e){return}if(!n||!n.nodes||!n.nodes.length)return;if(1!==n.nodes.length)return;for(;"function"===n.nodes[0].type&&""===n.nodes[0].value;)n=n.nodes[0];let s=-1;for(let e=0;e<n.nodes.length;e++){const t=n.nodes[e];if("space"!==t.type&&"comment"!==t.type){if("word"===t.type&&t.value.startsWith("--")){s=e;break}return}}return s<0?void 0:n.nodes[s].value.trim()}function y(e,t){let n=e.nodes.length-1;for(;n>=0;){const s=b(e.nodes[n],t);s.length&&e.nodes.splice(n,1,...s),--n}return e}function b(e,t){const n=[];for(const s in e.nodes){const{value:r,nodes:o}=e.nodes[s],i=g(r);if(i&&i in t){for(const r of t[i].nodes){const o=e.modifier!==r.modifier?e.modifier||r.modifier:"",a=e.clone({modifier:o,raws:!o||e.modifier?{...e.raws}:{...r.raws},type:e.type||r.type});a.type===r.type&&Object.assign(a.raws,{and:r.raws.and,beforeAnd:r.raws.beforeAnd,beforeExpression:r.raws.beforeExpression}),a.nodes.splice(s,1,...r.clone().nodes.map((t=>(e.nodes[s].raws.and&&(t.raws={...e.nodes[s].raws}),t.spaces={...e.nodes[s].spaces},t))));const c=b(a,j(t,i));c.length?n.push(...c):n.push(a)}return n}o&&o.length&&y(e.nodes[s],t)}return n}const j=(e,t)=>{const n=Object.assign({},e);return delete n[t],n};function O(e,t){return Promise.all(t.map((async t=>{if(t instanceof Function)await t($(e));else{const s=t===Object(t)?t:{to:String(t)},r=s.toJSON||$;if("customMedia"in s)s.customMedia=r(e);else if("custom-media"in s)s["custom-media"]=r(e);else{const t=String(s.to||""),o=(s.type||n.extname(t).slice(1)).toLowerCase(),i=r(e);"css"===o&&await async function(e,t){const n=`${Object.keys(t).reduce(((e,n)=>(e.push(`@custom-media ${n} ${t[n]};`),e)),[]).join("\n")}\n`;await v(e,n)}(t,i),"js"===o&&await async function(e,t){const n=`module.exports = {\n\tcustomMedia: {\n${Object.keys(t).reduce(((e,n)=>(e.push(`\t\t'${S(n)}': '${S(t[n])}'`),e)),[]).join(",\n")}\n\t}\n};\n`;await v(e,n)}(t,i),"json"===o&&await async function(e,t){const n=`${JSON.stringify({"custom-media":t},null,"\t")}\n`;await v(e,n)}(t,i),"mjs"===o&&await async function(e,t){const n=`export const customMedia = {\n${Object.keys(t).reduce(((e,n)=>(e.push(`\t'${S(n)}': '${S(t[n])}'`),e)),[]).join(",\n")}\n};\n`;await v(e,n)}(t,i)}}})))}const $=e=>Object.keys(e).reduce(((t,n)=>(t[n]=String(e[n]),t)),{}),v=(e,n)=>new Promise(((s,r)=>{t.writeFile(e,n,(e=>{e?r(e):s()}))})),S=e=>e.replace(/\\([\s\S])|(')/g,"\\$1$2").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),x=e=>{const t="preserve"in Object(e)&&Boolean(e.preserve),n=[].concat(Object(e).importFrom||[]),s=[].concat(Object(e).exportTo||[]),r=l(n),o=Symbol("customMediaHelper");return{postcssPlugin:"postcss-custom-media",Once:async(e,n)=>{n[o]=Object.assign(await r,m(e,{preserve:t})),await O(n[o],s)},AtRule:(e,n)=>{"media"===e.name&&((e,t,{preserve:n})=>{if(e.params.indexOf("--")>-1){const s=d(e.params),r=String(y(s,t));if(null===r)return;if(r===e.params)return;e.cloneBefore({params:r}),n||e.remove()}})(e,n[o],{preserve:t})}}};x.postcss=!0;export{x as default};
Index: frontend/node_modules/postcss-custom-media/package.json
===================================================================
--- frontend/node_modules/postcss-custom-media/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/postcss-custom-media/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,95 @@
+{
+	"name": "postcss-custom-media",
+	"description": "Use Custom Media Queries in CSS",
+	"version": "8.0.2",
+	"contributors": [
+		{
+			"name": "Antonio Laguna",
+			"email": "antonio@laguna.es",
+			"url": "https://antonio.laguna.es"
+		},
+		{
+			"name": "Romain Menke",
+			"email": "romainmenke@gmail.com"
+		},
+		{
+			"name": "Jonathan Neal",
+			"email": "jonathantneal@hotmail.com"
+		},
+		{
+			"name": "Maxime Thirouin"
+		}
+	],
+	"license": "MIT",
+	"funding": {
+		"type": "opencollective",
+		"url": "https://opencollective.com/csstools"
+	},
+	"engines": {
+		"node": "^12 || ^14 || >=16"
+	},
+	"main": "dist/index.cjs",
+	"module": "dist/index.mjs",
+	"types": "dist/index.d.ts",
+	"exports": {
+		".": {
+			"import": "./dist/index.mjs",
+			"require": "./dist/index.cjs",
+			"default": "./dist/index.mjs"
+		}
+	},
+	"files": [
+		"CHANGELOG.md",
+		"LICENSE.md",
+		"README.md",
+		"dist"
+	],
+	"dependencies": {
+		"postcss-value-parser": "^4.2.0"
+	},
+	"peerDependencies": {
+		"postcss": "^8.3"
+	},
+	"scripts": {
+		"build": "rollup -c ../../rollup/default.js",
+		"clean": "node -e \"fs.rmSync('./dist', { recursive: true, force: true });\"",
+		"docs": "node ../../.github/bin/generate-docs/install.mjs && node ../../.github/bin/generate-docs/readme.mjs",
+		"lint": "npm run lint:eslint && npm run lint:package-json",
+		"lint:eslint": "eslint ./src --ext .js --ext .ts --ext .mjs --no-error-on-unmatched-pattern",
+		"lint:package-json": "node ../../.github/bin/format-package-json.mjs",
+		"prepublishOnly": "npm run clean && npm run build && npm run test",
+		"test": "node .tape.cjs && npm run test:exports",
+		"test:exports": "node ./test/_import.mjs && node ./test/_require.cjs",
+		"test:rewrite-expects": "REWRITE_EXPECTS=true node .tape.cjs"
+	},
+	"homepage": "https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-custom-media#readme",
+	"repository": {
+		"type": "git",
+		"url": "https://github.com/csstools/postcss-plugins.git",
+		"directory": "plugins/postcss-custom-media"
+	},
+	"bugs": "https://github.com/csstools/postcss-plugins/issues",
+	"keywords": [
+		"at-rule",
+		"atrule",
+		"css",
+		"csswg",
+		"custom",
+		"media",
+		"postcss",
+		"postcss-plugin",
+		"queries",
+		"query",
+		"specification",
+		"w3c"
+	],
+	"csstools": {
+		"cssdbId": "custom-media-queries",
+		"exportName": "postcssCustomMedia",
+		"humanReadableName": "PostCSS Custom Media",
+		"specUrl": "https://www.w3.org/TR/mediaqueries-5/#at-ruledef-custom-media"
+	},
+	"volta": {
+		"extends": "../../package.json"
+	}
+}
